推荐系统(二)协同过滤

协同过滤大纲

  • 基于记忆的方法
    • 基于用户的协同过滤(User-based CF)
    • 基于项目的协同过滤(Item-based CF)
    • 相似度的衡量方法(Similarity measures)
    • 偏好反馈(Preference Feedback)
  • 其他一些基于模型的方法
    • 矩阵分解(Matrix Factorization)
    • 分解机(Factorization machine)
    • 其他基于模型的方法
  • 协同过滤评估

协同过滤(Collaborative Filtering/CF)

最突出的推荐系统解决方法

  • 可应用于众多领域,适用范围广
  • 容易理解并且有大量算法存在
  • 被大型电子商务网站应用

基本假设和理念

  • 用户对目录项进行评分(隐式地或者显式地)。
  • 如果一些用户在过去有相似的偏好,那他们在将来也会有相似的偏好。
  • 用户的偏好相对于时间有稳定性和可持续性。

输入和输出

  • 输入:给定的“用户-项目评分”矩阵
  • 输出类型:
    • 预测当前用户喜欢或不喜欢某个特定项目的程度,也就是用户的评分预测。
    • 给出受推荐项目的Top-N列表,也就是项目排名。

基于用户的协同过滤(User-based CF)

案例分析

  1. 给出如下的用户评分表,预测Alice对Item5的评分。
    推荐系统(二)协同过滤

  2. 基本假设:如果一些用户在过去有相似的偏好,那他们在将来也会有相似的偏好。

  3. 思路:找一群曾经有着和A相同偏好并且评估过项目i的用户,根据他们评分的平均情况预测A是否会喜欢项目i。

  4. 需要思考的关键性问题:

    1. 怎样衡量用户之间的相似度?
    2. 我们需要考虑多少个相似用户?
    3. 我们怎样根据用户评分生成一个预测?

用户相似度衡量

一种比较流行的衡量方法是皮尔逊相关系数(Pearson Correlation Coefficient/PCC)。
其中,aabb是待比较的两个用户,ra,pr_{a,p}是用户aa对项目pp的评分,集合PP是用户aa和用户bb共同评分过的产品集,raˉ\bar{r_a}是用户aaPP中所有项目的平均评分。用户相似度的取值范围是[-1,1]。
推荐系统(二)协同过滤

选择合适的相似用户

方法1:设置相似度阈值。只有高于阈值的相似用户才会被选择。

方法2:Top-N相似用户。

  1. 获取所有与用户u相似度不等于0的用户集合。
  2. 获取所有对预测项目给出过评分的用户集合。
  3. 在以上两个集合中获取j个与用户u相似度最高的用户的集合,用NujN_u^j表示。

进行预测

