大家好,今天分享快手基于分治思想的召回论文,
Divide and Conquer: Towards Better Embedding-based Retrieval for Recommender Systems from a Multi-task Perspective
https://arxiv.org/abs/2302.02657
尽管还没来及在业务上实践,个人感觉文章的思想非常简洁有效,只是需要多一点的工程资源。文中涉及的Embedding-based retrieval (EBR) methods也就是我们召回阶段经常用的双塔召回。这个方向通常有两个非常重要的优化方向,在一个完善的工业推荐系统都会考虑到。
1. 样本优化
业界有这样的说法『精排是模型的艺术,召回是样本的艺术』。这句话未必全面。但是反映出了我们在做召回模型时样本的选取对模型的效果的重要作用。因为召回阶段面向的是全库检索,而线上的曝光和点击等行为对应的物料与全库物料的偏差太多。所以不能直接使用。
负样本 。召回阶段的负样本不能全是easy负样本(全是负样本无法得到用户细粒度兴趣),也不能全是hard负样本(因为样本选取偏差,面对全库物料反而无法获取和用户兴趣相关的物料)。所以这里面我们需要融合easy负样本和hard负样本,但是如何有效融合,以及hard负样本如何选取,有关论文很多,这里不再展开。有兴趣可以看看我这里整理的有关搜索的向量召回:https://zhuanlan.zhihu.com/p/566354054,里面大部分文章都有自己的样本采样方法。正样本 。召回阶段也未必只把点击等用户正反馈当作正样本,可能曝光也可以作为正样本(这里还可以设立pairwise的loss,用点击>曝光>进精排>随机来建模。可以参考阿里的《Multi-Objective Personalized Product Retrieval in Taobao Search》)。2. 用户多兴趣向量表示
传统的双塔把用户表示成一个向量。这里有2个显然的问题:
第1个是用户的兴趣点是多样的,一个用户向量要涵盖用户所有的兴趣点确实比较难做;第二个使用单一用户向量召回的物料可能会有聚集现象,多样性差。所以业界已经有成熟的用户多兴趣向量优化。比较经典的可以是阿里的MIND《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》论文结构
如上图所示,本文的思路非常简单,就是分治,把候选的物料按照相似度非常K组,每个正样本对应的负样本只从自己的组内选取。线上的时候,我们分别从每个组内进行召回,然后聚合。这样做的好处有两点与引言的两个优化方向相对应。
传统的面对全库检索。在负样本上很难有效的平衡easy负样本和hard负样本。论文也证实了这个思想。如上图所示,hard负样本加的越多,在一个相似聚集的组内的召回效果越好,但是在组外的效果就越差。整体的召回表现需要平衡组内与组外表现。
现在我们分组治理,在每组进行单独的负样本抽取,召回也在组内进行召回,这样我们只关心组内的召回效果就行就不用关心组外了。
2. 每个用户会从多个分组内召回结果,有效的避免了召回聚集,增加了召回多样性。另外在每个组内用户的向量表示是不同的,也算是用户多兴趣向量的表示了。具体如何在每组内表示出不同的用户向量,论文介绍了3中方法:1)简单的方法我们可以在编码用户向量的时候,直接引入分组特征。如下:
其中s是用户行为列表,t是分组id,Transformer是用户向量编码器;2)或者也可以用MMOE的多任务表示,把每个分组当作一个任务计算出一个用户向量;3)最终效果比较好,效率也比较高的方法是
把分组id对应的embedding,和用户序列作相乘。相比第一种直接引入的方式,这样分组信号的引入,作用更加强烈。
未来展望
个人理解这里在用户向量的表示上还有其他策略可以实验优化:
用户行为序列的特征需要引入物料属于哪个分组的特征可以尝试使用分组t作为target,引入target attention来建模不同组的兴趣作者 :张月鹏 整理 :NewBeeNLP原文 :https://zhuanlan.zhihu.com/p/666339975版权申明:内容来源网络,仅供学习研究,版权归原创者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!