【推荐算法】协同过滤推荐算法综述 & 传统推荐算法综述

一、协同过滤算法综述

“协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程。

A. memory-based CF

基于邻域的CF是经典的基于内存的CF算法。有以下两个步骤:

  1. 计算两个用户或者两个物品之间反映距离、相关性或权重的相似度或权重W_ij
  2. 通过获取用户或物品对特定的物品或用户的所有评分的加权平均值,或使用简单的加权平均值,为active user生成预测值

a. 相似度计算

  1. 余弦相似度请添加图片描述
  2. 皮尔逊相关系数
    请添加图片描述

b. 排序函数

请添加图片描述
请添加图片描述

c. memory-based CF 算法改进

  1. Default voting:当投票太少而无法生成相似性值时,推荐不可靠;且关注交集相似性忽略了反映在用户整个评分历史中的全局评分行为。此时可以给无评分值的物品给出一个默认评分,可以使用物品或用户的评分平均值;或者使用中性或略为负面的偏好
  2. Inverse User Frequency(反向用户频率):普遍喜欢的物品在获取相似性方面不如不太常见的物品有用,所以可以惩罚用户u和用户v共同兴趣列表中热门物品对它们相似度的影响。可以在原始评级P_ai中乘log(n/n_i),其中n_i是具有对物品i进行评价的用户数,n是用户总数。
  3. Case Amplification(案例放大):在协同过滤中使用权重变换,强调高权重,惩罚低权重。p取2.5
    请添加图片描述
  4. Imputation-Boosted(插补增强)CF算法:当CF的数据非常稀疏时,可以首先使用插补技术填充缺失的数据

d. UserCF和ItemCF算法对比

UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。

UserCF ItemCF
性能 适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大 适用于物品数明显小于用户数的场合,如果物品很多,计算物品相似度矩阵代价很大
领域 时效性较强,用户个性化兴趣不太明显的领域 长尾物品丰富,用户个性化需求强烈的领域
实时性 用户有新行为,不一定造成推荐结果的立即变化 用户有新行为,一定导致推荐结果的实时变化
冷启动 在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表时每隔一段时间离线计算的。 新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其它物品。但没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户

B. model-based CF

a. Bayesian Belief Net CF

请添加图片描述

b. 聚类CF

聚类算法比典型的协同过滤算法具有更好的可伸缩性(scalability),因为它们在更小的簇中进行预测,而不是在整个用户群组中进行预测。

c. MDP-based CF(Markov decision precess)

将推荐过程视为一个序列优化问题,并将马尔可夫决策过程用于推荐系统。MDP是对序列随机决策问题进行建模的算法,通常用于一个agent通过动作影响其周围环境的应用中。MDP可以定义为四元组(S, A, R, Pr)。S是一组状态,A是一组动作,R是每个状态/动作对的实值奖励函数,Pr是给定每个动作的每对状态之间的转移概率。MDP的最佳解决方案是最大化其reward stream,从初始策略开始,根据以往的策略计算奖励值,并在每一步用新的值函数更新策略,迭代将收敛到最优策略。

d. Latent Factor Model(隐语义模型)

假设要给A和B推荐图书,隐语义模型的意义是:对书和物品的兴趣进行分类,对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。
请添加图片描述
其中,P_uk度量了用户u的兴趣和第k个隐类的关系,Q_ki度量了第k个隐类和物品i之间的关系。

但是,LFM模型在实际使用中有一个困难——很难实现实时的推荐。经典的LFM模型每次训练时都需要扫描所有的用户行为记录,这样才能计算出用户隐类向量和物品隐类向量。而且LFM的训练需要在用户行为记录上反复迭代才能获得比较好的性能。因此,LFM的每次训练都很耗时,一般在实际应用中只能每天训练一次,并且计算出所有用户的推荐结果。所以LFM不能因为用户行为的变化实时的调整推荐结果来满足用户最近的行为。
因此,R_ui可以改为历史+实时的结果,即:
R_ui = X_u·Y_i + P_u·Q_i
前者可以根据历史行为记录获得,而且每天只需要计算一次;而后者是根据实时拿到的用户最近几小时的行为训练LFM获得的

如果考虑时间上下文信息,则原先的SVD分解
请添加图片描述
变为:
请添加图片描述

这里b_t建模了系统整体平均分随时间变化的效应,xT_u⋅y_t 建模了用户平均分随时间变化的效应,sT_i·z_t 建模了物品平均分随时间变化的效应。

