Collaborative filtering, 即协同过滤,是一种新颖的技术。最早于1989年就提出来了,直到21世纪才得到产业性的应用。应用上的代表在国外有Amazon.com,Last.fm,Digg等等。
最近由于毕业论文的原因,开始研究这个题目,看了一个多星期的论文与相关资料之后,决定写篇总结来总结一下最近这段时间资料收集的成果。
在微软1998年的那篇关于协同过滤的论文中,将协同过滤分成了两个流派,一个是Memory-Based,一个是Model-Based。关于Memory-Based的算法,就是利用用户在系统中的操作记录来生成相关的推荐结果的一种方法,主要也分成两种方法,一种是User-Based,即是利用用户与用户之间的相似性,生成最近的邻居,当需要推荐的时候,从最近的邻居中得到推荐得分最高的几篇文章,用作推荐;另外一种是Item-Based,即是基于item之间的关系,针对item来作推荐,Amazon.com即是使用这种方法,使用一种基本的方法来得到不俗的效果。而实验结果也表明,Item-Based的做法比User-Based更有效。而对于Model-Based的算法,即是使用机器学习中的一些建模算法,在线下对于模型进行预计算,在线上能够快速得出结果。主要使用的算法有 Bayesian belief nets , clustering , latent semantic , 最近几年又出现了使用SVM 等的CF算法。最近几年又提出一种新的分类,content-based,即是对于item的内容进行分析,从而进行推荐。而现阶段,比较优秀的一些应用算法,则是将以上几种方法,混合使用。比较说Google News,在它的系统中,使用了一种将Memory-Based与Model-Based两种方法混合的算法来处理。在Google的那篇论文里面,它提到了如何构建一个大型的推荐系统,其中Google的一些高效的基础架构如:BigTable,MapReduce等得到很好的应用。
在这篇总结中,主要论及最基本的Memory-Based算法。对于Memory-Based算法,主要有两个步骤,第一个是计算相似性,另外一个是进行推荐。
对于第一步,主要是于线下计算item-item或者user-user之间的相似性,主要使用的算法有Correlation-Based,如Pearson correlation , Jaccard coefficient等,与Vector Cosine-Based Similarity , 和在实验中被验证具有最好效果的Regression 。 第二步,则是生成相关的推荐项目的过程。主要是根据上一步得出的最近邻,从其中得出最相关的Top-N个推荐的项目作为结果。这种方法被沿用多年,大多数的推荐系统都是使用这种方法构建的。
收集到一些相关资料:
书籍:
书籍:
开源软件库:
参考文献: