【推荐系统(二)】协同过滤之隐语义模型(LFM)

本文深入探讨隐语义模型(LFM)在推荐系统中的应用,阐述其主要思想、训练样本构造、损失函数定义及参数学习过程,并分析LFM的优缺点。LFM通过发掘隐含特征完成推荐任务,解决基于邻域方法的难题,但存在实时性、训练耗时和冷启动问题。


基于用户行为分析的推荐算法一般称为协同过滤算法。所谓协同过滤,就是指众多的用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。常见实现方法的包括:

  1. 基于邻域的方法
  2. 隐语义模型
  3. 基于图的随机游走算法

本文主要讲解隐语义模型(LFM),它的核心思想是通过发掘隐含特征(latent factor) 来完成推荐任务。

一、引例

在讲解LFM之前,先看个例子:

喜欢看视频的用户都有自己的喜好标签,这些标签的粒度可大可小,例如战争和李云龙就是粒度不同的标签。现在假设一个理想的情况:

  1. 已知用户对不同标签的兴趣程度
  2. 每个视频都具有不同的标签,且每个标签占比已知

那么就可以得到:

1,用户潜在因子矩阵,例如:

军事娱乐时政历史李云龙
用户A0.70.30.40.80.8
用户B0.80.40.60.70.1
用户C0.50.60.70.30.3

矩阵中的数值表示不同用户对于不同标签的偏好程度,1.代表绝对喜欢,0.代表不喜欢。

2,视频潜在矩阵

军事娱乐时政历史李云龙
视频A0.800.40.81
视频B00.800.70
视频C0.500.70.60

矩阵中的数值表示每种视频包含各种标签的成分。

利用上面的两个矩阵,就可以推算用户A对视频A的喜欢程度,即:

用户A对军事的偏好 * 视频1含有军事成分 + ……(依次类推相乘相加),得到:0.7 * 0.8+0.3 * 0+0.4 * 0.4+0.8 * 0.8+0.8 * 1=2.16

同理,可以得到所有用户对所有视频的喜爱程度:

视频A视频B视频C
用户A2.160.81.11
用户B1.130.811.24
用户C1.160.691.02

因此,我们推荐用户A的视频是A,对用户B推荐的视频是C,对用户C推荐的视频是A。

这个推荐过程其实很好理解,但是有下面的问题:

1,需要计算用户对不同标签的喜爱程度。

2,需要给每个视频打不同粒度的标签。

3,需要计算不同标签在视频中的占比。

后面的2个问题难免需要一些人工标记,费时费力,且受主观因素影响大。为此, LFM 提出了一个相对简单的解决方案。

二、LFM

主要思想

LFM的思想与上面的例类似,通过下面的公式计算用户 u 对物品 i 的感兴趣程度:
P r e f e r e n c e ( u , i ) = r u i = p u T q i = ∑ k = 1 F p u , k q i , k Preference(u, i) = r_{ui} = p_u^T q_i = \sum_{k=1}^F p_{u,k}q_{i,k} Preference(u,i)=rui=puTqi=k=1Fpu,kqi,k
式子中,参数 p u , k p_{u,k} pu,k 表示用户 u 的兴趣和第 k 个隐类的关系(即0~1内的数值), q i , k q_{i, k} qi,k 表示物品 i 和第 k 个隐类的关系(即0~1内的数值),而参数 F 则是隐类的个数。这两个参数需要通过有监督的机器学习方法得到。

训练样本构造

既然是有监督的机器学习,那就需要构造数据集。对于用户喜欢的物品当作是正样本,而负样本的生成应该遵循下面的规则:

  • 对每个用户,要保证正负样本的平衡(数目相似)。
  • 对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。

一般认为,很热门而用户却没有行为更加代表用户对这个物品不感兴趣。因为对于冷门的物品,用户可能是压根没在网站中发现这个物品,所以谈不上是否感兴趣。

于是经过采样,就可以得到一个用户-物品集 K = {(u, i)} ,其中(u, i)是样本,如果是正样本则对应的 label 用 r u i = 1 r_{ui} = 1 rui=1 表示,否则 r u i = 0 r_{ui} = 0 rui=0

损失函数定义

接下来就要定义损失函数了:
C = ∑ u , i ∈ K ( r u i − r ^ u i ) 2 = ∑ u , i ∈ K ( r u i − p u T q i ) 2 + λ ∥ p u ∥ 2 + λ ∥ q i ∥ 2 C = \sum_{u,i\in K} (r_{ui}-\hat{r}_{ui})^2 = \sum_{u,i\in K} (r_{ui}-p_u^T q_i)^2 + \lambda\|p_u\|^2 + \lambda\|q_i\|^2 C=u,iK(ruir^ui)2=u,iK(ruipuTqi)2+λpu2+λqi2
其中,λ 是为了减少过拟合而加入的正则化参数。

参数学习

对于此损失函数的优化,本文使用随机梯度下降算法。于是对于要学习的参数 p,q 而言对他们分别求偏导得到:
∂ C ∂ p u k = − 2 q u k + 2 λ p u k ∂ C ∂ q i k = − 2 p u k + 2 λ q i k \frac{\partial C}{\partial p_{uk}} = -2q_{uk} + 2\lambda p_{uk} \\ \frac{\partial C}{\partial q_{ik}} = -2p_{uk} + 2\lambda q_{ik} pukC=2quk+2λpukqikC=2puk+2λqik
于是,参数的更新公式为:
p u k = p u k + α ( q i k − λ p u k ) p i k = q i k + α ( p u k − λ q i k ) p_{uk} = p_{uk} + \alpha(q_{ik} - \lambda p_{uk}) \\ p_{ik} = q_{ik} + \alpha(p_{uk} - \lambda q_{ik}) puk=puk+α(qikλpuk)pik=qik+α(pukλqik)
其中,α 是学习率,需要手动设置。输入样本进行参数迭代,当收敛的时候,就得到了最终的 p 和 q。然后就可以用最开始提到的公式:
P r e f e r e n c e ( u , i ) = r u i = p u T q i = ∑ k = 1 F p u , k q i , k Preference(u, i) = r_{ui} = p_u^T q_i = \sum_{k=1}^F p_{u,k}q_{i,k} Preference(u,i)=rui=puTqi=k=1Fpu,kqi,k
来计算用户 u 对物品 i 的感兴趣程度了。

调参相关

在LFM中,重要的参数有4个:

  • 隐特征的个数 F ;
  • 学习速率 alpha ;
  • 正则化参数 lambda ;
  • 负样本/正样本比例 ratio 。

通过实验发现, ratio 参数对LFM的性能影响最大。因此,固定 F =100、 alpha =0.02、lambda =0.01,然后研究负样本/正样本比例 ratio 对推荐结果性能的影响。

三、小结

优点

它基于用户行为统计做分类,和专家标记相比:

  • 能通过参数 F 控制分类的粒度
  • 能给一个物品多个分类
  • 可以确定物品在某个分类中的权重

这些都是专家标记不能或者很难做到的。

缺点

  • 很难实现实时的推荐。

  • 推荐模型的更新,需要在用户行为记录上反复迭代,每次训练都很耗时。

  • 冷启动问题明显。

参考文章:

  1. 《推荐系统实战》项亮

  2. 《推荐系统实践》笔记

  3. 机器学习之隐语义模型LFM介绍与代码实现(篇六)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值