基于用户的协同过滤算法是最古老的一种推荐算法。早在1992年,施乐公司的PARC实验室(IT史上最具影响力的实验室之一)设计了Tapestry系统来进行邮件过滤,这也是协同过滤算法最早的应用;1994年的GroupLens项目是推荐系统的又一个里程碑,在该项目中使用了基于用户的协同过滤算法来进行新闻推荐。
基本算法
UserCF是一种基于用户历史行为的推荐算法,它的基本思想如下:为了给用户A推荐物品,系统会参考K个与用户A兴趣相近的用户所喜好的物品。如果其中有用户A尚未关注的物品,就很有可能是用户A感兴趣的,系统就可以将这些物品推荐给用户A。具体的说,基于协同过滤的系统,通常具有以下几个特点:
- 如何收集用户喜好
- 如何评价用户间的相似程度
- 如何为目标用户进行推荐
用户喜好收集
首先,系统可以收集用户对物品的喜好程度。由于协同过滤算法的输入是一个user-item的rating矩阵,所以我们需要在实际问题中提炼出用户对物品喜好程度(rating)的数值表示。对于不同的系统,有一些不同的实现
- 评分,显性评分,可以归一化后直接使用
- 投票,显性评分,赞作为正评分,踩作为负评分
- 转发,隐性评分,按布尔型处理,转发在一定程度上表现了对物品的喜好
- 收藏,隐性评分,按布尔型处理,收藏在一定程度上表现了对物品的喜好
- 回复/评论,隐性评分,对回复和评论的文本内容进行情感分析可以得到用户对物品的喜好程度
- 点击,隐性评分,用户的点击一定程度上反映了物品是否引起了用户的注意,所以也可以反映用户的喜好
- 页面停留时间,隐性评分,用户提留时间长,说明物品是否引起了用户的注意,缺点是噪音较大
- 购买,隐性评分,购买物品是用户喜好的一个很强的表示
除此之外,不同的系统还可以根据自身特点采用不用的用户行为。如音乐推荐系统中的”完整收听”,微博用户推荐系统中的“关注”等等。
在一个实际的系统中,用户的行为往往不是单一的,比如在微博推荐系统中,用户对微博的操作包括点击浏览、收藏、转发、评论等等。如何组合不同的用户行为,通常有两种做法:
- 将不同的行为分组:一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。类似于当当网或者 Amazon 给出的“购买了该图书的人还购买了 ...”,“查看了图书的人还查看了 ...”
- 根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。
Reference
[1]: [Coursera课程:推荐系统导论][1]
[2]: [探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤][2]
[3]: 推荐系统实践
[4]: Recommender Systems:An Introduction
[5]: Herlocker, Jonathan L., et al. "An algorithmic framework for performing collaborative filtering." SIGIR09. ACM, 1999.
[1]:https://www.coursera.org/learn/recommender-systems/home
[2]:https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/