最近看了些关于CF的论文,稍微总结整理下。
背景
购物平台上,用户会对商品有评级等信息,如何为用户推荐潜在感兴趣的商品,提供用户体验,增加用户黏度,是推荐系统的目标。
what is CF
假设 1:相似品味的用户,感兴趣的也相近。
假设 2:历史对未来有借鉴意义。
若现在有采集到
n
个用户对
那么 3:如何评估user/ item相似,给出感兴趣item排序,就是重点解决的问题。
提示 4:可以直接计算,可以映射到其他空间维度计算,可以分解,可以增加额外信息,可以与其他模型混合。
CF 分类
a)如果根据相似度的角度,可以分为user-based 和 item-based CF。
b)如果根据预测的方式,可以分为memory-based 和 model-based CF。
memory-based CF主要是user-item全量计算,然后直接在内存里计算推荐项目。
model-based CF 则是训练一个预测模型,然后拿来预测推荐项目。
model-based CF 的方法有 cluster类型,贝叶斯类型,神经网络类型,因式分解类型。
c)混合型。
协同过滤+内容过滤方法混合到一起。pdf3
协同过滤+社交信息 pdf4
协同过滤+其他信息 pdf5, pdf6
问题特点
1. 数据稀疏性。
这是user-item matrix与生俱来的特点,单一用户无法对成千上万的商品都一一给出评级。
稀疏性 衡量指标:
稀疏性导致的问题:
a)所有 基于raw-data的近邻相似的计算,都是不准确的。
b)冷启动的问题。无评级的用户,是无法通过已有信息计算相似性的。 冷启问题,单纯靠user-item矩阵是无法解决的,因为信息不足,需要引入外部其他数据。比如社交信息,搜索信息等。
2. 可拓展性。
对于系统增加比较快的时候,很快会新增一批有评级的用户、或者一批有评级的商品,如何将新增数据快速加入系统中,是个问题。这问题在矩阵分解方法中,比如SVD的CF中,是用Fold-in技术来搞定。pdf1, pdf2。
3. 计算复杂性。
不管是直接用原始数据,还是用分解的方法,都涉及到大量的计算问题,如何高效计算,是个问题。优化也是问题。pdf7, pdf8
4. 其他
比如灰度群体,托攻击,同义词。
灰度群体,是没有固定兴趣的群体。托攻击,是人为增加某些商品被推荐的机会,在user-based方法中,更容易受到影响。同义词,一个含义多个词,会被重复推荐。
如何评价推荐效果
a) MAE : Mean Absolute Error
其中R^u,i表示预测值,|Rtest|表示预测值的个数
b)RMSE :Root Mean Square Error
RMSE是最常用的CF的衡量指标。
c)NDCG : Normalized Discounted Cumulative Gain
其中,reli表示在分级反馈评价中,位置i得到的评价,比如优(3)良(2)中(1)差(0)
|REL|表示按照最理想状态排序的列表 ,计算举例如下。
DCG6=31+21.585+32+02.322+12.585+22.807=6.861
IDCG6=31+31.585+22+22.322+12.585+02.807=7.141
NDCG常用来衡量rank好坏,并用来对比不同方法的rank结果。
d)top-K recommend hit-recall/precise
直接评估推荐的效果。
其中,N(k,u)表示给用户u推荐的k个item中,用户实际感兴趣的个数,N(u)表示用户u感兴趣的item个数
reference
- 《Increamental singular value decomposition algorithms for highly scalable recommenders systems》
- 《Using linear algebra for intelligent information retrieval》
- 《Taxonomy-driven computation of product Recommendation》
- 《A survey of collaborative filtering based social recommender systems》
- 《A survey of collaborative filtering techniques》
- 《matrix factorization techniques for recommender systems》
- 《Matrix completion via alternating least square》
- 《A guide to singular value decomposition for collaborative filtering》