【推荐算法】多路召回 && 融合排序

4,709 阅读5分钟

参考网址

zhuanlan.zhihu.com/p/388601198

图片.png

1/前言

我们都知道,整个推荐系统分成很多的环节,
比如<1>召回环节
    <2>排序环节,包括粗排和精排,其中粗排又称为预截断
    <3>人工干预规则环节
    <4>最后的推荐环节(正式开始推荐)

为什么把排序又分成粗排和精排序?
   因为如果把所有召回的item直接交给精排模型,那么对精排的算力是一个很大的考验,是很耗时的。
   所以先进行一次粗排,也就是预截断,就是先过滤掉一部分。
   把预截断之后的item再交给精排模型,最后产出要推荐的item。
   这样既可以达到目的,又可以不对性能造成挑战。

2/多路召回

从多个角度,设计多个召回策略,
多个召回策略之间是不相关的。

<1>什么是多路召回

 所谓的“多路召回策略”就是指采用不同的策略、特征或者简单模型,分别召回一部分候选集item,
 然后再把这些候选集item混合在一起后供后续排序模型使用的策略。
 
 然后我们来说说为啥需要用到多路召回策略。
 我们都知道,我们在设计召回层的时候,“计算速度”与“召回率”这两个指标是相互矛盾的。
 
 也就是说在提高计算速度的时候需要尽量简化召回策略,这就会导致召回率不尽人意.
 同样的,需要提高召回率时就需要复杂的召回策略,这样计算速度肯定会相应的降低。
 在权衡两者后,目前工业界普遍采用`多个简单的召回策略`叠加成一个复合的“多路召回策略”。

在多路召回中,每个策略之间毫不相关,所以一般可以写并发多线程同时进行。
例如:新闻类的推荐系统中,我们可以按文章类别(娱乐/军事/财经等类别)、作者、热度等分别进行召回,
    这样召回出来的结果更贴切实际要求,同时我们可以开辟多个线程分别进行这些召回策略,提升效率。

image.png

在推荐系统的召回环节,我们一般采用的多路召回,因为单个召回模型都是有自己的不足和缺点的。
单模型召回,很难找回全面的候选item,也即是召回率会比较低。

多路召回可以互相弥补不足,效果更好,三个臭皮匠顶个诸葛亮。
我们需要通过多路召回,构成一个复合的多路召回策略模型。
多路召回之间毫不相干,一般可以编写并发的多线程执行召回。
每一路的召回的item都有自己的顺序。

image.png

<2>怎么进行多路召回

在上图中,有4种召回策略

(1)实时召回(U2I2I)
   实时地根据你的最新的行为来更新你的推荐列表。
   我得到你实时的行为列表,然后根据I2I进行扩展,得到你可能喜欢的其他的item。
   这种召回方式可以及时的获取到用户最新的兴趣点,这是cb召回所不能做到的。
 
<2>离线计算好的召回
   (1)基于内容(U2tag2I)
       先计算好你的偏好的tag,就是用户的profile,然后根据这个tag的相似度找到你可能感兴趣的item.
       (通俗讲:就是先知道你喜欢什么类型的item,然后再去找具体的item)
   
   (2)矩阵分解(U2I)
      这是协同过滤的一种(其实就是item-based)
      我们提前存储好user和item之间的矩阵。
      给user推荐item
   
   (3)聚类推荐(U2U2I)
      其实就是user-based
      先找到和目标用户类似的用户,称为邻居用户,
      然后把邻居用户喜欢的item推荐给目标用户。
      这样可以扩展用户的兴趣点。
   
   (4)热门或者流行的item的召回
   
   (5)考虑地理位置,‘本地’,‘非本地’

4/融合排序

<1>什么是融合排序

在多路召回中,每一路的召回之间都是互不相干的。
每一路的召回的item都有自己的顺序。
但是我们整个召回环节的输出只有一个排序,
所以我们需要对这多个候选集按照一定的策略进行最终的排序。

<2>怎么进行融合排序

那么多略召回的item之间如何融合排序呢?

image.png

上图中,有3路召回x,y,z。
每一种召回策略都召回了3个item,并且每个item都有自己的权重。
(不同召回的权重对于其他的策略是没有任何意义的。)

<1>按照顺序展示
   比如我们对召回策略做一个优先级的排序
   比如我们认为 召回策略x的优先级>召回策略y的优先级>召回策略z的优先级
   所以,x召回策略的item放在最前面,以此类推。

<2>item的权重平均法
    在所有的召回策略中,对每一个item进行权重的平均
    注意:分母是所有召回策略的数量,即使某个召回策略中并没有召回某个item,分母也是总的召回策略的数量。

<3>加权的item的权重平均法
   我们提前给每一种召回策略赋予一个权重
   这个权重是我们自己赋予的,并不一定科学

<4>`动态的`加权的item加权平均
     计算xyz3种策略召回的ctr,作为每天更新的动态权重

<5>机器学习模型
     采用机器学习模型,预测每个item可能被用户点击的一个概率,然后根据概率大小倒排。
     常用的模型有GBDT+LR,wide&&deep(就是LR和DNN的结合)