导语 | 召回模块面对几百上千万的举荐池物料规模,候选集非常宏大。因为后续有排序模块作为保障,故不须要非常精确,但必须保障不要脱漏和低提早。目前次要通过多路召回来实现,一方面各路能够并行计算,另一方面舍短取长。召回通路次要有非个性化和个性化两大类。
一、举荐算法总体架构
(一)举荐算法意义
随着互联网近十年来的大力发展,用户规模和内容规模均出现迅猛发展。用户侧日活过亿早已不是什么新鲜事,内容侧因为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两个矩阵,MN的矩阵转化为MK和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,因为其曝光样本很少,精排中打分不高,所以不肯定能透出。召回和精排的相爱相杀,还须要通过全链路优化来缓解。
作者简介
谢杨易
腾讯利用算法研究员。