推荐系统学习笔记Part1:推荐系统概述

1. 推荐系统简介

背景:
互联网的出现和普及给用户带来了大量的信息,满足了用户在信息时代对信息的需求,但随着网络的迅速发展而带来的网上信息量的大幅增长,使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息,对信息的使用效率反而降低了,这就是所谓的 信息超载(information overload) 问题。

解决信息超载问题一个非常有潜力的办法是 推荐系统(Recommendation System),它是根据用户的信息需求、兴趣等,将用户感兴趣的信息、产品等推荐给用户的个性化信息推荐系统。和搜索引擎相比推荐系统通过研究用户的兴趣偏好,进行个性化计算,由系统发现用户的兴趣点,从而引导用户发现自己的信息需求。一个好的推荐系统不仅能为用户提供个性化的服务,还能和用户之间建立密切关系,让用户对推荐产生依赖。

推荐系统的定义:
推荐系统有3个重要的模块:用户建模模块、推荐对象建模模块、推荐算法模块。
通用的推荐系统模型流程如图。
在这里插入图片描述

推荐系统把用户模型中兴趣需求信息和推荐对象模型中的特征信息匹配,同时使用相应的推荐算法进行计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。

推荐系统现已广泛应用于很多领域,其中最典型并具有良好的发展和应用前景的领域就是电子商务领域。同时学术界对推荐系统的研究热度一直很高,逐步形成了一门独立的学科。

推荐系统是多个领域的交叉研究方向,所以会涉及机器学习以及数据挖掘方面的技巧(推荐系统→ 数据挖掘/机器学习→人工智能)。

关于主流研究方向的结构图:
图片来源:https://zhuanlan.zhihu.com/p/27502172
在这里插入图片描述


推荐系统的演化:

传统推荐系统及深度学习推荐系统的演化关系图(图来自《深度学习推荐系统》)

在这里插入图片描述
在这里插入图片描述


推荐系统的种类:

推荐系统的核心是推荐算法,其通过利用用户对项目的行为数据、用户画像以及物品属性来构建推荐模型,进而对用户的未来行为进行预测。
在这里插入图片描述


2. 本次学习的相关推荐算法:

  • 协同过滤算法: 包括基于用户的协同过滤(UserCF)和基于商品的协同过滤(ItemCF),这是入门推荐系统的人必看的内容,因为这些算法可以让初学者更加容易的理解推荐算法的思想。
  • 矩阵分解算法: 矩阵分解算法通过引入了隐向量的概念,加强了模型处理稀疏矩阵的能力,也为后续深度学习推荐系统算法中Embedding的使用打下了基础。
  • FM(Factorization Machines,分解机): 该算法属于对逻辑回归(LR)算法应用在推荐系统上的一个改进,在LR模型的基础上加上了特征交叉项,该思想不仅在传统的推荐算法中继续使用过,在深度学习推荐算法中也对其进行了改进与应用。
  • GBDT+LR: 该模型仍然是对LR模型的改进,使用树模型做特征交叉,相比于FM的二阶特征交叉,树模型可以对特征进行深度的特征交叉,充分利用了特征之间的相关性。
  • Wide&Deep: 从深度学习推荐系统的演化图中可以看出Wide&Deep模型处在最中间的位置,可以看出该模型在推荐系统发展中的重要地位,此外该算法模型的思想与实现都比较的简单,非常适合初学深度学习推荐系统的学习者们去学习。

3. 推荐算法中常用的评测指标

评测指标是用来评价一个系统性能好坏的函数,可以分为对于算法复杂度的度量以及算法准确性的度量。算法复杂度主要考虑算法实现的空间以及时间复杂度,当然算法复杂度同样重要,但这里主要讨论算法的准确性度量指标。

3.1 用户满意度

通过在线调查,或者根据用户行为(数据埋点等)进行统计分析得出。
比如电商场景中,用户如果购买了推荐的商品说明一定程度上他们是满意的,因此可以通过购买率度量用户的满意度,与购买率类似的点击率,用户停留时间和转化率等指标都可以用来度量用户的满意度。

3.2 预测准确度

预测准确度是用来度量用户的实际行为与推荐系统预测结果的准确度,该指标是最重要的离线评价指标,因为可以通过离线计算得到.下面是预测准确度最常用的两个指标 。

推荐系统根据推荐任务的不同通常分为两类:评分预测与Top-N列表推荐。

3.2.1 评分预测

