论文 EigenRank: A Ranking-Oriented Approach to Collaborative Filtering (SIGIR 2008)
首先上总结:
这篇文章提出了一个衡量 两个用户偏好相似度(item顺序) 的指标,然后提出了两种基于近邻的排序方法。
- 贪心算法(greedy)
- 使用一个用户的偏好定义的随机游走模型( random walk model )
我理解的协同过滤也就是分为两步,首先是 聚类, 然后是根据聚类结果(打分)做排序。
Abstract
传统协同过滤算法预测潜在的分值(rating)。
这篇文章提出了一种协同过滤方法结局用户偏好引发的物品排序问题:
1) 通过用户间的物品排序(item ranking)来衡量相似性,而不是用rating value;
2)提出一种新的协同过滤算法(CF)来基于相似用户的偏好排序。
评价标准: NDCG (Normalized Discounted cumulative gain)
1 Introduction
现有的推荐技术可以分为两类(2008年,不知道现在咋样):
- 基于内容的过滤(content-based filtering)
- 协同过滤(CF, Collaborative Filtering)
基于内容的过滤需要收集物品和用户描述,比如物品简介,用户简介,然后用一些特征表示物品和用户,然后用二者的表示做匹配做匹配。
协同过滤通过收集大量用户对物品的打分(rating), 来对其他用户做推荐。不收集物品描述。
直观的想法就是一个用户通常会对那些有相同兴趣的用户感兴趣的商品感兴趣。
(举例: 比如我和一个同学都对精灵宝可梦感兴趣,同时他还对名侦探柯南感兴趣,那么推荐系统就会给我推荐名侦探柯南)
CF有以下两个优点:
- 避免了收集繁杂的物品和用户信息
- CF不需要领域知识,易于应用到不同的推荐系统。
CF又可以分成两类:
- 每次给用户推荐一个单独的物品
- 每次给用户推荐N个物品,这时会通过这N个物品中每个物品的位置(顺序)来评价系统表现。
这篇论文是针对推荐多个物品(item)的问题。
对这种推荐多个物品的系统,大部分CF算法都会采用 评分导向(rating-oriented) 的方法,首先预测每个物品的rating,然后根据rating排序。
这样做的问题是,高accuracy的模型不一定会有更好的排序效果。
举例: 真实label {3, 4} ,模型1预测结果是{2,5} , 模型2预测结果是{4, 3}, 模型1的绝对离差(absolute deviation)是 |3-2|+|4-5| = 2,模型2的绝对离差是 |3-4|+|4-3| = 2,两个模型的绝对离差相同,但是 模型2的排序结果是错误的!
而且,大部分现有(2008年)的方法,没有考虑到用户关于项目对(pairs of item)的偏好,只是独立的预测项目(item)个体的rating。
这篇文章里提出了一直新的 ranking-oriented 的协同过滤方法,直接解决排序问题,而不是先预测rating。
这篇文章的主要贡献是首先提出了一种衡量排序相似度的标准,当两个用户的排序相似度高时,就可以为一个用户推荐另一个用户的偏好项目了。
然后,提出了两种基于一组类似用户的偏好来产生项目排名的方法:
- 贪心算法(greedy)
- 使用一个用户的偏好定义的随机游走模型( random walk model )
每种方法都是为了有效的组合 从一组用户中得到的 部分的不完整的项目排序, 来得到更符合已知用户偏好的排序。所以叫eigenRank (eigen体现在哪? 没看懂) 。
2 Related works
常见的协同过滤方法有两种:
- 一是基于近邻方法 (Neighborhood-based Approaches)
- 二是基于模型的方法 (Model-based Approaches)
2.1 基于近邻的方法
有两种常见的方法: 一是user-based, 二是 item-based。
2.1.1 user-based model (我自己加的小标题)
最常见的方法是 user-based model,通过相似的一组用户的评分,来评估一个目标用户(target user)对未知项目的评分。这种方法的关键是用于选择一组用户的,用户间(user-user)的相似度。
常用的相似度包括 皮尔森相关系数(PCC, Pearson Correlation Coefficient),和向量相似度(VS, vector similarity)。
这种方法的缺点在于不同用户打分会有偏差 (bias)。
比如满分10分,李华平常都打1分,但有天李华打了3分,对李华来说,以及是很高的评价了,但是张三平常都打5分,有天可能打了3分,张三给的是很低的评价。如果只看3分的这个项目,那么李华和张三可能会被判定为相似。
论文里提到了参考文献里的一些方法,比如通过均值修正等。
另一个难点是数据相当稀疏,难以找到相似性。解决方法是降维( dimensionality reduction)和数据平滑(data-smoothing method)。
2.1.2 item-based model
item-based model和user-based model类似,是找项目(item-item)间的相似性。通过目标用户对一组相似的项目(item)的评分,来评估其对未知项目的评分。
一般item要比user的数量少,所以item间的相似度对数据稀疏性问题不敏感。参考文献中用 余弦相似度 来衡量item间的相似度,并且发现 item-based model比 user-based model表现好,计算也更高效。
2.2 基于模型的方法
基于模型的方法,使用观测到的 user-item ratings,也就是每个已知的用户对已知项目的评分,来训练模型。
这类方法有 clustering methods, aspect models, Bayesian networks.
2.3 Learning to Rank
Learning to Rank 属于机器学习领域的一个子问题,用于信息检索,协同过滤等。大多数方法都是 将项目用特征表示,然后排序 , 比如基于内容的过滤。
给定有标注的训练集后,各种方法都是尝试 学习一个打分功能(function, 或者译成函数?),或者对 顺序是否正确 进行分类。常见的方法有SVM, Neural Network, Boosting。
3 Rating Oriented Collaborative Filtering
(这部分介绍常见的相似度度量方法,以及传统协同过滤方法的模型。对刚了解这个领域的人挺有用的,比如我。)
用 U U U表示m个user, I I I 表示n个item,
可以用一个 m × n m \times n m×n的矩阵 R R R 表示每个用户对每个物品的打分, r u , i r_{u,i} ru,i表示用户u对项目i的打分,如果用户u没对项目i打分,那么 r u , i r_{u,i} ru,i为0。 (稀疏性体现出来了)。
给项目i打过分的用户,用向量 U i U_i Ui表示; 用户u打过分的项目,用向量 I u I_u Iu来表示。
3.1 皮尔森相关系数
衡量两个用户间相似度的公式:
r ˉ u \bar{r}_u rˉu 表示用户u对不同item打分的均值。 I u I_u Iu表示用户U打过分的项目, I u ∩ I v I_u \cap I_v I