共计 5486 个字符,预计需要花费 14 分钟才能阅读完成。
导语 | 召回模块面对几百上千万的举荐池物料规模,候选集非常宏大。因为后续有排序模块作为保障,故不须要非常精确,但必须保障不要脱漏和低提早。目前次要通过多路召回来实现,一方面各路能够并行计算,另一方面舍短取长。召回通路次要有非个性化和个性化两大类。
一、举荐算法总体架构
(一)举荐算法意义
随着互联网近十年来的大力发展,用户规模和内容规模均出现迅猛发展。用户侧日活过亿早已不是什么新鲜事,内容侧因为 UGC 生产方式的遍及,领有几十亿内容库的平台也不足为奇。如何让海量用户在海量内容中找到本人喜爱的,以及如何让海量内容被海量用户精准生产,始终以来都是每个公司非常外围的问题。在这个背景下,搜寻零碎和举荐零碎应运而生。搜寻零碎次要解决用户寻找感兴趣的内容,偏主动型生产。举荐零碎则次要解决内容推送给适合用户,偏被动型生产。二者一边牵引用户,一边牵引内容,是实现用户与内容匹配的两头媒介。举荐零碎在每个公司都是非常外围的位置,其意义次要有:
- 用户侧,为用户及时精准的推送感兴趣的个性化内容,并一直发现和造就用户的潜在趣味,满足用户生产需要,晋升用户体验,从而晋升用户活跃度和留存。
- 内容侧,作为流量散发平台,对生产者(如 UGC 作者、电商卖家等)有正向反馈刺激能力,通过搀扶有后劲的中小生产者,能够促成整体内容生态的凋敝倒退。
- 平台侧,举荐系统对内容散发的流量和效率都至关重要。通过晋升用户体验,可晋升用户留存,从而晋升日活。通过晋升用户转化和流量效率,可晋升电商平台订单量和内容平台用户人均时长等外围指标。通过晋升用户生产深度,可晋升平台整体流量,为商业化指标(如广告)打下基础,晋升 ARPU(每用户平均收入)等外围指标。举荐零碎与公司很多外围指标非亲非故,有极大的牵引和推动作用,意义非常重要。
(二)举荐算法根本模块
以后基于算力和存储的思考,还没方法实现整体端到端的举荐。一般来说举荐零碎分为以下几个次要模块:
- 举荐池:个别会基于一些规定,从整体物料库(可能会有几十亿甚至百亿规模)中抉择一些 item 进入举荐池,再通过汰换规定定期进行更新。比方电商平台能够基于近 30 天成交量、商品在所属类目价格档位等构建举荐池,短视频平台能够基于公布工夫、近 7 天播放量等构建举荐池。举荐池个别定期离线构建好就能够了。
- 召回:从举荐池中选取几千上万的 item,送给后续的排序模块。因为召回面对的候选集非常大,且个别须要在线输入,故召回模块必须轻量疾速低提早。因为后续还有排序模块作为保障,召回不须要非常精确,但不可脱漏(特地是搜寻零碎中的召回模块)。目前基本上采纳多路召回解决范式,分为非个性化召回和个性化召回。个性化召回又有 content-based、behavior-based、feature-based 等多种形式。
- 粗排:获取召回模块后果,从中抉择上千 item 送给精排模块。粗排能够了解为精排前的一轮过滤机制,加重精排模块的压力。粗排介于召回和精排之间,要同时兼顾精准性和低提早。个别模型也不能过于简单。
- 精排:获取粗排模块的后果,对候选集进行打分和排序。精排须要在最大时延容许的状况下,保障打分的精准性,是整个零碎中至关重要的一个模块,也是最简单,钻研最多的一个模块。精排零碎构建个别须要波及样本、特色、模型三局部。
- 重排:获取精排的排序后果,基于经营策略、多样性、context 上下文等,从新进行一个微调。比方三八节对美妆类目商品提权,类目打散、同图打散、同卖家打散等保障用户体验措施。重排中规定比拟多,但目前也有不少基于模型来晋升重排成果的计划。
- 混排:多个业务线都想在 Feeds 流中获取曝光,则须要对它们的后果进行混排。比方举荐流中插入广告、视频流中插入图文和 banner 等。能够基于规定策略(如广告定坑)和强化学习来实现。
举荐零碎蕴含模块很多,论文也是层出不穷,相对来说还是十分复杂的。咱们把握举荐零碎算法最重要的还是要梳理分明整个算法架构和大图,晓得每个模块是怎么做的,有哪些局限性和待解决问题,能够通过什么伎俩优化等。并通过算法架构大图将各个模块分割起来,死记硬背。从而不至于深陷某个细节,不能自拔。看论文的时候也应该先理解它是为了解决什么问题,之前曾经有哪些解决方案,再去理解它怎么解决的,以及相比其余计划有什么改良和优化点。本文次要解说举荐算法架构大图,帮忙读者把握全局,起到提纲挈领作用。
二、召回
(一)多路召回
召回模块面对几百上千万的举荐池物料规模,候选集非常宏大。因为后续有排序模块作为保障,故不须要非常精确,但必须保障不要脱漏和低提早。目前次要通过多路召回来实现,一方面各路能够并行计算,另一方面舍短取长。召回通路次要有非个性化和个性化两大类。
非个性化召回
非个性化召回与用户无关,能够离线构建好,次要有:
- 热门召回:比方近 7 天播放 vv 比拟高的短视频,能够联合 CTR 和工夫衰减做平滑,并过滤掉人均时长偏低的疑似骗点击 item。还能够抉择用户点赞多、好评多的 item 等。这部分次要基于规定实现即可。因为热门 item 容易导致马太效应,如果热门召回占整体通路比例过大,能够思考做肯定打压。
- 高效率召回:比方高 CTR、高完播率、高人均时长的短视频,这类 item 效率较高,但可能上架不久,历史播放 vv 不多,好评也须要工夫积攒,有可能不在热门召回内。
- 经营策略召回:例如经营构建的各个类目标榜单、片单,最新上架 item 等。
个性化召回
个性化召回与用户相干,千人千面,依据构建形式次要有:
- content-based:基于内容,能够通过用户标签,比方新注册时填写的喜爱的导演、演员、类目等信息,也能够通过用户历史行为作为 trigger,来选取与之内容类似的 item。次要有:
标签召回:比方演员、导演、item 标签 tag、类目等。
常识图谱。
多模态:比方题目语义类似的 item,首图类似的 item,视频了解类似的 item 等。
个别先离线构建好倒排索引,在线应用时通过用户标签或者历史行为 item 作为 trigger,取出对应候选即可。基于内容来构建倒排索引,不须要 item 有丰盛的行为,对冷启 item 比拟敌对。
- behavior-based:基于行为,次要是 userCF 和 itemCF 两种,都是通过行为来找类似,须要 user 或者 item 有比拟丰盛的行为。userCF 先找到与 user 行为类似的 user,选取他们行为序列中的 item 作为候选。itemCF 则找到每个 item 被行为类似的其余 item,构建倒排索引。
二者应用的时候有什么区别呢,集体认为次要有:
userCF 须要 user 行为较为丰盛,itemCF 则须要 item 被行为比拟丰盛。所以对于新闻类等 item 实时性要求高的场景,因为冷启 item 很多,所以能够思考 userCF。
一般来说用户量要远大于举荐池的 item 数量,也就是 user 向量远多于 item 向量,故 userCF 的存储压力和向量检索压力都要大于 itemCF。同时也导致 user 向量远比 item 向量要稠密,类似度计算准确性不如 itemCF。
协同过滤有哪些毛病呢?
因为大部分 user 只对很少一部分 item 有行为,导致 user 与 item 的行为矩阵非常稠密,甚至有些 user 基本没有任何行为,影响了向量类似度计算准确性。
user 和 item 数量都很大,行为矩阵存储压力很大。
矩阵稠密也带来一个问题,就是头部热门 item 容易与大多数 item 均类似,产生哈利波特问题,导致极其重大的马太效应。
那怎么解决这些问题呢,矩阵合成 MF 应运而生。它将 user 与 item 的行为矩阵,合成为 user 和 item 两个矩阵,M N 的矩阵转化为 M K 和 K * N 的两个矩阵,user 矩阵每一行就是一个 K 维 user 向量,item 矩阵每一列就是一个 K 维 item 向量。因为不像 CF 中向量是基于行为产生的,有比拟明确的含意,故 MF 中的向量也叫 user 隐向量和 item 隐向量。通过 MF,能够解决 CF 向量过于稠密的问题,同时因为 K 远小于 M 和 N,使得高维稠密向量实现了低维浓密化,大大减小了存储压力。
MF 矩阵合成有哪些实现办法呢,能够基于 SVD 和梯度降落来计算。因为 SVD 有肯定限度条件,基于梯度降落的比拟多。因而 MF 也被称为 model-based CF。
MF 实质上依然是基于用户行为来构建的,没有充分利用 user 和 item 的各种 feature,比方用户性别年龄,导致有大量的信息失落。LR 和 FM 就应运而生。
- feature-based:基于特色,比方 user 的年龄、性别、机型、地理位置、行为序列等,item 的上架工夫、视频时长、历史统计信息等。基于特色的召回构建形式,信息利用比拟充沛,成果个别也比拟好,对冷启也比拟敌对,是最近几年来的钻研重点。又次要分为:
- 线性模型:比方 FM、FFM 等,就不具体开展了。
- 深度模型:比方基于 DNN 的 DSSM 双塔(EBR、MOBIUS)、youtubeDNN(又叫 deepMatch)。基于用户序列的 Mind、SDM、CMDM、BERT4Rec。基于 GNN 的 Node2Vec、EGES、PingSage 等。这一块就不一一开展,是很大的话题。
线上应用时,能够有两种形式:
- 向量检索:通过生成的 user embedding,采纳近邻搜寻,寻找与之类似的 item embedding,从而找到具体 item。检索形式有哈希分桶、HNSW 等多种办法。
- i2i 倒排索引:通过 item embedding,找到与本 item 类似的其余 item,离线构建 i2i 索引。线上应用时,通过用户历史行为中的 item 作为 trigger,从倒排索引中找到候选集。
- social-network:通过好友点赞、关注关系、通信录关系等,找到社交链上的其他人,而后通过他们来召回 item。准则就是好友喜爱的 item,大概率也会喜爱,物以类聚人以群分嘛。
(二)召回优化
多路召回的各通路次要就是这些,那召回中次要有哪些问题呢,集体认为次要有:
负样本构建问题:召回是样本的艺术,排序是特色的艺术,这句话说的很对。召回正样本能够抉择曝光点击的样本,但负样本怎么选呢?抉择曝光未点击的样本吗,必定不行。
曝光未点击样本,能从已有召回、粗排、精排模块中竞争进去,阐明其 item 品质和相关性都还是不错的,作为召回负样本必定不适合。
SSB 问题,召回面向的整体举荐池,但能失去曝光的 item 只是其中很小的子集,这样构建负样本会导致非常重大的 SSB(sample selection bias)问题,使得模型重大偏离理论。
基于这个问题,咱们能够在举荐池中随机抉择 item 作为负样本,但又会有一个问题,随机抉择的 item,绝对于正样本来说,个别很容易辨别,所以须要有 hard negative sample 来刺激和晋升召回模型成果。构建 hard negative sample,是目前召回钻研中比拟多的一个方向,次要有:
- 借助模型:比方 Facebook EBR 选取上一版召回打分处于两头地位的 item,排名 101~500 左右的 item,它们不是很靠前,能够看做负样本,也不是吊车尾,与正样本有肯定相关性,辨别起来有肯定难度。EBR、Mobius、PinSage 等都有相似思路。这种办法很难定义分明到底什么样的 item 是有点类似,但又不那么类似,可能须要屡次尝试。
- 业务规定:比方抉择同类目、同价格档位等规定的 item,能够参考 Airbnb 论文的做法。
- in-batch:batch 内其余用户正样本,作为本用户的负样本。
- 被动学习:召回后果进行人工审核,bad case 作为负样本。
个别会将 hard negative 与 easy negative,依照肯定比例,比方 1: 100,同时作为召回负样本。个别 easy negative 还是占绝大多数的。
- SSB 问题:召回面向的是整体举荐池,item 数量微小,故须要做肯定的负采样,有比拟大的 SSB 样本抉择偏差问题。故须要让抉择进去的负样本,尽可能的能代表整体举荐池,从而晋升模型泛化能力。次要问题依然是负采样,特地是 hard negative sample 的问题。阿里 ESAM 尝试用迁徙学习,通过 loss 正则使得曝光样本上的模型,能够利用在非曝光 item 上,从而优化 SSB 问题。其余更多的办法则思考从负样本采样登程,联合 easy negative 和 hard negative。比方 EBR、Airbnb Embedding、Mobius、PinSage 等,都有 hard negative 的优化思路。
- 指标不统一问题:目前的召回指标依然是找类似,不论是基于内容的,还是基于行为和特色的。但精排和最终理论业务指标依然看的是转化,类似不代表就能失去很好的转化,比方极其状况,全副召回与用户最近播放类似的短视频,显然最终整体的转化是不高的。百度 Mobius 在召回阶段引入 CPM,将业务指标作为向量检索后的截断,可优化相关性高但转化率低的 item。阿里的 TDM 则通过最大堆树重构了 ANN 召回检索过程,大大降低了检索计算量,从而可包容简单模型,比方 DIN,使得召回与排序在结构上能够对齐(当然样本上会差别很大),也算是对此类问题有肯定的优化。
- 竞争问题:各召回通路最终会做 merge 去重,各通道之间反复度过高则没有意义,特地是新增召回通路,须要对历史通路有较好的补充增益作用,各召回通路之间存在肯定的重叠和竞争问题。同时,召回通路的候选 item,不肯定能在精排中竞争透出,特地是历史召回少的 item,因为其曝光样本很少,精排中打分不高,所以不肯定能透出。召回和精排的相爱相杀,还须要通过全链路优化来缓解。
作者简介
谢杨易
腾讯利用算法研究员。