e. 基于图的模型

如果将个性化推荐算法放到二分图模型上,那么给用户u推荐物品的任务就可以转化为度量用户顶点V_u和与V_u没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。

相关性高的一对顶点一般具有以下特征:

  • 两个顶点之间有很多路径相连
  • 连接两个顶点之间的路径长度都比较短
  • 连接两个顶点之间的路径不会经过出度比较大的顶点。

【经典的基于随机游走的PersonalRank算法】
假设要给用户u进行个性化推荐,可以从用户u对应的节点V_u开始在用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概率 α 决定是继续游走,还是停止这次游走并从V_u节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
上面的描述写成公式就是:
【推荐算法】协同过滤推荐算法综述 & 传统推荐算法综述_第1张图片
为了解决PersonalRank每次都需要在全图迭代并因此造成时间复杂度很高的问题,可以从矩阵论出发,重新设计算法。
令M为用户物品二分图的转移矩阵,即
请添加图片描述
则迭代公式可以转化为:
请添加图片描述
解方程得到:
请添加图片描述

C. content-based 推荐系统

协同过滤算法仅使用用户物品评分数据进行预测和推荐,而基于内容的推荐系统依赖于用户和物品的特征进行预测。

a. content-boosted(内容增强)算法

内容增强算法使用朴素贝叶斯作为内容分类器(喜欢/不喜欢),然后用内容预测器的预测填充评分矩阵的缺失值,行程伪评分矩阵,其中观察到的评分保持不变,缺失的评分由内容预测器的预测代替。然后使用基于加权的皮尔逊相关性的CF算法对生成的伪评分矩阵进行预测。该算法为更多用户评分的物品提供更高的权重,并为active user提供更高的权重。
与一些纯基于内容的推荐和一些纯memory-based的CF算法相比,content-boosted提高了预测性能,还克服了冷启动问题,解决了CF的稀疏性问题。

b. 利用时间上下文信息

提高推荐结果的时间多样性需要分两步解决:

  1. 需要保证推荐系统能够在用户又了新的行为后及时调整推荐结果,使推荐结果满足用户最近的兴趣;
  2. 需要保证推荐系统在用户没有新的行为时可能狗经常变化一下结果,具有一定的时间多样性。

一般的思路有以下几种:

  • 在生成推荐结果时加入一定的随机性。比如从推荐列表的前20个结果中随机挑选10个,或者按照推荐物品的权重采样10个;
  • 记录用户每天看到的推荐结果,然后在每天给用户进行推荐时,对他前几天看到过很多次的推荐结果进行适当的降权;
  • 每天使用不同的推荐算法。

可以在之前的计算中引入和时间有关的衰减项来改进对相似度的计算(用在CF中就是计算item之间的相似度或user之间的相似度),在计算i和j之间的相似度时,在分子中引入和时间有关的衰减项 f(| t_ui - t_uj |),其中t_ui时用户u对物品i产生行为的时间。f函数的含义是,用户对物品i和物品j产生行为的时间越远,则 f(| t_ui - t_uj |)越小,例如f可以定义为:
f(| t_ui - t_uj |) = 1/(1+a| t_ui - t_uj |)。
a是时间衰减参数,如果一个系统用户兴趣变化得很快,就应该采取比较大的a。

b. 利用地点上下文信息

金字塔模型:假如有一个来自中国江苏南京的用户,首先根据所有用户的行为利用某种推荐算法给他生成推荐列表,然后利用中国用户的行为给他生成第二个推荐列表,以此类推,用中国江苏的用户行为给该用户生成第三个推荐列表,并利用中国江苏南京的用户行为给该用户生成第四个推荐列表,然后按照一定的权重将这四个推荐列表线性相加,从而得到给该用户的最终推荐列表。
为了融入地点上下文信息,可以首先忽略物品的位置信息,利用itemCF算法计算用户u对物品i的兴趣P(u,i),但最终物品i在用户u的推荐列表中的权重定义为:
RecScore(u,i) = P(u,i) - TravelPenalty(u,i)
TravelPenalty(u,i)表示物品i的位置对用户u的代价。

e. 利用社交网络上下文信息

