The YouTube Video Recommendation System
这是一篇2010年发表在RecSys上的文章,篇幅仅有短短的4页,但是包含了YouTube推荐系统的产品理念,数据处理,系统设计以及实验结果,可谓是麻雀虽小,五脏俱全。
这篇文章主要介绍如何在YouTube主页上给用户提供的个性化推荐内容,其目的是为了提高用户使用网站的互动性以及娱乐性。
文章中所提到的算法会输出用户可能喜欢的视频集合,而不是给出一个具体的用户喜欢某一视频的概率。
在主页上推荐视频和推荐一个视频的相关视频在需求上有一定的差异,主页上的推荐对内容的新鲜度,发散性以及用户近期行为的相关性要求比较高。
另外还有一个重要的考虑因素就是需要帮助用户理解 ”为什么我会看到这些推荐内容” ,这样可以帮助用户根据自己的喜好改善推荐引擎。
搭建一个主页的推荐系统,一个基础的组件就是对于任意一个视频u,生成一系列相关的视频v,在文章中作者使用了简单的co-view来计算两个视频的相关度:
这里的Cij是视频i和j的co-view数, f (Vi,Vj)则是根据视频Vi和Vj的观看次数给出的一个折扣,这样可以避免总是给用户推荐最流行的视频。
根据相关性 R ,我们可以找到每个视频最相关的N个视频,这里作者还引入了一个minimum score threshold,用来去除那些并不十分确定的相关视频。
所有推荐视频的集合主要是根据用户过去的行为决定,一个用户可能会观看,喜欢多个视频或者给他们进行打分。根据这些视频,我们可以找到所有距离为1的相关视频,然后根据所有距离为1的相关视频找到距离为2的相关视频。
日常应用当中,距离为1的相关视频就足够提供很多推荐结果,但是他们可能会十分偏向于用户某一个狭窄的兴趣点,所以我们需要增加距离使推荐结果有更多的新颖性。
当我们得到所有的推荐视频集合后,可以对他们进行一次打分,根据视频的观看总量,用户的打分,评价,喜欢和分享动作来预测哪一个视频会得到用户的青睐。通过对用户的反馈进行分析,我们可以把用户不感兴趣的视频原因从推荐初始集合中删去,或者限制某一个看过的视频生成的推荐视频数量。
我个人非常喜欢这篇文章,他涵盖了最基本的推荐引擎样例生成以及额外的排序过程,并且从系统上分析了如何通过Bigtable,MapReduce来搭建这一推荐系统,值得深入学习。