目录
演化关系图
推荐系统简介
什么是推荐系统
为什么需要推荐系统
如何构建推荐系统(推荐系统的步骤)
常用评测指标
召回与排序
召回层与排序层的特点
多路召回
使用Embedding做召回
A/B测试
为什么需要A/B测试
A/B测试的流程
演化关系图
![](https://img-blog.csdnimg.cn/img_convert/af071a32a3233fe8db59204629085156.png)
推荐系统简介
什么是推荐系统
为什么需要推荐系统
-
用户:在用户需求并不十分明确的情况下进行信息的过滤,与搜索系统相比,推荐系统更多的利用用户的各类历史信息猜测其可能喜欢的内容。实现信息过滤和优化的功能。
-
公司:提高用户粘性和留存率
-
产品:解决了2/8现象的问题(也叫长尾效应),让小众的物品可以展示到需要它们的用户面前。
如何构建推荐系统(推荐系统的步骤)
![img](https://img-blog.csdnimg.cn/img_convert/4e6ed74bf9c1f66ab288c51ba4b02480.png)
四个环节分别是:召回、粗排、精排和重排。召回目的如上所述;有时候因为每个用户召回环节返回的物品数量还是太多,怕排序环节速度跟不上,所以可以在召回和精排之间加入一个粗排环节,通过少量用户和物品特征,简单模型,来对召回的结果进行个粗略的排序,在保证一定精准的前提下,进一步减少往后传送的物品数量,粗排往往是可选的,可用可不同,跟场景有关。之后,是精排环节,使用你能想到的任何特征,可以上你能承受速度极限的复杂模型,尽量精准地对物品进行个性化排序。排序完成后,传给重排环节,传统地看,这里往往会上各种技术及业务策略,比如去已读、去重、打散、多样性保证、固定类型物品插入等等,主要是技术产品策略主导或者为了改进用户体验的。
在推荐系统架构中召回层与排序层是推荐系统的核心算法层,而将推荐过程分成召回层与排序层主要是基于工程上的考虑,其中召回阶段负责将海量的候选集快速缩小为几万到几千的规模;而排序层则负责对缩小后的候选集进行精准排序。
特点:
常用评测指标
![](https://img-blog.csdnimg.cn/img_convert/1aef5b0ee03923a8781cb31591cd8cf3.png)
-
TopN推荐
-
覆盖率
-
多样性:推荐列表中所有物品之间的不相似性,可以通过不同的相似性函数来度量推荐列表中商品的相似性,比如商品基于内容的相似,基于协同过滤的相似,这样就可以得到不同角度的多样性.
-
新颖性:满足推荐的新颖性最简单的方法就是给用户推荐他们之前没有看过的物品,但是每个用户没见过的物品数量是非常庞大的,所以一般会计算推荐物品的平均流行度,流行度越低的物品越有可能让用户觉得新颖,因此,如果推荐结果中的物品平均热门程度比较低说明推荐的结果就可能比较新颖.
-
AUC曲线:ROC曲线下与坐标轴围成的面积
![](https://img-blog.csdnimg.cn/img_convert/a3a262dec51a58b53c6550f6f129b1a0.png)
为什么把AUC曲线作为评价指标呢?因为AUC对样本不平衡的问题具有鲁棒性。而推荐系统是一个样本不平衡的问题(正样本(即推荐列表中被用户点击的项目)在整个推荐列表中是非常少的,而大部分都是负样本。)除了AUC以外,我们还可以使用F1score作为评价指标
召回与排序
在推荐系统架构中召回层与排序层是推荐系统的核心算法层,而将推荐过程分成召回层与排序层主要是基于工程上的考虑,其中召回阶段负责将海量的候选集快速缩小为几万到几千的规模;而排序层则负责对缩小后的候选集进行精准排序。所以在召回阶段往往会利用少量的特征和简单的模型对大规模的数据集进行快速的筛选,而在排序层一般会使用更多的特征和更加复杂的模型进行精准的排序。
召回层与排序层的特点
-
召回层:待计算的候选集合大、计算速度快、模型简单、特征较少,尽量让用户感兴趣的物品在这个阶段能够被快速召回,即保证相关物品的召回率
-
排序层:首要目标是得到精准的排序结果。需要处理的物品数量少,可以利用较多的特征,使用比较复杂的模型。
在设计召回层时,“计算速度”和“召回率”其实是矛盾的两个指标,为提高“计算速度”,需要使召回策略尽量简单一些;而为了提高“召回率”,要求召回策略尽量选出排序模型所需要的候选集,这也就要求召回策略不能过于简单。在权衡计算速度和召回率后,目前工业界主流的召回方法是采用多个简单策略叠加的“多路召回策略”。
多路召回
所谓的“多路召回”策略,就是指采用不同的策略、特征或简单模型,分别召回一部分候选集,然后把候选集混合在一起供后续排序模型使用,可以明显的看出,“多路召回策略”是在“计算速度”和“召回率”之间进行权衡的结果。
如下图是多路召回的一个示意图,在多路召回中,每个策略之间毫不相关,所以一般可以写并发多线程同时进行,这样可以更加高效。
![](https://img-blog.csdnimg.cn/img_convert/85549ac8ac12e9ebae52c0aa5acbdd96.png)
使用Embedding做召回
参考腾讯的推荐系统 embedding 技术实践总结
[推荐系统 embedding技术实践总结] https://zhuanlan.zhihu.com/p/143763320
A/B测试
为什么需要A/B测试
![](https://img-blog.csdnimg.cn/img_convert/e7068c16d2bcab31b673e58f77f6dc54.png)
A/B测试的流程
![](https://img-blog.csdnimg.cn/20201019204528232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2Mjc5NTYy,size_16,color_FFFFFF,t_70)