如果给定一个社交网络和一份用户行为数据集,其中社交网络定义了用户之间的好友关系,那么最简单的算法时给用户推荐好友喜欢的物品集合。即用户u对物品i的兴趣p_ui可以通过如下公式计算:
请添加图片描述
其中 out(u) 是用户u的好友集合,如果用户v喜欢物品i,则 r_vi= 1,否则r_vi =0。不过,即使都是用户u的好友,不同的好友和用户u的熟悉程度和兴趣相似度也是不同的。因此,我们应该在推荐算法中考虑好友和用户的熟悉程度以及兴趣相似度:
请添加图片描述
这里, w_uv由两部分相似度构成,一部分是用户u和用户v的熟悉程度(用户之间共同好友的比例来度量),另一部分是用户u和用户v的兴趣相似度(可以通过和userCF类似的方法度量,即如果两个用户喜欢的物品集合重合度很高,两个用户的兴趣相似度就很高),分别用如下公式表示
【推荐算法】协同过滤推荐算法综述 & 传统推荐算法综述_第2张图片

D. 稀疏性问题解决方法总结

  1. 可以采用降维技术,如奇异值分解(Singular value Decomposition, SVD),去除不具代表性或不重要的用户或物品,以直接降低用户-物品矩阵的维度。
  2. 可以采用隐语义模型(Latent Factor Model, LFM),将m*n维的用户-物品矩阵分解成m*k维的用户-隐类矩阵和k*n维的隐类-物品矩阵。
  3. 采用混合CF算法(例如内容增强算法,用内容预测器的预测填充评分矩阵的缺失值)。

二、传统推荐算法综述

A. 协同过滤算法

第一部分介绍的协同过滤算法可解释性强,但不具备强的泛化能力,协同过滤无法将两个物品相似这一信息推广到其他物品的相似性计算上,导致-热门的商品头部效应明显,容易跟大量物品产生相似性;尾部物品特征向量稀疏,很少与其他物品产生相似性,很少被推荐。简言之,推荐结果的头部效应明显,处理稀疏向量能力弱。

为解决上述问题,并提升泛化能力,矩阵分解技术被提出,该方法在协同过滤的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品之间的隐含兴趣和隐含特征,在一定程度上弥补了协同过滤处理稀疏矩阵能力不足的问题。

另外,协同过滤仅利用了用户和物品的交互信息,无法引入用户年龄、性别、商品描述、当前时间等用户特征、物品特征以及上下文特征。为了引入这些特征,逐渐发展到以逻辑回归为核心的、能够综合不同特征的机器学习模型的道路上。

B. 矩阵分解算法——协同过滤的进化

矩阵分解算法则期望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上,距离相近的用户和视频表明特点接近,在推荐过程中,应把距离相近的视频推荐给用户,在矩阵分解的框架下,用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的。
【推荐算法】协同过滤推荐算法综述 & 传统推荐算法综述_第3张图片
请添加图片描述
相比协同过滤,矩阵分解的优点如下:

  • 泛化能力强,一定程度缓解数据稀疏的问题。
  • 空间复杂度低,协同过滤需要存储用户相似度矩阵(m*m)或者物品相似度矩阵(n*n),矩阵分解只需存储用户和物品隐向量((n+m)*k)。
  • 更好的扩展性和灵活性,最终产出用户和物品隐向量,与Embedding的思想不谋而合,故其便于与其他特征进行组合和拼接,便于与深度学习网络进行无缝结合。

但是与协同过滤一样,矩阵分解无法引入用户年龄、性别、商品描述、当前时间等用户特征、物品特征以及上下文特征。为了引入这些特征,逐渐发展到以逻辑回归为核心的、能够综合不同特征的机器学习模型的道路上。

C. 逻辑回归——融合多种特征的推荐模型

相比于协同矩阵和矩阵分解利用用户和物品的“相似度”进行推荐,logistic回归将推荐问题看成一个分类问题,通过预测正样本的概率对物品进行排序。这里的正样本可以是用户“点击”了某商品,也可以是用户“观看”了某视频,均是推荐系统希望用户产生的“正反馈”行为。因此,逻辑回归模型将推荐问题转换成了一个点击率预估问题。

基于逻辑回归的推荐过程如下:

  1. 将用户年龄、性别、物品属性、当前时间、当前地点等特征转换成数值型特征向量;
  2. 确定逻辑回归模型的优化目标(以优化“点击率”为例),利用已有样本数据对逻辑回归模型进行训练,确定逻辑回归模型的内部参数。
  3. 在模型服务阶段,将特征向量输入逻辑回归模型,经过逻辑回归模型的推断,得到用户点击物品的概率
  4. 利用点击概率对所有候选物品进行排序,得到推荐列表

