基于领域的协同过滤
- UserCF:需要找到和他行为相似的用户,给他推荐那些用户喜欢的东西
- ItemCF:需要给他推荐和他已经使用过的物品相似的物品
- 隐语义模型:还有一种方法,对物品进行分类,给他推荐他喜欢的分类里的其他物品
UserCF
- 步骤:
- 找到和目标用户兴趣相似的用户集合
- 找到这个集合中用户喜欢的,且目标用户未使用的物品集合
步骤1的关键就是计算用户之间相似性,给定用户uuu,vvv,令N(u)N(u)N(u)表示用户曾经有正反馈的物品,可用Jaccard公式计算:
wuv=∣N(u)⋂N(v)∣∣N(u)⋃N(v)∣
w_{uv}=\frac{|N(u)\bigcap N(v)|}{|N(u)\bigcup N(v)|}
wuv=∣N(u)⋃N(v)∣∣N(u)⋂N(v)∣
可以用余弦相似度计算:
wuv=∣N(u)⋂N(v)∣∣N(u)∣⋅∣N(v)∣
w_{uv}=\frac{|N(u)\bigcap N(v)|}{\sqrt{|N(u) |\cdot|N(v)|}}
wuv=∣N(u)∣⋅∣N(v)∣∣N(u)⋂N(v)∣
则用户uuu对物品iii的感兴趣程度:
p(u,i)=∑v∈S(u,k)⋂N(i)wuvrvi
p(u,i)=\sum_{v \in S(u,k)\bigcap N(i)}w_{uv}r_{vi}
p(u,i)=v∈S(u,k)⋂N(i)∑wuvrvi
S(u,k)S(u,k)S(u,k)包含用户uuu兴趣最接近的k个用户,N(i)是对物品i有过行为的用户集合,rir_iri代表用户uuu对物品iii的感兴趣程度。
- 用户相似度计算的改进
wuv=∑i∈N(u)⋂N(v)1log(1+∣N(i)∣)∣N(u)∣⋅∣N(v)∣ w_{uv}=\frac{\sum_{i \in N(u)\bigcap N(v)}\frac{1}{log(1+|N(i)|)}}{\sqrt{|N(u) |\cdot|N(v)|}} wuv=∣N(u)∣⋅∣N(v)∣∑i∈N(u)⋂N(v)log(1+∣N(i)∣)1
该公式通过1log(1+∣N(i)∣)\frac{1}{log(1+|N(i)|)}log(1+∣N(i)∣)1惩罚了用户u和用户v感兴趣列表中热门物品对他们相似度的影响。
ItemCF
- 步骤:
- 计算物品之间的相似度
- 根据物品相似度和用户的历史行为给用户生成推荐列表
物品iii与物品jjj的相似度:
wij=∣N(i)⋂N(j)∣N(i) w_{ij}=\frac{|N(i) \bigcap N(j)|}{N(i)} wij=N(i)∣N(i)⋂N(j)∣
为了避免推荐热门商品,改进为:
wij=∣N(i)⋂N(j)∣∣N(i)∣⋅∣N(j)∣ w_{ij}=\frac{|N(i) \bigcap N(j)|}{\sqrt{|N(i)|\cdot |N(j)|}} wij=∣N(i)∣⋅∣N(j)∣∣N(i)⋂N(j)∣
UserCF和ItemCF的区别
- UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,ItemCF着重于维护用户的历史兴趣。即 UserCF的推荐更社会化,ItemCF的推荐更个性化。
- UserCF更适合新闻系统:因为新物品出现快,新闻的粒度粗,一般都不会很个性化
- 而ItemCF在图书,电子商务系统,电影网站更有优势,因为在这些网站中,用户的兴趣是比较持久和固定的
隐语言模型(LFM)
模型
隐语义模型采用基于用户行为统计的自动聚类,LFM通过以下公式计算用户uuu对物品iii的兴趣:
Preference(u,i)=rui=puTqi=∑f=1Fpu,kqi,k
Preference(u,i)=r_{ui}=p_u^Tq_i=\sum_{f=1}^{F}p_{u,k}q_{i,k}
Preference(u,i)=rui=puTqi=f=1∑Fpu,kqi,k
公式中pu,kp_{u,k}pu,k和qi,kq_{i,k}qi,k是参数,pu,kp_{u,k}pu,k表示用户和第k个隐类的关系,qi,kq_{i,k}qi,k表示第k个隐类和物品i的关系。
采样
- 推荐系统的数据集分为两种,显示反馈数据集和隐式反馈数据集,
隐式数据集的特点是只有正样本,没有负样本。 - 隐式数据集上需要解决的问题就是如何给每个用户生成负样本。
负样本采样应该遵循以下原则:
- 对每个用户,要保证正负样本的平衡
- 对每个用户负采样时,要选取那些很热门,而用户却没有行为的物品。
经过采样,可得到一个用户和物品集合,K={(u,i)}K=\{(u,i)\}K={(u,i)},其中如果(u,i)(u,i)(u,i)是正样本,则rui=1r_{ui}=1rui=1,否则rui=0r_{ui}=0rui=0
求参数
通过最小化损失函数来找到合适的参数ppp和qqq:
C=∑(u,i)∈K(rui−r^ui)2=∑(u,i)∈K(rui−∑k=1Kpu,kqi,k)2+λ∥p∥2+λ∥q∥2
C=\sum_{(u,i)\in K}(r_{ui}-\hat{r}_{ui})^2\\
=\sum_{(u,i)\in K}(r_{ui}-\sum_{k=1}^{K}p_{u,k}q_{i,k})^2+\lambda\Vert p\|
^2+\lambda\Vert q\|^2
C=(u,i)∈K∑(rui−r^ui)2=(u,i)∈K∑(rui−k=1∑Kpu,kqi,k)2+λ∥p∥2+λ∥q∥2
可以通过梯度下降求解。
缺点
- LFM在实际应用中有一个困难,它很难实现实时推荐,经典的LFM模型每次训练时都需要扫描所有的用户行为记录,而且LFM的训练需要在数据集K上反复迭代,很耗时。
- 冷启动问题明显
解决方案(雅虎):
将ruir_{ui}rui的计算分为两个部分:
rui=xuTyi+puTqi r_{ui}=x_u^Ty_i+p_u^Tq_i rui=xuTyi+puTqi
其中,yi是根据物品的内容属性直接生成的,xukx_{uk}xuk是用户u对内容特征kkk的兴趣程度,用户xux_uxu可根据用户历史行为获得。
因此, 对于一个新加入的物品i,可先根据 xuTyix_u^Ty_ixuTyi 估计用户uuu对物品iii的兴趣,然后几个小时后,再根据puTqip_u^Tq_ipuTqi获得准确的预测值。