文章目录
- 一、多路召回是什么?
- 二、召回路径
- 1.I2I
- 2.矩阵分解 - U2I
- 3.聚类推荐 - U2U2I
- 4.实时召回 - U2I2I
- 5.基于内容 - U2Tag2I
- 6.基于图的算法:U2***2I
- 三、融合排序
- 四、融合策略
- 1、按顺序展示
- 2、平均法
- 3、加权平均
- 4、动态加权法
- 5、机器学习权重法
- 小结
- 参考
- 未完待续
一、多路召回是什么?
“多路召回”策略,指的是采用不同的策略、特征或简单模型,分别召回一部分候选集,然后再把候选集混合在一起供后续排序模型使用。
在设计召回层的时候,“计算速度”与“召回率”这两个指标是相互矛盾的,即要想有比较高的计算速度,就需要简化召回策略,这样就使得召回率达不到我们的要求;同样的,如果要有比较高的召回率,就必须将召回策略复杂化,此时计算速度就会相应的降低。
而“多路召回”策略,是在“计算速度”和“召回率”之间进行权衡的结果。通过各种简单策略保证候选集的快速召回,从不同角度设计的策略保证召回率达到理想化,不至于损伤排序结果。在多路召回中,每个策略之间毫不相关,所以一般可以写并发多线程同时进行,这样可以更高效。
在选择召回策略时,要根据相关任务的特点,考虑合适的召回规则。就比如新闻推荐,召回规则可以是“热门新闻”、“新闻类型”、“新闻类容”、“作者召回”等等。
如上图所示,每一层的召回中都需要选取前K个候选集,而每一层的K的大小是超参数,可以是不同的。K的大小一般需要通过线上线下评估来选取合适的值。
二、召回路径
1.I2I
I2I是指从一个物品到达另外一个物品。
根据物品的相似性,当用户查看一个物品,就给他推荐另一个物品。
2.矩阵分解 - U2I
U2l是指从一个用户到达一个物品。
根据用户的直接行为,计算User和Item的tag(标签)矩阵,然后进行向量积,然后提前存储好进行推荐。
我的理解:当用户点击了某个商品,就会再次给他推荐这个商品。
3.聚类推荐 - U2U2I
U2U2I是指从一个用户,到达另一个用户,再到达一个物品。
根据用户信息(可以根据用户本身的属性,也可以根据用户的浏览内容),对用户进行聚类,找到最相似的用户,根据最相似用户喜欢的物品进行推荐。
4.实时召回 - U2I2I
U2I2I是指从一个用户,通过一个物品,到达另一个物品。
根据用户点击查看的物品,实时为用户更新推荐列表,将与物品相似或相关的物品推荐给用户。
5.基于内容 - U2Tag2I
先计算用户的偏好标签,然后对偏好标签进行相似度计算,获取可能感兴趣的物品。
6.基于图的算法:U2***2I
起始于U(用户),结束于I(物品),通过中间跨越多个U和I,最后得到为用户推荐的物品。
三、融合排序
多种召回策略的内容,取TOPN合并成一个新的列表。这个新的列表,可以直接返回给前端,进行展示;也可以发给精排,进行排序。
精排模型非常耗时,所以召回的内容,会经过粗排之后,把少量的数据给精排进行排序。
四、融合策略
召回策略 | 召回item列表(Item-Id:权重) | 召回item列表(Item-Id:权重) | 召回item列表(Item-Id:权重) |
召回策略1 | A:0.9 | B:0.8 | C:0.7 |
召回策略2 | B:0.6 | C:0.5 | D:0.4 |
召回策略3 | C:0.3 | D:0.2 | E:0.1 |
1、按顺序展示
比如说按召回策略1 > 召回策略2 > 召回策略3,则直接展示A、B、C、D、E
2、平均法
- 分子:权重和。
- 分母:在网上有看到两种结果,一种是所有召回策略中包含所计算物品召回策略的个数,另一种是召回策略总数。
按第一种说法,D为(0.4+0.2)/2
按第二种说法,D为(0.4+0.2)/3
小白我也不知道哪种是对的,希望大佬们指点嘻嘻。
3、加权平均
这一种方式需要人为指定每种策略的权重。
假定将上面三种策略的权重指定为0.4、0.3、0.2,则B的权重为(0.4 *0.8 + 0.6 *0.3 + 0 *0.2)/ (0.4+0.3+0.2)
通过这里,小白觉得上面的平均法的分母应该是召回策略总数。
4、动态加权法
计算每种召回策略的CTR(点击率),作为更新的动态加权。
这种方法只考虑了点击率,并不全面。
召回源CTR计算方法:
展现日志-带召回源:1,2,3,3,1,2,3
点击日志-带召回源:点击1
召回源的CTR = 点击数/展现数
5、机器学习权重法
利用机器学习的方法来设置权重,比如说,使用逻辑回归LR分类模型预先离线算好各种召回的权重,然后做加权召回。
这种方法考虑更多的特征以及环境因素,会更准确。
以上融合排序的方法,成本逐渐增大,效果依次变好。
小结
虽然现在工业界普遍采用多路召回的策略,但是多路召回仍存在一些不可避免的缺陷。比如说,从策略选择到候选集大小参数的调整都需要人工进行,另外不同策略之间的信息也是割裂的,无法综合考虑不同策略对同一个物品的影响。
而基于Embedding的召回,对这些缺陷已经有了较好的解决方法。
未完待续
由于faiss包一直安装失败,代码还没跑通。
对于Embedding召回,还没有理解透彻,未完待续!