优点:

  • 数学含义上的支撑,其假设是因变量y服从伯努利分布,采用逻辑回归作为CTR模型符合点击这一事件的物理意义。
  • 可解释性强,各特征的加权和综合了不同特征对CTR的影响,不同特征权重不同,代表不同特征的重要程度。
  • 工程化的需要,易于并行,模型简单,训练开销小

缺点:表达能力不强,无法进行特征交叉特征筛选等一系列操作,为解决这一问题,衍出了因子分解机等高维的复杂模型。

D. 从FM到FFM-自动特征交叉的解决方案

a.POLY2模型——特征交叉的开始

POLY2模型的数学形式为:
请添加图片描述
该模型对所有特征进行了两两交叉,并对所有特征组合赋予权重,在一定程度上解决了特征组合的问题,本质上仍是线性模型,训练方法与逻辑回归无区别。

缺点

  • 互联网数据的特征原本就稀疏,无选择的特征交叉就使得特征更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。
  • 权重参数的数量由n直接上升到n^2,增加训练复杂度

b. FM(Factorization Machine)因子分解机模型——隐向量特征交叉

与POLY2相比,主要区别是用两个向量内积(w_j1·w_j2)取代了单一权重系数w_h(j1,j2),具体来说,FM为每个特征学了一个隐权重向量,FM将矩阵分解的隐向量思想进行了进一步扩展,从单纯的用户、物品隐向量扩展到所有特征上。
请添加图片描述
将POLY2模型的n^2级别的权重参数数量减少到了nk(k为隐向量维度,n远大于k)。

c. FFM(Field-aware Factorization Machine)域感知因子分解机模型——引入特征域的概念

相比FM模型,FFM模型引入了特征域感知这一概念,使模型的表达能力更强。
请添加图片描述
请添加图片描述

d. 从POLY2到FFM的模型演化过程【推荐算法】协同过滤推荐算法综述 & 传统推荐算法综述_第4张图片

E. GBDT+LR——特征工程模型化的开端

FFM模型采用引入特征域的方式增强了模型的表达能力,但无论如何,FFM只能够做二阶的特征交叉,如果要继续提高特征交叉的维度,不可避免的会发生组合爆炸和计算复杂度过高的情况。

GBDT模型训练好后,一个训练样本在输入GBDT的某一子树后,会依据每个节点的规则最终落入某一叶子节点,把该叶子节点置为1,其他置为0,所有叶子节点组成的向量即形成了该棵树的特征向量,把所有子树的特征向量连接起来,即形成了后续LR输入的特征向量。

【推荐算法】协同过滤推荐算法综述 & 传统推荐算法综述_第5张图片
如上图所示,GBDT由三颗子树构成,每个子树有4个叶子节点,一个训练样本进来后,先后落入“子树1”的第3个叶节点中,那么特征向量就是[0,0,1,0],“子树2”的第1个叶节点,特征向量为[1,0,0,0],“子树3”的第4个叶节点,特征向量为[0,0,0,1],最后连接所有特征向量,形成最终的特征向量[0,0,1,0,1,0,0,0,0,0,0,1]。

决策树的深度就决定了特征交叉的维度。如果决策树的深度为4,通过三次节点分裂,最终的叶节点实际上是进行了3阶特征组合后的结果,如此强的特征组合能力显然是FM系的模型不具备的。但由于GBDT容易产生过拟合,以及GBDT这种特征转换方式实际上丢失了大量特征的数值信息,因此我们不能简单说GBDT由于特征交叉的能力更强,效果就比FFM好,在模型的选择和调试上,永远都是多种因素综合作用的结果。

F. LS-PLM —— 阿里巴巴曾经的主流推荐模型

MLR可以看做是对LR的自然推广,它在LR的基础上采用分而治之的思路,先对样本进行分片,再在样本分片中应用LR进行CTR预估。在LR的基础上加入聚类的思想,其动机其实来源于对计算广告领域样本特点的观察 。举个例子,如果CTR模型要预估的是女性受众点击女装广告的CTR,显然我们并不希望把男性用户点击数码类产品的样本数据也考虑进来,因为这样的样本不仅对于女性购买女装这样的广告场景毫无相关性,甚至会在模型训练过程中扰乱相关特征的权重。为了让CTR模型对不同用户群体,不同用户场景更有针对性,其实理想的方法是先对全量样本进行聚类,再对每个分类施以LR模型进行CTR预估。MLR的实现思路就是由该动机产生的。

