基于用户行为分析的推荐算法一般称为协同过滤算法。所谓协同过滤,就是指众多的用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。常见实现方法的包括:
- 基于邻域的方法
- 隐语义模型
- 基于图的随机游走算法
本文主要讲解隐语义模型(LFM),它的核心思想是通过发掘隐含特征(latent factor) 来完成推荐任务。
一、引例
在讲解LFM之前,先看个例子:
喜欢看视频的用户都有自己的喜好标签,这些标签的粒度可大可小,例如战争和李云龙就是粒度不同的标签。现在假设一个理想的情况:
- 已知用户对不同标签的兴趣程度
- 每个视频都具有不同的标签,且每个标签占比已知
那么就可以得到:
1,用户潜在因子矩阵,例如:
| 军事 | 娱乐 | 时政 | 历史 | 李云龙 | |
|---|---|---|---|---|---|
| 用户A | 0.7 | 0.3 | 0.4 | 0.8 | 0.8 |
| 用户B | 0.8 | 0.4 | 0.6 | 0.7 | 0.1 |
| 用户C | 0.5 | 0.6 | 0.7 | 0.3 | 0.3 |
矩阵中的数值表示不同用户对于不同标签的偏好程度,1.代表绝对喜欢,0.代表不喜欢。
2,视频潜在矩阵
| 军事 | 娱乐 | 时政 | 历史 | 李云龙 | |
|---|---|---|---|---|---|
| 视频A | 0.8 | 0 | 0.4 | 0.8 | 1 |
| 视频B | 0 | 0.8 | 0 | 0.7 | 0 |
| 视频C | 0.5 | 0 | 0.7 | 0.6 | 0 |
矩阵中的数值表示每种视频包含各种标签的成分。
利用上面的两个矩阵,就可以推算用户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 | |
|---|---|---|---|
| 用户A | 2.16 | 0.8 | 1.11 |
| 用户B | 1.13 | 0.81 | 1.24 |
| 用户C | 1.16 | 0.69 | 1.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=1∑Fpu,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,i∈K∑(rui−r^ui)2=u,i∈K∑(rui−puTqi)2+λ∥pu∥2+λ∥qi∥2
其中,λ 是为了减少过拟合而加入的正则化参数。
参数学习
对于此损失函数的优化,本文使用随机梯度下降算法。于是对于要学习的参数 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}
∂puk∂C=−2quk+2λpuk∂qik∂C=−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=1∑Fpu,kqi,k
来计算用户 u 对物品 i 的感兴趣程度了。
调参相关
在LFM中,重要的参数有4个:
- 隐特征的个数 F ;
- 学习速率 alpha ;
- 正则化参数 lambda ;
- 负样本/正样本比例 ratio 。
通过实验发现, ratio 参数对LFM的性能影响最大。因此,固定 F =100、 alpha =0.02、lambda =0.01,然后研究负样本/正样本比例 ratio 对推荐结果性能的影响。
三、小结
优点
它基于用户行为统计做分类,和专家标记相比:
- 能通过参数 F 控制分类的粒度
- 能给一个物品多个分类
- 可以确定物品在某个分类中的权重
这些都是专家标记不能或者很难做到的。
缺点
-
很难实现实时的推荐。
-
推荐模型的更新,需要在用户行为记录上反复迭代,每次训练都很耗时。
-
冷启动问题明显。
参考文章:
-
《推荐系统实战》项亮
本文深入探讨隐语义模型(LFM)在推荐系统中的应用,阐述其主要思想、训练样本构造、损失函数定义及参数学习过程,并分析LFM的优缺点。LFM通过发掘隐含特征完成推荐任务,解决基于邻域方法的难题,但存在实时性、训练耗时和冷启动问题。
587

被折叠的 条评论
为什么被折叠?



