核心内容:
协同过滤
矩阵分解
FM
GBDT + LR
Wide&Deep
一、什么是推荐系统
Recommendation or recommender systems are systems that exploit some
(usually incomplete)knowledge a list of users and their preferences
over a range of items,in order to suggest to those or to new users
interactions with items with which they had not interacted before[1].
这是我在一篇有关文化遗产推荐系统的综述文章中看到的解释,简单来说,推荐系统其实就是一种能够挖掘用户和他们偏好商品之间的部分知识(信息)的系统,能够表明老用户或者新用户与和他们之前所没有接触过的商品间的互动。
关于互动,这篇文章也给出了解释:
Interaction can be any type of engagement depending on the context,
and may vary from buying options, to movie viewing and music
listening, or path following.
也就是说,“互动”主要取决于情境,可以有多种表现形式。从购买选择,到观影,到听音乐或者是路径跟随(?path following).
此外,推荐系统技术属于人工智能的范畴,任何能够提供推荐的系统都可以被看作是狭义人工智能的典型表现。所谓狭义是指研究一个非常有限的框架背景。
可以说,推荐系统的产生主要是为了应付“信息过载”。因为作为用户,在现在这个时代每天都有很多很多信息来源,正是因为这些信息源太多,而且便于获得,所以导致了信息过载问题。(即我处理信息的需求超出了我的个人能力范畴。)
The personalisation of the content
个性化内容。
1.What
用户:推荐系统是一种帮助用户快速发现有用信息的工具
公司:推荐系统是一种增加公司产品与用户接触,购买等行为概率的工具
2.Why
用户:在用户需求并不十分明确的情况下进行信息的过滤,与搜索系统相比,推荐系统更多的利用用户的各类历史信息猜测其可能喜欢的内容
公司:解决产品能够最大限度地吸引用户,留存用户,增长用户黏性,提高用户转化率,从而达到公司商目标连续增长的目的.
3.Who
用户与公司是需要推荐系统的主要对象。
二、常用评测指标
如何评价一个推荐系统的好坏?
1.用户满意度
2.预测准确度
3.覆盖率
4.多样性
5.新颖性
6.AUC曲线
1.用户满意度
用户作为推荐系统的参与者,其满意度决定了推荐系统的好坏。
但是用户满意度是无法离线计算的,只能通过调查或在线实验
(关于在线实验:
比如通过用户的线上行为统计得到的,比如电商场景中,用户如果购买了推荐的商品说明一定程度上他们是满意的,因此可以通过购买率度量用户的满意度,与购买率类似的点击率,用户停留时间和转化率等指标都可以用来度量用户的满意度.)
2.预测准确度
度量用户的实际行为与推荐系统预测结果的准确度。
是离线评价指标,常用的两个指标如下:
A.评分预测
预测用户对物品的评分行为成为评分预测。
评分预测模型通过对用户的历史物品评分记录进行建模,进而得到用户的兴趣模型,然后使用该模型预测用户未见过商品的评分.
评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算.
对于测试集中的一个用户uuu和物品iii,令ruir_{ui}rui是用户uuu对物品iii的实际评分,而rui^\hat{r_{ui}}rui^是推荐模型预测出的评分,那么RMSE可以定义为: RMSE=∑u,i∈T(rui−r^ui)2∣T∣ RMSE = \sqrt{\frac{\sum_{u,i \in T}(r_{ui} - \hat{r}{ui})^2}{|T|}} RMSE=∣T∣∑u,i∈T(rui−r^ui)2 MAE定义为: MAE=∑u,i∈T∣rui−r^ui∣∣T∣ MAE = \frac{\sum{u,i \in T}|r_{ui} - \hat{r}_{ui}|}{|T|} MAE=∣T∣∑u,i∈T∣rui−r^ui∣ RMSE由于存在平方项,使得使得用户真实评分与推荐系统预测评分相差较大的用户加大了惩罚,即该评测指标对系统要求更加的苛刻。
疑问1:上面是我从开源链接里复制过来的,我的理解并不是加大了惩罚,因为RMSE其实还开了根号,如果非要说平方项使得惩罚被加大了也应该是MSE——均方误差吧?
疑问2:|T|是样本容量吗?
B.TopN推荐
推荐系统在给用户推荐物品的时候,往往会给用户一个列表的推荐物品,这种场景下的推荐成为是TopN推荐,该推荐方式最常用的预测准确率指标一般是精确率(precision)和召回率(recall),令R(u)R(u)R(u)为通过推荐模型得到的推荐列表,T(u)T(u)T(u)为用户在实际场景中(测试集)的行为列表.
疑问:所谓的行为列表是用户实际购买的商品列表吗?
精确率(precision): 分类正确的正样本个数占分类器判定为正样本的样本个数比例(这里R(u)R(u)R(u)相当于是模型判定的正样本,即预测所得的正样本) Precision=∑u∈U∣R(u)∩T(u)∣∑u∈U∣R(u)∣ Precision= \frac{\sum_{u \in U}|R(u) \cap T(u)|}{\sum_{u \in U}|R(u)|} Precision=∑u∈U∣R(u)∣∑u∈U∣R(u)∩T(u)∣
召回率(recall): 分类正确的正样本个数占真正的正样本个数的比例(这里的T(u)T(u)T(u)相当于真正的正样本集合,即用户实际行为的正样本)
Recall=∑u∈U∣R(u)∩T(u)∣∑u∈U∣T(u)∣ Recall= \frac{\sum_{u \in U}|R(u) \cap T(u)|}{\sum_{u \in U}|T(u)|} Recall=∑u∈U∣T(u)∣∑u∈U∣R(u)∩T(u)∣
有时候为了更加全面的评估TopN推荐,通常会选取不同的推荐列表长度 计算 多组精确率与召回率然后分别绘制出精确率曲线和召回率曲线,需要注意的是这里并不是PR曲线,感兴趣的可以了解一下PR曲线相关的知识.
3.覆盖率
假如现在要做一个推荐系统,你希望实现什么样的功能?
是让热销产品更加热销?让冷门产品更加冷门?
还是让所有商品出现的几率都差不多?
上面两种场景,第二种或许才是大家期望的吧。如果推荐系统的覆盖率是100%,就意味着任何的商品内容都有可能出现在用户面前;而如果覆盖率只有10%,那么就意味着只能推荐十分之一的商品给用户,推荐的内容就太狭窄了。
然而覆盖率只能说明商品的种类问题,不能说明每种商品的出场频率。因此就需要额外的指标来说明了——基尼系数
覆盖率是用来描述一个推荐系统对物品长尾(long tail)的发掘能力,一个简单的定义可以是:推荐系统所有推荐出来的商品集合数占总物品集合数的比例.
主流商品往往代表了绝大多数用户的需求,而长尾商品往往代表了一小部分用户的个性化需求。因此,如果要通过发掘长尾提高销售额,就必须充分研究用户的兴趣,而这正是个性化推荐系统主要解决的问题。
也有人说,长尾商品是那些销量不高,需求不旺盛的产品。
但是对于相同的覆盖率,不同物品的数量分布,或者说是物品的流行度分布是可以不一样的.
为了更好的描述推荐系统挖掘长尾的能力,需要统计不同物品出现次数的分布.
如果所有的物品都出现在推荐列表中,并且出现的次数都差不多,那么推荐系统发掘长尾的能力就很好.所以可以通过研究物品在推荐列表中出现的次数分布来描述推荐系统挖掘长尾的能力,如果这个分布比较平缓说明推荐系统的覆盖率比较高,而如果分布比较陡说明推荐系统的覆盖率比较低.下面分别使用信息熵和基尼系数来定义覆盖率.
信息熵定义覆盖率: 其中p(i)p(i)p(i)是物品iii的流行度除以所有物品流行度之和 H=−∑i=1np(i)logp(i) H = -\sum_{i=1}^n p(i) logp(i) H=−i=1∑np(i)logp(i) 基尼系数定义覆盖率: 其中iji_jij是按照物品流行度p从小到大排序的物品列表中第jjj个物品 G=1n−1∑j=1n(2j−n−1)p(ij) G=\frac{1}{n-1} \sum_{j=1}^{n}(2j-n-1)p(i_{j}) G=n−11j=1∑n(2j−n−1)p(ij)
4.多样性
人的兴趣爱好通常是比较广泛的,所以一个好的推荐系统得到的推荐列表中应该尽可能多的包含用户的兴趣,只有这样才能增加用户找到感兴趣物品的概率.度量推荐列表中物品的多样性换句话说就是度量推荐列表中所有物品之间的不相似性,可以通过不同的相似性函数来度量推荐列表中商品的相似性,比如商品基于内容的相似,基于协同过滤的相似,这样就可以得到不同角度的多样性.令函数s(i,j)s(i,j)s(i,j)为物品iii和物品jjj的相似性,那么用户推荐列表的多样性可以定义为: Diversity(R(u))=1−∑i,j∈R(u)s(i,j)12∣R(u)∣(∣R(u)∣−1) Diversity(R(u))=1-\frac{\sum_{i,j \in R(u)}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} Diversity(R(u))=1−21∣R(u)∣(∣R(u)∣−1)∑i,j∈R(u)s(i,j) 推荐系统整体的多样性可以定义为所有用户推荐列表多样性的平均值: Diversity=1U∑u∈UDiversity(R(u)) Diversity = \frac{1}{U} \sum_{u\in U}Diversity(R(u)) Diversity=U1u∈U∑Diversity(R(u))
5.新颖性
满足推荐的新颖性最简单的方法就是给用户推荐他们之前没有看过的物品,但是每个用户没见过的物品数量是非常庞大的,所以一般会计算推荐物品的平均流行度,流行度越低的物品越有可能让用户觉得新颖,因此,如果推荐结果中的物品平均热门程度比较低说明推荐的结果就可能比较新颖.
6.AUC曲线
AUC(Area Under Curve),ROC曲线下与坐标轴围成的面积
在讲AUC前需要理解混淆矩阵,召回率,精确率,ROC曲线等概念
TP:真的真了(真实值是真的,预测也是真)
FN:真的假了(真实值是真的,预测为假了)
FP:假的真了(真实值是假的,预测为真了)
TN:假的假了(真实值是假的,预测也是假)
召回率与准确率(上述已经进行了说明),下面是另一种形势的定义,本质上都是一样的: Recall=TPTP+FN Precise=TPTP+FP Recall = \frac{TP}{TP+FN}\ Precise=\frac{TP}{TP+FP} Recall=TP+FNTP Precise=TP+FPTP ROC(Receiver Operating Characteristic Curve)曲线:
ROC曲线的横坐标为假阳性率(False Positive Rate, FPR),N是真实负样本的个数, FP是N个负样本中被分类器预测为正样本的个数。
纵坐标为真阳性率(True Positive Rate, TPR),P是真实正样本的个数,TP是P个正样本中被分类器预测为正样本的个数。
注:还有其他的评价指标具体可以参考项亮的《推荐系统实践》
三、召回
3.1 召回层在推荐系统架构中的位置及作用
在推荐系统架构中召回层与排序层是推荐系统的核心算法层,而将推荐过程分成召回层与排序层主要是基于工程上的考虑,其中召回阶段负责将海量的候选集快速缩小为几万到几千的规模;而排序层则负责对缩小后的候选集进行精准排序。所以在召回阶段往往会利用少量的特征和简单的模型对大规模的数据集进行快速的筛选,而在排序层一般会使用更多的特征和更加复杂的模型进行精准的排序。
下面是召回层与排序层的特点
**召回层:**待计算的候选集合大、计算速度快、模型简单、特征较少,尽量让用户感兴趣的物品在这个阶段能够被快速召回,即保证相关物品的召回率
**排序层:**首要目标是得到精准的排序结果。需要处理的物品数量少,可以利用较多的特征,使用比较复杂的模型。
在设计召回层时,“计算速度”和“召回率”其实是矛盾的两个指标,为提高“计算速度”,需要使召回策略尽量简单一些;而为了提高“召回率”,要求召回策略尽量选出排序模型所需要的候选集,这也就要求召回策略不能过于简单。在权衡计算速度和召回率后,目前工业界主流的召回方法是采用多个简单策略叠加的“多路召回策略”
3.2 多路召回策略
所谓的“多路召回”策略,就是指采用不同的策略、特征或简单模型,分别召回一部分候选集,然后把候选集混合在一起供后续排序模型使用,可以明显的看出,“多路召回策略”是在“计算速度”和“召回率”之间进行权衡的结果。其中,各种简单策略保证候选集的快速召回,从不同角度设计的策略保证召回率接近理想的状态,不至于损伤排序效果。
如下图是多路召回的一个示意图,在多路召回中,每个策略之间毫不相关,所以一般可以写并发多线程同时进行,这样可以更加高效。
上图只是一个多路召回的例子,也就是说可以使用多种不同的策略来获取用户排序的候选商品集合,而具体使用哪些召回策略其实是与业务强相关的,针对不同的任务就会有对于该业务真实场景下需要考虑的召回规则。例如视频推荐,召回规则可以是“热门视频”、“导演召回”、“演员召回”、“最近上映“、”流行趋势“、”类型召回“等等。
多路召回存在的问题
虽然多路召回权衡了计算速度和召回率的问题,可以使得用于排序的候选商品更加的丰富,但是实际的多路召回仍然存在一些问题。如上图所示,对于每一路召回都会从商品集合中拉回K个商品,这里的K是一个超参数,对于K的选择一般需要通过离线评估加线上的A/B测试来确定合理的K值。除此之外,对于不同的任务具体策略的选择也是人工基于经验的选择,选择的策略之间的信息是割裂的,无法总和考虑不同策略对一个物品的影响。
基于上述问题,Embedding召回是一个综合性强且计算速度也能满足需求的召回方法。
3.3 Embedding召回
在当前的主流推荐系统中,Embedding的身影已经无处不在,从一定意义上可以说,把Embedding做好了,整个推荐系统的一个难题就攻克了,下面会从什么是Embedding,常见的Embedding技术有哪些,以及如何用Embedding做召回进行一个简单的总结。
Embedding是什么?
Embedding其实是一种思想,主要目的是将稀疏的向量(如one-hot编码)表示转换成稠密的向量,下图直观的显示了one-hot编码和Embedding表示的区别于联系,即Embedding相当于是对one-hot做了平滑,而onehot相当于是对Embedding做了max pooling。
常见的Embedding技术有哪些?
目前主流的Embedding技术主要可以分为三大类。
- text embedding
- image embedding
- graph embedding
在推荐系统领域,text embedding技术是目前使用最多的embedding技术,对于文本特征可以直接使用该技术,对于非文本的id类特征,可以先将其转化成id序列再使用text embedding的技术获取id的embedding再做召回。
常见的text Embedding的技术有:
- 静态向量:word2vec, fasttext, glove
- 动态向量:ELMO, GPT, BERT
对于image embedding其实主要是对于有图或者视频的特征,目前计算机视觉模型已经发展的比较成熟了,对于图像与视频的识别都有效果比较好的模型,大部分都是卷积模块通过各种连接技巧搭建的高效模型,可以使用现有的预训练模型提取图像或者视频的向量特征,然后用于召回。
对于社交网络相关的推荐,进行推荐的用户与用于之间或者商品之间天然的存在某种复杂的图结构的关系,如何利用图中节点与节点之间的关系对其进行向量化是非常关键的,在这种场景下基于序列的text embedding和基于卷积模型的image embedding都显得力不从心,在这样的背景下Graph Embedding逐渐在推荐系统中流行起来。经典的Graph Embedding模型有, Deep Walk, Node2Vec,LINE以及比较新的阿里巴巴2018年公布的EGES graph Embedding模型。
四、 课后思考
1.为什么使用AUC
例如0.7的AUC,其含义可以大概理解为:给定一个正样本和一个负样本,在70%的情况下,模型对正样本的打分高于对负样本的打分。可以看出这个解释下,我们关心的只有正负样本之间的分数高低,而具体的分支则无关紧要
【多高的AUC才算高】:
参考文章 https://zhuanlan.zhihu.com/p/24217322
2.如何使用Embedding做召回?
参考腾讯的推荐系统 embedding 技术实践总结
References:
[1] George Pavlidis. Recommender systems, cultural heritage applications, and the way forward. 2018, 35
[2] https://github.com/datawhalechina/team-learning-rs/blob/master/RecommendationSystemFundamentals/01%20%E6%A6%82%E8%BF%B0.md
[3] 关于推荐系统中的长尾商品:
https://www.cnblogs.com/shenxiaolin/p/10450503.html
[4] 覆盖率与基尼系数参考:https://cloud.tencent.com/developer/article/1076245