首先用聚类函数对样本进行分类,这里的聚类函数采用softmax函数对样本进行多分类,再用LR模型计算样本在分片中具体的CTR,然后将二者相乘后求和。
请添加图片描述
其中超参数分片数m可以较好地平衡模型的拟合与推广能力。当m=1时MLR就退化为普通的LR,m越大模型的拟合能力越强,但是模型参数规模随m线性增长,相应所需的训练样本也随之增长。

LS-PLM模型的优点:

  • 端到端的非线性学习:从模型端自动挖掘数据中蕴藏的非线性模式,省去了人工特征设计,这使得MLR算法可以端到端地完成训练,在不同场景中的迁移和应用非常轻松。
  • 稀疏性:MLR在建模时引入了L1和L2,1范数,可以使得最终训练出来的模型具有较高的稀疏度,模型的学习和在线预测性能更好。

LS-PLM可以看作加入了注意力机制的三层神经网络模型:

  • 输入层:样本的特征向量
  • 中间层:m个神经元组成的隐层
  • 输出层:对CTR预估来说,输出层是单一神经元。
  • 注意力机制:在隐层和输出层之间,神经元之间的权重由分片函数得出的注意力得分来确定,即样本属于哪个分片的概率就是其注意力得分。

传统推荐模型的特点总结

模型名称 基本原理 特点 局限性
协同过滤(Collaborative Filtering, CF) 根据用户的行为历史生成用户-物品共现矩阵,利用用户相似性和物品相似性进行推荐 原理简单、直接,应用广泛 泛化能力差,处理稀疏矩阵的能力差,推荐结果的头部效应较明显
矩阵分解(Matrix Factorization, MF) 将协同过滤算法中的共现矩阵分解为用户矩阵和物品矩阵,利用用户隐向量和物品隐向量的内积进行排序并推荐 相较协同过滤,泛化能力有所加强,对稀疏矩阵的处理能力有所加强 除了用户历史行为数据,难以利用其它用户、物品特征及上下文特征
逻辑回归(Logistic Regression, LR) 将推荐问题转换成类似CTR预估的二分类问题,将用户、物品、上下文等不同特征转换成特征向量,输入逻辑回归模型得到CTR,再按照预估CTR进行排序并推荐 能够融合多种类型的不同特征 不行不具备特征组合的能力,表达能力较差
因子分解机(Factorization Mechine, FM) 在逻辑回归的基础上,在模型中加入二阶特征交叉部分,为每一维特征训练得到相应的特征隐向量,通过隐向量间的内积运算得到交叉特征权重 相比逻辑回归,具备了二阶特征交叉能力,模型的表达能力增强 由于组合爆炸问题的限制,模型不易扩展到三阶特征交叉阶段
域感知因子分解机(Field-aware Factorization Mechine, FFM) 在FM模型的基础上,加入“特征域”的概念,使每个特征在与不同域的特征交叉时采用不同的隐向量 相比FM,进一步加强了特征交叉的能力 模型的训练开销达到了O(n^2)的量级,训练开销较大
GBDT + LR(梯度提升树 Gradient Boosting Decision Tree) 利用GBDT进行“自动化”的特征组合,将原始特征向量转换成离散型特征向量,并输入逻辑回归模型,进行最终的CTR预估 特征工程模型化,使模型具备了更高阶特征组合的能力 GBDT无法进行完全并行的训练,更新所需的训练时长较长
LS-PLM(大规模分片线性模型,Large Scale Piece-wise Linear Model) 首先对样本进行“分片”,在每个“分片”内部构建逻辑回归模型,将每个样本的各“分片”概率与逻辑回归的得分进行加权平均,得到最终的预估值 模型结构类似三层的神经网络,具备了较强的表达能力 模型结构相比深度学习模型仍比较简单,有进一步提高的空间

参考文献:

  1. Review Article:A Survey of Collaborative Filtering Techniques
  2. 深度学习推荐系统 王喆编著 中国工信出版集团
  3. 推荐系统实战 项亮编著 人民邮电出版社
  4. 推荐系统中的隐语义模型
  5. 前深度学习时代-推荐系统的进化之路附部分代码(深度学习推荐系统学习笔记)

你可能感兴趣的:(推荐算法,推荐算法,机器学习)