基于协同过滤的推荐算法研究
2018-09-17毛勇
毛勇
摘 要: 推薦算法是目前互联网环境下广泛使用的技术之一。其中协同过滤推荐算法是目前应用最广泛最成熟的推荐技术。文章介绍了协同过滤推荐算法的基本概念和原理,对协同过滤推荐算法的相似度计算公式和评价指标进行了归纳整理,总结分析协同过滤推荐算法存在的问题,以及目前众多学者对这些问题的解决方案,最后介绍了协同过滤推荐算法的发展方向。
关键词: 推荐算法; 协同过滤; 个性化推荐; 预测推荐
中图分类号:TP399 文献标志码:A 文章编号:1006-8228(2018)07-28-04
Abstract: Recommendation algorithm is one of the most widely used technologies in the Internet environment. Among them, collaborative filtering recommendation algorithm is currently the most widely used and the most matured recommendation technology. This paper mainly introduces the basic concepts and principles of collaborative filtering recommendation algorithm, summarizes the similarity calculation formula and evaluation index of collaborative filtering recommendation algorithm, summarizes and analyzes the existing problems of collaborative filtering recommendation algorithm, as well as the solutions to these problems of many scholars at present, and finally, the development direction of collaborative filtering recommendation algorithm is introduced.
Key words: recommendation algorithm; collaborative filtering; personalized recommendation; prediction recommendation
0 引言
随着互联网和信息技术的迅猛发展,用户往往很难从海量的数据中获取到自己所需要的信息,传统的搜索引擎和信息过滤技术只能被动的为用户提供信息服务,当用户的信息需求不明确时,这些技术很难有效地帮助用户。因此,如何更高效更精准地为用户提供信息服务,成为制约互联网信息服务发展的一个主要问题。在解决这个问题方面,推荐系统相对于传统的推荐引擎和信息过滤技术有着明显的优势。推荐系统能根据用户的历史访问记录信息,来为用户进行精准高效的个性化推荐服务。推荐算法主要分为:基于内容的推荐算法、协同过滤推荐算法和混合推荐算法。其中协同过滤推荐算法是当前应用较为广泛和成功的推荐算法。
1 基于协同过滤的推荐算法
1992年Goldberg、Nicols、Oki和Terry首次提出协同过滤的概念[1]。协同过滤算法是一种典型的利用集群智慧的方法,它的核心思想为:对于具有相同或相似兴趣爱好的用户A和B,当用户A喜欢某一个物品时,用户B可能对这个物品也有着相似的兴趣度。协同过滤算法一般采用最近邻技术,利用用户对项目的历史评分数据,通过相似度计算产生目标用户的最近邻集合。
经过多年发展,协同过滤算法主要分为两类:基于内存(Memory-based)的协同过滤推荐算法和基于模型(Model-based)的协同过滤推荐算法[2]。而基于内存的协同过滤推荐算法又可以分为:基于用户的协同过滤算法(User Based Collaborative Filtering,UBCF)和基于项目的协同过滤推荐算法(Item-Based Collaborative Filtering,IBCF)。
1.1 基于内存的协同过滤算法:
在一部分中文文献中,基于内存的协同过滤算法也被翻译为“基于记忆”的协同过滤算法,基于内存的协同过滤推荐算法主要分为三步。
⑴ 收集用户信息
收集可以代表用户兴趣的信息集合,构建用户-项目评分矩阵如下:
⑵ 相似性计算
相似度计算是基于内存的协同过滤推荐算法的基础步骤,通过相似度计算可以获得用户之间兴趣偏好的相似程度或两个项目的相似程度。
以下是两种常用的相似度计算方法。
方法一 夹角余弦相似度(Cosine Similarity)
夹角余弦相似度将每个用户评分数据看做n维向量,两个向量之间的夹角余弦值表示这两个用户之间的相似程度,夹角余弦值越小表示这两个用户之间的相似度越高,具有相似的兴趣偏好。夹角余弦相似度公式为:
皮尔森相关系数(Pearson Correlation Coefficient PCC)[3]:是余弦相似度在维度缺失情况下的一种改进,在两个用户共有的评分项目上进行相似度计算,皮尔森相关系数公式如下:
其中,Iuv表示用户u和用户v共有的评分项目,rui和rvi分别表示用户u和用户v对项目i的评分,,分别表示用户u和用户v各自的项目平均分。
方法二 修正的余弦相似度(Adjusted Cosine Similarity)
余弦相似度更多的是從方向上区分差异,而对绝对的数值不敏感,因此无法从每个维度来衡量数值的差异。针对这种情况,就出现了修正的余弦相似度,公式如下所示:
其中,Iuv表示用户u和用户v共有的评分项目,rui和rvi分别表示用户u和用户v对项目i的评分,,分别表示用户u和用户v各自的项目平均分,Iu和Iv表示用户u和用户v各自的评分项目。
⑶ 生成推荐列表
最近邻集合的产生方法有两种,一种是设置相似度阙值,只有高于阙值才判定为相似用户,另一种是指定目标用户的最近邻个数。
1.1.1 基于用户的协同过滤算法
基于用户的协同过滤推荐算法通过比较目标用户的一系列行为或评分信息和其他用户之间的相似程度,来计算出目标用户的最近邻集合,也就是和目标用户兴趣偏好类似的用户集合,然后将最近邻集合中的用户最感兴趣的内容或项目作为推荐内容推荐给目标用户。
1.1.2 基于项目的协同过滤算法
随着推荐系统的发展,会出现这样一种现象,推荐系统数据库中的项目数量固定或者增长缓慢,与之相反的是推荐系统的用户快速增长,因此推荐算法计算出的项目之间的相似度矩阵更新频率很低。基于项目的协同过滤算法认为:用户对不同项目的评分具有相似性,因此,在为目标用户进行推荐时,可以先计算项目之间的相似程度,当需要预测用户对某一个项目的评分或喜爱程度时,可以参照用户已经评价过的项目评分来进行计算。基于物品的协同过滤算法就是找到和“目标用户”喜欢的物品相似的物品,然后把相似的物品推荐给“目标用户”。例如我很喜欢《黑客帝国》,而《盗梦空间》和《黑客帝国》相似度很高,推荐系统就可以给我推荐《盗梦空间》,实际上我也很喜欢《盗梦空间》。
1.2 基于模型的协同过滤算法
基于内存的协同过滤推荐算法在推荐计算过程中,推荐算法通过相似度计算对用户未访问过的项目进行评分预测,在这个过程中,用户的所有评分数据都在评分预测中充分发挥作用,形成一种全局推荐,因此基于内存的推荐算法一般都可以提供较为满意的推荐质量,但是随着用户数量和项目数量的增加,全局推荐计算将占用大量系统内存资源,很难满足一些在线推荐服务的实时性要求。针对这一问题,众多学者将机器学习和数据挖掘的计算模型与协调过滤推荐算法相结合,研究出了基于模型协同过滤推荐算法。
基于内存的协同过滤推荐算法之间在用户-项目评分矩阵上进行运算和产生推荐结果,而基于模型的协同过滤推荐算法首先对用户-项目评分矩阵进行分析和数据挖掘,通过机器学习的算法或统计学的相关数学模型建立相符的评分预测模型,最后根据目标用户已有的评分数据,来对目标用户未评分的项目进行评分预测。
2 协同过滤推荐算法评价指标
⑴ 预测准确度
预测准确度是衡量一个推荐系统或者推荐算法预测用户行为的一个重要指标,在计算预测准确度时,需要将包含用户历史行为记录的数据集分割为训练集和测试集。通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测的结果和测试集中数据的重合度。通常评分预测准确度通过均方根误差(RMSE)和平均绝对误差(MAE)来计算[4]。
⑵ 覆盖率
覆盖率(coverage)表示一个推荐系统对项目长尾的挖掘能力,具体指的就是推荐算法预测出来的项目占项目总数的比例,推荐算法推荐的数量越多,表示推荐算法的推荐质量越高。在信息论和经济学中有两个著名的指标用来定义覆盖率。
⑶ 多样性
多样性指标主要考虑到用户的兴趣是多样的,例如用户可能同时喜欢动作电影,战争电影和文艺电影,当推荐列表中的项目都包含这三类电影时,才能够满足用户的多样性需求。多样性代表着推荐列表中的项目应该是不属于同一类目的,也就是这些项目应该是不同的,存在差异性。
3 协同过滤推荐算法存在的问题
⑴ 数据稀疏问题
数据稀疏问题是推荐系统中普遍存在的现象。协同过滤算法是在用户-项目评分矩阵的基础上进行相似度计算和预测推荐,而在正常的推荐系统中,用户不可能对系统中的每一个项目都作出评分,因此在用户-项目评分矩阵中存在着大量的空白项。在对用户或者项目之间进行相似性计算时,缺乏客观准确的评分数据,最终出现推荐结果不够精准的问题。
针对这个问题,学术界研究了许多方法来解决这个问题:①矩阵填充。通常是对没有评分数据的项目填入一个固定的缺省值或者填入其他用户在这个项目上的平均值。②矩阵降维和奇异值分解(SVD)[5]。采用奇异值分解的方法去掉不重要的和用噪音,降低矩阵维度,增加矩阵数据的稠密程度。③采用预测评分对用户-项目评分矩阵的空白评分项进行填充[6]。常用的方法有BP神经网络、Na?ve Bayesian分类器等,通过这些方法预测用户对项目的评分情况。
⑵ 冷启动问题
冷启动是数据稀疏问题的一个特殊情况,它分为新项目冷启动问题和新用户冷启动问题。冷启动出现的原因是,当一个新用户或者一个新的项目加入到系统时,该用户没有对系统中的项目进行推荐或者一个新的项目加入到系统后短时间内没有用户对其进行评价。推荐算法在进行相似度计算时因为缺少评分数据,因此很难为新用户或新项目匹配到相似用户或相似项目。
⑶ 可扩展性问题
协同过滤算法的核心是通过对用户-项目评分矩阵来进行相似度计算,而在推荐系统中,用户和项目的数量随着时间的变化而增加,也就意味着在进行相似度计算时,庞大的矩阵计算将会严重影响推荐算法的推荐效率。针对这一问题,经典的解决方法有k-means聚类、EM(Expectation-Maximization)算法、Gibbs Sampling 算法和模糊聚类算法等。
⑷ 兴趣漂移问题
兴趣漂移问题在现实情境中是经常存在的。因为用户的兴趣变化会随着生活环境,年龄增长等外界原因或者自身性格变化的内部原因而改变,但是推荐系统很难根据用户的历史记录来敏锐的捕捉到这点,这就导致推荐算法推荐和预测用户可能感兴趣的内容与用户实际关注和感兴趣的内容产生脱节。针对这一问题,业内专家主要采用显式反馈和隐式反馈相结合的方法,或者将用户的地理位置、登录时间等因素考虑在内,进一步进行精准的推荐。
4 总结和展望
协同过滤推荐算法是目前应用最广泛最成功的推荐算法,在电子商务、互联网音乐视频等领域有着不可忽视的作用。本文围绕协同过滤推荐算法这一主题,重点介绍了协同过滤推荐算法的核心思想、算法分类、算法过程和协同过滤推荐算法所存在的问题以及相应的解决方案。综合分析协同过滤推荐算法的发展趋势,我们可以看出虽然协同过滤推荐算法相比之前的只针对用户-项目评分矩阵这一显式反馈因素进行考虑,现在的协同过滤推荐算法在算法性能和用户兴趣挖掘方面有了很大进步,同時与机器学习和深度学习的一些前沿算法相结合也有了良好的效果。但是随着现代社会人们生活节奏的加快,其兴趣需求的变化频率也随之加快,如何更加敏锐灵活的感知用户的兴趣变化,这些方面也是以后需要继续研究的方向。
参考文献(References):
[1] Goldberg D, Nichols D, Oki B M, et al.Using collaborative filtering to weavr an information tapestry[J].Communications of the ACM.December,1992.35(12):61-70
[2] 查大元.个性化推荐系统的研究和实现[J].计算机应用与软件,2011.28(10):7-8,42
[3] Tao Jun, Zhang Ning. Collaborative Filtering Algorithm Based on Interest-Class[J]. Computer System&Applications;,2011.5:55-59
[4] 任磊.推荐系统关键技术研究[D].华东师范大学,2012.
[5] 孙小华.协同过滤系统的稀疏性与冷启动问题研究[D].浙江大学,2005.
[6] Shan H,Kattge J,Reich P,et al.Gap Filling in the Plant Kingdom-Trait Prediction Using Hierarchical Probabilistic Matrix Factorization[J]. arXiv preprint arXiv:1206.6439,2012.