预测特定用户对于没有产生过行为的物品能够打多少分。评分预测一般通过均方根误差(RMSE)和平均绝对误差(MAE)来计算。对于测试集中的用户u和项目i, r u i r_{ui} rui 是用户u对项目i的真实评分, r ^ u i \hat r_{ui} r^ui 是推荐算法预测出的评分,那么RMSE可以定义为:
R M S E = ∑ u , i ∈ T ( r u i − r ^ u i ) 2 ∣ T ∣ RMSE = \sqrt{\frac{\sum_{u,i \in T}(r_{ui} - \hat{r}_{ui})^2}{|T|}} RMSE=Tu,iT(ruir^ui)2

MAE定义为:
M A E = ∑ u , i ∈ T ∣ r u i − r ^ u i ∣ ∣ T ∣ MAE = \frac{\sum{u,i \in T}|r_{ui} - \hat{r}_{ui}|}{|T|} MAE=Tu,iTruir^ui

其中Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻,同时如果评分系统是基于整数建立的(即用户给的评分都是整数),那么对预测结果取整会降低MAE的误差。

3.2.2 TopN推荐

推荐系统在给用户推荐物品的时候,往往会给用户一个列表的推荐物品,这种场景下的推荐成为是TopN推荐,该推荐方式最常用的预测准确率指标一般是精确率(precision)和召回率(recall),令 R ( u ) R(u) R(u)为通过推荐模型得到的推荐列表, T ( u ) T(u) T(u)为用户在实际场景中(测试集)的行为列表.

精确率(precision): 分类正确的正样本个数占分类器判定为正样本的样本个数比例(这里 R ( u ) R(u) R(u)相当于是模型判定的正样本)
P r e c i s i o n = ∑ 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=uUR(u)uUR(u)T(u)

召回率(recall): 分类正确的正样本个数占真正的正样本个数的比例(这里的 T ( u ) T(u) T(u)相当于真正的正样本集合)

R e c a l l = ∑ 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=uUT(u)uUR(u)T(u)

有时候为了更加全面的评估TopN推荐,通常会选取不同的推荐列表长度计算多组精确率与召回率然后分别绘制出精确率曲线和召回率曲线,需要注意的是这里并不是PR曲线,感兴趣的可以了解一下PR曲线相关的知识.

3.3 覆盖率

覆盖率是用来描述一个推荐系统对物品长尾的发掘能力,一个简单的定义可以是:推荐系统所有推荐出来的商品集合数占总物品集合数的比例。

信息熵定义覆盖率: 其中 p ( i ) p(i) p(i)是物品 i i i的流行度除以所有物品流行度之和 H = − ∑ i = 1 n p ( i ) l o g p ( i ) H = -\sum_{i=1}^n p(i) logp(i) H=i=1np(i)logp(i) 基尼系数定义覆盖率: 其中 i j i_j ij是按照物品流行度p从小到大排序的物品列表中第 j j j个物品
G = 1 n − 1 ∑ j = 1 n ( 2 j − n − 1 ) p ( i j ) G=\frac{1}{n-1} \sum_{j=1}^{n}(2j-n-1)p(i_{j}) G=n11j=1n(2jn1)p(ij)

3.4 多样性

度量推荐列表中物品的多样性换句话说就是度量推荐列表中所有物品之间的不相似性,可以通过不同的相似性函数来度量推荐列表中商品的相似性,比如商品基于内容的相似,基于协同过滤的相似,这样就可以得到不同角度的多样性。令函数 s ( i , j ) s(i,j) s(i,j)为物品 i i i和物品 j j j的相似性,那么用户推荐列表的多样性可以定义为:
D i v e r s i t y ( R ( u ) ) = 1 − ∑ i , j ∈ R ( u ) s ( i , j ) 1 2 ∣ 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))=121R(u)(R(u)1)i,jR(u)s(i,j)
推荐系统整体的多样性可以定义为所有用户推荐列表多样性的平均值:
D i v e r s i t y = 1 U ∑ u ∈ U D i v e r s i t y ( R ( u ) ) Diversity = \frac{1}{U} \sum_{u\in U}Diversity(R(u)) Diversity=U1uUDiversity(R(u))


3.5 新颖性

满足推荐的新颖性最简单的方法就是给用户推荐他们之前没有看过的物品,但是每个用户没见过的物品数量是非常庞大的,所以一般会计算推荐物品的平均流行度,流行度越低的物品越有可能让用户觉得新颖。因此,如果推荐结果中的物品平均热门程度比较低说明推荐的结果就可能比较新颖。


3.6 AUC曲线

AUC(Area Under Curve),ROC曲线下与坐标轴围成的面积 。
需要先理解混淆矩阵,召回率,精确率,ROC曲线等概念。

混淆矩阵:
在这里插入图片描述

召回率与准确率:
R e c a l l = T P T P + F N   Recall = \frac{TP}{TP+FN}\ Recall=TP+FNTP 
P r e c i s e = T P T P + F P Precise=\frac{TP}{TP+FP} Precise=TP+FPTP