一种常用的预测函数如下图。其中,pred(u,j)pred(u,j)表示预测的用户uu对项目jj的评分,ruˉ\bar{r_u}是用户uu的平均评分。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlzhFItF-1577431999513)(https://s2.ax1x.com/2019/12/25/lFXJl4.png)]

实现细节

  1. 如果找不到K个相似用户,就用尽可能多的用户。
  2. 一般把阈值设置为0。
  3. 如果预测值范围是[1,5]。则当pred(u,j)>5pred(u,j)>5时,用5替代;当pred(u,j)<1pred(u,j)<1时,用1替代。

结果评估

评估公式如下图所示,其中,r^ui\hat{r}_{ui}是估计量,ruir_{ui}是实际值,RteR^{te}可以理解成项目个数。
推荐系统(二)协同过滤
MAE和RMAE的值越小,表明性能越好。RMAE对分母开根,可以放大误差。

改进和提升

  1. 不是所有的相似用户的评分都具有相同的价值。
    • 大家一致喜爱的项目评分的价值小于有争议的项目的评分价值。
    • 解决方法:对评分方差比较大的项目设置更高的权重(基于奇点的相似度)。
  2. 案例放大。
    • 对于相似度特别高的用户(例如非常接近于1),可以赋予更高的权重。
  3. 收缩因子。
    • 平滑相似度衡量的值。如下图公式。MAE表示平均绝对误差,RMSE表示平均平方根误差。
      推荐系统(二)协同过滤

基于项目的协同过滤(Item-based CF)

案例分析

  1. 给出如下的用户评分表,预测Alice对Item5的评分。
    推荐系统(二)协同过滤

  2. 基本假设:用户在此前喜爱某种项目,之后也会喜爱与之相似的项目。(也即用户的偏好具有稳定性)

  3. 思路:找到和Item5相似的项目,根据用户Alic对它们的评分,预测对Item5的评分。

  4. 关键问题:

    • 如何衡量两个项目之间的相似度?
    • 如何根据项目相似度进行预测?

Cosine相似度

cosine相似度是基于两个评分向量的夹角进行计算的。两向量夹角公式如下:
cos(a,b)=ababcos(\vec{a},\vec{b})=\frac{\vec{a}·\vec{b}}{|\vec{a}|*|\vec{b}|}
我们将夹角公式改进为对项目相似程度进行量化的cosine相似度,并且把平均用户评分的影响因素考虑在内,用UU表示既评价过项目a又评价过项目b的用户的集合。
推荐系统(二)协同过滤
由于cosαcos\alpha的值域在[-1,1]之间,所有cosine相似度的取值范围也是[-1,1]。

进行预测

  1. 一种常见的预测函数如下图。pred(u,p)pred(u,p)表示用户uu对项目pp的相似度预测值,IuI_u是用户uu已经评价过的项目的集合。
    推荐系统(二)协同过滤

  2. 需要注意的是,IuI_u集合并不是越大越好,我们不需要把所有的相似项目都进行考虑,研究表明20~50个相似项目是合理的。(Herlocker et al.2002)

  3. 基于项目的CF本身并不能解决可扩展性的问题。例如,两向量的夹角是固定的,与向量长度的延展无关。

  4. 可以进行预处理,提前计算所有的成对项目的相似度(Amazon.com in 2003)。理由是:

    • 项目相似度应当比用户相似度更具有稳定性。
    • 起步阶段的相似项目相当少,因为只有用户曾经全都评价过的项目才被考虑。

复杂度分析

理论上,需要存储N2N^2个成对项目,但实际上由于很多项目之间并无关联,所以不需要这么大的空间复杂度。另外,还有一些方式可以降低复杂度:

  • 设置最小相似度阈值
  • 降低相似项目的规模(可能会降低推荐的准确率)

总结

可解释性

基于用户的:读过这本书的人还读过······

基于项目的:你读过这10本书,你可能还喜欢读······

复杂性

基于用户的:用户数量远小于项目数量。

基于项目的:项目数量远小于用户数量。

性能

大体上,基于项目的CF优于基于用户的CF。因为项目是单纯的,而人是复杂的。

混合协同过滤(Hybird CF)

混合协同过滤是对User-based CF和Item-based CF 的线性结合。pu,jp_{u,j}表示用户uu对项目jj的评分预测,λ\lambda是[0,1]之间的权衡参数。
推荐系统(二)协同过滤

偏好反馈

推荐系统挖掘用户的行为和表达,从显式反馈和隐式反馈两方面获取用户偏好。

显式反馈

  • 如评分、评价、投票等行为。
  • 对于显示反馈的研究,更多关注评价的粒度、评价的多重标准。
  • 面临的挑战:用户不一定愿意评分、数据稀疏(data sparsity)、怎样激励用户给出更多的评分。

隐式反馈

  • 最典型的方法是收集web应用的日志,如点击、购买、浏览、关注等行为。当一位用户买了一个物品,一般认为这是一个正反馈。
  • 隐式反馈的优点在于可以持续进行并且不需要用户消耗额外的精力。
  • 面临的挑战:无法确定用户行为是否被正确解读。
  • 隐式反馈可以用于补充显示反馈。

稀疏反馈

主要是冷启动问题。

  • 冷启动项目:如何推荐新的项目?
  • 冷启动用户:给新用户推荐什么?
  • 冷启动系统:如何引导一个新系统?

可能的解决方案:

  • 强制性地要求用户评分。
  • 给项目赋予默认评分,但不一定准确。
  • 用一些附加信息去了解新用户,比如社会关系、领域知识等。

其他的基于模型的协同过滤

关联规则挖掘(association rule mining)

通常用于购物行为的分析,旨在探测一些规则,例如“啤酒和尿不湿之间的关联”。
关联规则挖掘算法就是要探测销售事物集合上从形式X到Y的映射关系,并且对关系的质量进行衡量。

概率方法(probabilistic methods)

  1. 基本思想:给出用户/项目评分矩阵,计算用户喜爱某个项目的可能性,根据可能性给出评分预测。(用于说明的简单版本)
  2. Bayes理论:假设每个评分之间是相互独立的,根据贝叶斯公式得到
    P(YX)=i=1dP(XiY)P(Y)P(X)P(Y|X)=\frac{\prod_{i=1}^d{P(X_i|Y)}*P(Y)}{P(X)}
  3. 简单版本的计算例题如下图
    推荐系统(二)协同过滤

基于集群的方法(Cluster-based approach)

假设用户陷入一个小型的集群中,此时用户喜欢某个项目的可能性需要考虑如下方面:

  • 用户陷入某个集群的可能性。
  • 用户此前的评分情况以及该集群的对该项目评分。

SlopeOne算法(Lemire and Maclachlan 2005)

Slope One是基于不同物品之间的评分差的线性算法,优点在于简单高效。如下图所示:
推荐系统(二)协同过滤

RF-Rec算法(Gedikli et al. 2011)

RF-Rec在计算预测时考虑评分频率。如果用户经常给出某个分数,则新的评分也很可能是这个值。如下图所示:
推荐系统(二)协同过滤

CF评价

优点

  • 易于理解
  • 在某些领域内,工作效果比较好
  • 无需知识/功能工程

缺点

  • 需要用户社区
  • 稀疏问题
  • 没有和其他知识域相结合
  • 结果缺乏可解释性
  • 更趋向于推荐一些流行产品

CF的安全性

  1. 保护推荐系统的中立性
    • 来自想要推销产品并可以创建假帐户的恶意用户
    • 可能的解决方案:阻止创建帐户或检测和删除帐户
  2. 保护推荐系统的准确性
    • 来自给出低质量,不一致评分的用户
    • 可能的解决方案:类似于一般的降噪问题
  3. 保护用户数据(隐私)
    • 来自其他用户和服务提供商
    • 可能的解决方案:使用可信的计算基础架构,增加噪音,pool rating。