[推荐系统]召回之引言

引言

其实最开始推荐系统根本就没召回,直接基于物料池进行排序就行,但是如果物料池变得超大,为了技术和业务发展,每个样本的特征越来越复杂,如果直接精排是没法工程的,所以增加召回,即用更简单的模型更少的特征或者直接规则对候选集快速筛选,减少排序阶段的耗时;同时召回的加入也能让业务更加丰富,如想对这个人增加热点物料,广告主重点推荐物料等等;

召回在推荐中的作用也十分重要,召回的商品准确与否直接决定了推荐的上限。召回的目标是从千万级甚至亿级的候选中召回几千个item,很老的资料中都是诸如相似商品召回,协同过滤召回,买了又买召回等,但是以单路形式呈现,随着发展,现在召回基本都是由多路组成,每一路会有不同的侧重点(优化目标)。在推荐系统,不同路可能代表了不同的优化目标,如喜欢、关注、观看时长、评论这些都可以分不同的路召回。每一路的召回都会拉取前K个候选集,对于每一路的K的大小可以不同。K的大小一般需要通过离线评估加上线上A/B测试的方式确定合理的取值范围。

  • 召回:候选集规模大,模型和特征简单,速度快,尽可能增加多路业务性质的召回;
  • 排序: 候选集不大,目标是保证排序的精准,模型和特征都更复杂;

但是多路召回仍存在一些不可避免的缺陷,比如说,从策略选择到候选集大小参数的调整都需要人工进行,另外不同策略之间的信息也是割裂的,无法综合考虑不同策略对同一个物品的影响。当然,现在针对这些缺陷已经有了较好的解决方法——基于Embedding的召回。
下图是整体流程逻辑:

而现在都是多路召回:

召回涉及到的算法大纲

模型类别角度划分

目前召回常用的方法有:

  • 传统召回:规则召回;userCF;itemCF;CF;协同召回;fpGrowth;SVD;SVD++;MF;DeepMF;
  • 基于FM的召回:FM;FFM;DeepFM(2017);
  • 图召回:DeepWalk(2014);LINE(2015);SDNE;Node2Vec(2016);EGES(2018);GCN;GraphSAGE;
  • 内容语义i2i召回:word2vec;FastText;Bert;
  • embedding召回(也是现在发展的趋势):DSSM(2013);Item2vec(2016);YouTubeDnn(2016);NCF(2017);Airbnb Embedding(2018);MIND(2019);CrossTag;EGES(2018);GAT;SDM(2019);NIRSA;TDM(2019);

ps:在实际使用中,往往不是如论文一样单一实现,如工业界常常会用FM、双塔模型等先学习user embedding、和 item embedding,然后用ball tree、fast ball tree 等近似最近邻算法进行检索,加快效率;

业务角度划分

借用下文章中的思维导图进行大纲式介绍

如上图所示,召回涉及到的点还是蛮多的,分为非个性化和个性化,其中:

  • 非个性化可以离线提前做好,主要是针对全网而言,并非针对个人,如电商中可以通过点击访问热力图获取当前最热商品、或者小视频新闻领域通过高CTR,高阅读完整或者高停留时长获取的视频新闻等物料,这类可能是突然发生的爆款;

个性化的:

  • 基于内容的(content—based): 如用户自身标签召回,
  • 基于行为的(behavior-based):如userCF和itemCF,其中userCF即通过相似的人找其他人的物料进行推荐;itermCF即通过物料之间相似性将该物料其他相似物料进行纳入
  • 基于特征的(feature-based):将用户的年龄,性别,地理位置,行为序列称为用户特征;对应的物料的熟悉称为物料特征,将其分别作为用户特征和物料特征进行召回,如i2i就是通过item embedding,找到与本item相似的其他item,可以通过在线学习不断的将商品生成的embedding作为商品向量特征传输进向量引擎如faiss进行直接的向量召回;
  • 基于社交网络(social-network):如通讯录关系进行寻找物料推送,比如妈妈在看婴儿产品,则直接将其推送给爸爸;

召回中的问题

文章中简要的提及了召回中的问题:
1) 负样本构建问题
在推荐中,正样本很容易获取,即哪些点击过,加购过,下单过的都是正样本,但是对应的负样本呢?但是不能简单的将未曝光过的样本当做负样本,因为假如某个样本能进召回池子,本身就可能是有用的,这时候将其作为负样本就不合适了;还有会遇到SSB(sample selection bias)问题,即正样本永远是整体推荐池的子集,而且很小,这样构建负样本会遇到采样偏差问题,故需要让选择出来的负样本,尽可能的能代表全体推荐池,特别是hard negative sample的问题;

  • 可以主动学习,人工选择选出hard negative sample;
  • 借助精排模型,将精排打分处于中间位置的item,如排名100~500左右的item,它们不是很靠前,可以看做负样本,也不是吊车尾,与正样本有一定相关性,区分起来有一定难度;
  • 业务规则:Airbnb论文的做法

2)文章中介绍的竞争问题:各召回通路最终会做merge去重,各通道之间重复度过高则没有意义,特别是新增召回通路,需要对历史通路有较好的补充增益作用,各召回通路之间存在一定的重叠和竞争问题。同时,召回通路的候选item,不一定能在精排中竞争透出,特别是历史召回少的item,由于其曝光样本很少,精排中打分不高,所以不一定能透出。召回和精排的相爱相杀,还需要通过全链路优化来缓解。

3)文章中介绍的目标不一致问题:目前的召回目标仍然是找相似,不论是基于内容的,还是基于行为和特征的。但精排和最终实际业务指标仍然看的是转化,相似不代表就能得到很好的转化,比如极端情况,全部召回与用户最近播放相似的短视频,显然最终整体的转化是不高的;

多路召回融合

在每个召回策略后都得到了一些候选集后,那么如何融合这些结果呢,这个可参考文章中的介绍

简单来讲,如针对上述3路召回结果,可有:

  • 直接融合排序法:即按照权重排序即可;
  • 加权法:通过设定的规则对商品进行统计学加权,或者对整路进行加权;
  • 自适应加权:如利用机器学习方法对不同路算权值;

常见术语解释

如I2I、U2I、U2U2I、U2I2I、U2TAG2I,如下图所示,其中“2”代表的是下图中的边,“U”与“I”代表的事下图中的节点。

  • I2I:计算item-item相似度,用于相似推荐、相关推荐、关联推荐;
  • U2I:基于矩阵分解、协同过滤的结果、直接给u推荐i;
  • U2U2I:基于用户的协同过滤,先找相似用户,再推荐相似用户喜欢的item;
  • U2I2I:基于物品的协同过滤,先统计用户喜爱的物品,再推荐他喜欢的物品;
  • U2TAG2I:基于标签的泛化推荐,先统计用户偏好的tag向量,然后匹配所有的item,这个tag一般是item的标签、分类、关键词等tag。

而大部分情况下,用的最多的还是i2i和u2i,下图是embedding召回中的模型列举

规则召回

即运营等基于人直接拍脑袋想到的规则

  • 基础属性召回:简单来讲就是人主观觉得有效的策略,比如热门召回、地域召回、家乡召回、标题召回,季节性召回等
  • 产品&运营策略召回:比如节日、活动等定制场景

参考文献:
【总结】推荐系统——召回篇【1】
推荐系统召回策略之多路召回与Embedding召回
推荐系统主流召回方法综述
如何评价召回系统的好坏
【推荐系统】召回模型线下评价指标
推荐算法架构1:召回

posted @ 2022-06-16 10:29  仙守  阅读(560)  评论(0编辑  收藏  举报