ROC(Receiver Operating Characteristic Curve)曲线:
在这里插入图片描述
ROC曲线的横坐标为假阳性率(False Positive Rate, FPR),N是真实负样本的个数, FP是N个负样本中被分类器预测为正样本的个数。

纵坐标为真阳性率(True Positive Rate, TPR),P是真实正样本的个数,TP是P个正样本中被分类器预测为正样本的个数。


ROC曲线是怎么绘制的?
ROC 曲线是按照截断点绘制的,也就是依次对样本的预测值作为截断点,这样就得到了不同的 假正例率和真正例率,你甚至可以人为设置截断点,比如 LR或 Sigmoid 一般取 0.5,你可以从 0.1 开始取到 0.9,每个点都可以得到 ROC 对应的点。
所以,形式上说,ROC 的每个点就是给定分类阈值下的真正例率(纵轴)与假正例率(横轴)。其实是一种相对顺序,体现的是排序误差。

具体可以看一下周志华《机器学习》第二章




注:还有其他的评价指标具体可以参考项亮的《推荐系统实践》


4. 召回

4.1 召回层在推荐系统架构中的位置及作用

在推荐系统架构中召回层与排序层是推荐系统的核心算法层,而将推荐过程分成召回层与排序层主要是基于工程上的考虑,其中召回阶段负责将海量的候选集快速缩小为几万到几千的规模;而排序层则负责对缩小后的候选集进行精准排序。所以在召回阶段往往会利用少量的特征和简单的模型对大规模的数据集进行快速的筛选,而在排序层一般会使用更多的特征和更加复杂的模型进行精准的排序。

召回层与排序层的特点:
召回层:待计算的候选集合大、计算速度快、模型简单、特征较少,尽量让用户感兴趣的物品在这个阶段能够被快速召回,即保证相关物品的召回率。

排序层:首要目标是得到精准的排序结果。需要处理的物品数量少,可以利用较多的特征,使用比较复杂的模型。

在设计召回层时,“计算速度”和“召回率”其实是矛盾的两个指标,为提高“计算速度”,需要使召回策略尽量简单一些;而为了提高“召回率”,要求召回策略尽量选出排序模型所需要的候选集,这也就要求召回策略不能过于简单。在权衡计算速度和召回率后,目前工业界主流的召回方法是采用多个简单策略叠加的“多路召回策略

3.2 多路召回策略
所谓的“多路召回”策略,就是指采用不同的策略、特征或简单模型,分别召回一部分候选集,然后把候选集混合在一起供后续排序模型使用,可以明显的看出,“多路召回策略”是在“计算速度”和“召回率”之间进行权衡的结果。其中,各种简单策略保证候选集的快速召回,从不同角度设计的策略保证召回率接近理想的状态,不至于损伤排序效果。

如下图是多路召回的一个示意图,在多路召回中,每个策略之间毫不相关,所以一般可以写并发多线程同时进行,这样可以更加高效
在这里插入图片描述
多路召回存在的问题:
虽然多路召回权衡了计算速度和召回率的问题,可以使得用于排序的候选商品更加的丰富,但是实际的多路召回仍然存在一些问题。如上图所示,对于每一路召回都会从商品集合中拉回K个商品,这里的K是一个超参数,对于K的选择一般需要通过离线评估加线上的A/B测试来确定合理的K值。除此之外,对于不同的任务具体策略的选择也是人工基于经验的选择,选择的策略之间的信息是割裂的,无法总和考虑不同策略对一个物品的影响。

基于上述问题,Embedding召回是一个综合性强且计算速度也能满足需求的召回方法。



4.3 Embedding召回

在当前的主流推荐系统中,Embedding的身影已经无处不在,从一定意义上可以说,把Embedding做好了,整个推荐系统的一个难题就攻克了,下面会从什么是Embedding,常见的Embedding技术有哪些,以及如何用Embedding做召回进行一个简单的总结。

Embedding是什么?
Embedding其实是一种思想,主要目的是将稀疏的向量(如one-hot编码)表示转换成稠密的向量,下图直观的显示了one-hot编码和Embedding表示的区别于联系,即Embedding相当于是对one-hot做了平滑,而onehot相当于是对Embedding做了max pooling。
在这里插入图片描述


在这里插入图片描述

知乎上有人说,Embedding就是:onehot+单层全连接神经网络


常见的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模型。


5. 参考资料

  • 王喆-《深度学习推荐系统》

  • 推荐系统召回策略之多路召回与Embedding召回:https://blog.csdn.net/luanfenlian0992/article/details/107416438

  • 推荐系统 embedding 技术实践总结:https://zhuanlan.zhihu.com/p/143763320

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页