基于用户行为分析的推荐算法一般称为协同过滤算法。所谓协同过滤,就是指众多的用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。常见实现方法的包括:
- 基于邻域的方法
- 隐语义模型
- 基于图的随机游走算法
本文主要讲解隐语义模型(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} p