`
chungle
  • 浏览: 58687 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

窥视豆瓣的算法

阅读更多

 

http://www.linklink001.com/2008/03/doubanarithmetic/

豆瓣一直是中国web2.0的楷模,它神奇的“猜”功能吸引了无数的粉丝。他到底为什么有这么神奇的能力那?古老的读心术吗?当然不是,这全部得力于他的推荐算法。

所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。推荐算法主要分为两种(还有一些可能不在本文讲述的范围内)基于内容的推荐基于协同过滤的推荐。基于内容的推荐比较容易理解,他是通过两样东西的内容之间的相关性进行推荐。比如说,A喜欢一篇400字文章,里面出现了“豆瓣”这个词100次。哪么系统就会推荐一些同样出现了“豆瓣”这个词很多次的文章给A。这就是基于内容的推荐,他的好处是比较好理解、简单、高效,缺点就是只能用来推荐文章等一些文字的东西。对于图片等一些多媒体的内容就无从下手了。

基于协同过滤的推荐算法,正好弥补了这个缺点,他理论上可以推荐世界上的任何一种东西。图片、音乐、样样可以。协同过滤算法主要是通过对未评分项进行评分预测来实现的。不同的协同过滤之间也有很大的不同。

基于用户的协同过滤算法

这种算法基于一个这样的假设“跟你喜好相似的人喜欢的东西你也很有可能喜欢。”所以基于用户的协同过滤主要的任务就是找出用户的最近邻居,从而根据最近邻居的喜好做出未知项的评分预测。这种算法主要分为3个步骤:

一,用户评分。可以分为显性评分和隐形评分两种。显性评分就是直接给项目评分(例如给豆瓣里的书籍评分),隐形评分就是通过评价或是购买的行为给项目评分(例如在当当购买了什么东西)。

二,寻找最近邻居。这一步就是寻找与你距离最近的用户,测算距离一般采用以下三种算法:1.皮尔森相关系数。2.余弦相似性。3调整余弦相似性。调整余弦相似性似乎效果会好一些。

三,推荐。产生了最近邻居集合后,就根据这个集合对未知项进行评分预测。把评分最高的N个项推荐给用户。

这种算法存在性能上的瓶颈,当用户数越来越多的时候,寻找最近邻居的复杂度也会大幅度的增长。因而这种算法无法满足及时推荐的要求。基于项的协同过滤解决了这个问题。

基于项的协同过滤算法

根基于用户的算法相似,只不过第二步改为计算项之间的相似度。由于项之间的相似度比较稳定可以在线下进行,所以解决了基于用户的协同过滤算法存在的性能瓶颈。

豆瓣应该采用的就是基于项的协同过滤算法。但是他不可能只使用一种算法,肯定是综合了许多的算法。至于都有什么算法,比例是什么。那只有豆瓣的工程师知道,我们是猜不出来的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics