4篇YouTube推荐系统论文, 一起来看看别人家的孩子

4篇YouTube推荐系统论文, 一起来看看别人家的孩子

最近一直在花时间研究和实现一些推荐算法,并且搭建系统在产品中进行测试。

我读了一些关于Netflix等网站“如何使用Collaborative Filtering来预测用户对其他影片的打分”的文章,之前也曾在Pinterest目睹了Related Pin从传统的计算co-occurence,到深度学习以及两次打分系统的设计转变。

但最让我好奇的,还是以技术著称的Google是怎么做推荐系统的。

经过一番调查,我找到了4篇能够描述这些年YouTube推荐系统变化的论文。

在这里同大家分享一下。

描述中难免会有不准确,或者理解错误的地方,希望各位老师和朋友多多交流,共同学习。


Video Suggestion and Discovery for YouTube: Taking Random Walks Through the View Graph

这篇论文发表于2008年,是我发现的相对比较早的一篇有关于YouTube推荐系统的文章。作者里有一位前同事Kevin Jing,是后来Pinterest图像组的奠基人。

这篇文章从最基本的co-view概念入手,先讲了一个直观的概念 — — item-based collaborative filtering system

假设一个用户B看了两个视频,1和4,根据历史,我们知道很多看了视频1的人也看了视频5,9。同时,我们知道很多看了视频4的人也看了别的视频12,13(请读者自行想象)。那我们可以把视频5,9,12,13推荐给用户B。

在对推荐结果排序的时候,我们可以根据一个视频的流行度,和用户已经观看过得视频的co-view,从前该视频推荐成功的概率等因素给出一个打分函数。

作者在这篇文章里提出一种叫做Adsorption的学习框架,当我们有一个小的labeled数据集和一个很大的unlabeled数据集时,可以通做Adsorption将label从小的数据集推广到大数据集上。

一种Adsorption的方法就是进行Random Walk,将每一个顶点v的label发到相关联的邻居上,在每一次传递结束后,对顶点的label进行归一化。

这种Adsorption的方法可以用来做推荐系统。

一种做法是把user观看video的关系当做一张图,把用户喜欢看的视频当做label,然后进行random walk,将label推广到其他的视频上。

这篇文章最后的实验离线测试效果很好,后来Pinterest也采用random walk来生成related pin的候选集,能够很好的提高用户互动情况。如果挑一挑刺的话,这篇文章并没有太多系统方面的介绍,如何对上亿用户,上亿视频生成推荐结果对于小公司来说仍是一个很难的挑战。


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来搭建这一推荐系统,值得深入学习。


Label Partitioning For Sublinear Ranking

在我们聊现在最火的Deep Learning算法前,不妨先看一看YouTube发表于2013年的这一文章,因为它回答了一个Deep Learning中一个很难的问题,如何在包含很多节点的神经网络output layer找到概率最大的输出节点。

这篇文章中谈到的算法可以被应用到很多互联网服务上,比方对很多documents进行排序的时候,可以对每一个document设定一个输出点。在做推荐系统的时候,可以从大规模可选推荐内容中找到最有可能的那些结果。

基本思路如下:

  1. 对于任意一个测试样例x,首先根据训练样例划分找到最有可能的划分集合p=g(x)。
  2. 取到训练样例划分中最有可能的输出集合L。
  3. 对输出集合样例中每一个输出y进行打分,计算f(x,y),并且根据结果进行排序。

对输入样例的划分可以采用两种方法,一种是Weighted Hierarchical Partitioner,类似Weighted K-means,给训练样例xi到中心的距离cj一个根据label预测准确度得出的weight,优化:

一种是Weighted Embedding Partitioner,通过对训练样例的转化使得label相同的训练样例尽可能被划分到一个集合中去,优化:

对于我们常用的SVD,LSI和神经网络相关模型,可以直接使用中间层当做input space。

对于测试输出的label划分,文中也提到两种方法,一种是设计优化函数,计算每一个label被分到一个partition后的loss,然后优化所有label划分的整体loss。

一种是简单的计算每一个partition内的label出现频率,选择出现最频繁的几个。

在实验结果上,采用优化函数的划分的方案可以带来两倍以上的提高。

这篇文章比较理论,所以读起来也很困难。我个人认为这是YouTube开始转向采用embedding来进行视频推荐的基础,非常值得一读。


Deep Neural Networks for YouTube Recommendations

这是2016年发表于RecSys的文章,其中介绍了Google如何通过深度学习来改进YouTube推荐系统,从算法和系统上都做了详细介绍,引来了无数人围观。

首先从整体结构上来看,推荐系统分为两部分。

第一部分是Candidate Generation,用来从上千万上亿个视频中选择少数(几百,几千)个候选视频,然后通过第二部分ranking来对这些候选视频进行详细打分,得分最高的视频作为最终结果呈现给用户。

在Candidate Generation的时候,这篇文章采用了word embedding的技巧来计算每一个视频的embedding;然后将视频的embedding,用户搜索问题的embedding分别计算average,再加入用户的性别,国家,年龄,视频质量等特征,采用两个完全相连的ReLU层和softmax函数来预测用户下一个看的视频是什么。

推荐时可以采用最近邻搜索的解决方案,在上亿数据中找到用户最有可能观看的下一个视频。在最初读这篇文章的时候我就有一个问题,如何在上亿输出中找到最有可能的一个,在读了上一篇“Label Partitioning for Sublinear Ranking”后我感觉YouTube就是采用把中间层当做input space,进行最近邻搜索,然后衡量下一个可能看的视频的概率。

当我们把推荐量从上亿减少到数百,或数千视频后,就可以采用Ranking函数进行打分了。

尽管深度神经网络可以在很大程度上减少工程师的工作量,但是YouTube还是花了不少人力从视频中抽取更多有效的特征,包括预测视频的特征,预测视频和历史观看记录生成的crossing features,以及用户观看视频的时效特征。

Ranking的主要目标是根据用户过去观看记录和推荐视频的特征,采用logistic regression去预测下一个视频的用户观看时间。

因为有明确的优化函数和衡量标准,得出的结果更容易让人理解。

虽然Learning to Rank已经是一个很经典的机器学习问题了,但是这篇文章发现深度学习仍然能比以前线性模型和基于GBDT的树状模型预测的更好。

在最终实现时,YouTube推荐系统面临两大考验,一方面是Freshness,每小时都有很多新的视频上传,但是推荐算法偏向老的内容,这篇文章中提到用age作为一个特征进行训练,在最后推荐时设所有的内容age为0,有效的模拟了老内容引入的bias。

另一方面是训练时的噪音,很多时候用户点击观看一个视频并不代表用户真的喜欢,满意这个内容,所以在最后选择训练样例时,加入了观看时长这一衡量标准。


小结

关于YouTube的推荐系统总结就进行到这里,从4篇论文里我们可以看到YouTube在不同时段,基于不同的资源和技术对系统的进化过程,也能帮助自己更好的在不同情况下选择最合适的解决方案。

欢迎各位老师,朋友多多交流,共同成长。

你可能感兴趣的:(推荐算法)