基于深度学习的视频推荐

作者: 何海洲 | 来源:发表于2016-12-14 15:13 被阅读3276次

    一、引言

    最近看了一篇有关深度学习在 google YouTube 视频推荐上的应用,现在将该文章的主要思路整理一下,供大家参考。

    二、YouTube 推荐场景

    YouTube的视频推荐场景大致有如下几个特点:

    1. 大规模:YouTube用户量多达1billion,视频数量也超过1billion,因此需要高效的分布式学习算法和在线服务系统来满足这种规模的推荐服务。

    2. 新鲜度:YouTube上每天会有超过100K的新视频被上传,因此要求推荐系统能够对新视频有足够的响应速度。而且在新视频和好视频之间的推荐有比较好的平衡,也就是我们常常说的exploration & exploitation。

    3. 噪音性:YouTube上的用户行为很稀疏,还充满了大量的噪音,而且上传的视频缺少结构化的meta数据,因此推荐系统对于噪音要有足够的鲁棒性。

    YouTube的研究人员通过与其他团队如google brain的人合作,在类似于tensorflow的开源深度学习的架构上开发出了本文所说的推荐算法。

    三、推荐系统框架

    本文介绍的推荐系统包括两个部分:

    第一部分是“候选集生成网络”。利用用户的历史行为数据,采用一个深度学习网络粗略地从所有视频集合中检索出用户感兴趣的候选视频。这一步生成的后选集合是用户比较粗略的、广泛的兴趣集合。

    第二部分是“排序网络”。还是通过深度学习网络对第一部分生成的候选集进行打分,然后将分数高的视频展示给用户。

    推荐系统架构图

    具体的系统架构图如上图所示,该架构还可以支持其他候选集的接入。如传统的推荐算法所产生的推荐列表可以一同作为ranking的输入,就是上图中的"other candidate sources"。

    下面分别介绍一下这两部分的逻辑。

    在后面的描述中,为了方便叙述,并与国内其他做推荐的称呼一致,我们把候选集的生成叫做推荐召回,然后把排序网络叫做推荐排序

    四、推荐召回

    前面介绍,推荐召回阶段要在所有视频集合中检索到符合用户兴趣的候选集,大约筛选出几百个候选的列表。本文主要采用了一种类似于Matrix Factorization的方法,将推荐列表的筛选过程当成一个多分类问题。既在给定某个用户(包括该用户的行为)、上下文、以及所有视频集合的情况下,预测出用户在t时刻会看某个视频i的概率。

    公式中,u是用户、上下文的embedding向量,v是视频的embedding向量。向量的embeding是通过神经网络,利用用户的历史行为数据以及上下文数据训练学习而得到。即用户的embedding向量与神经网络的参数是联合训练而得到。

    需要注意的是,虽然YouTube有用户的显式打分数据,但是文中用到的是用户的隐式反馈数据,主要是用户的隐式数据比较多,而显式数据比较稀疏。

    推荐召回模型

    上图比较清晰的展示了如何利用深度神经网络来进行用户历史、上下文embedding的。

    1. 首先是将用户观看过的视频id列表做embedding、取embedding向量的平均值,得到观看embedding向量

    2. 同时把用户搜索过的视频id列表也做如上的embedding,得到搜索embedding向量

    3. 用户的人口统计学属性做embedding得到特征向量。

    4. 一些非多值类的特征如性别,还有数值类特征直接做为神经网络的输入。

    5. 还有一些数值类特征,可以利用经验知识,对其进行变换。如对年龄特征进行平方操作,然后作为新的特征。

    此外,作者还提出了一些数据与特征选择方面的经验:

    1. 样本时间特征:训练时的样本用到了好几个月的数据,而作者通过统计发现一个视频被用户观看的概率不是平稳的,在刚上传时会有一个山峰,然后随着时间的流逝,观看概率会缓慢下降,然后趋于平稳。因此通过把样本的时间作为特征可以捕捉到这种变化曲线。

    2. 样本筛选:为了捕捉用户的兴趣趋势,样本不仅仅用推荐的展示、点击日志,而是用到了所有的包括其他非推荐页面的日志数据。这样,用户在其他页面的行为也可以快速被捕捉到,然后在推荐的页面也能反应出用户的兴趣。

    3. 上下文选择: 一般来讲,大家衡量一个算法的效果是都是通过交叉验证来完成的。在进行交叉验证时要注意的是非对称的同看,既用户看完A之后可能会看B,但是看完B之后不一定会看A,即这种关系是非对称的。因此在进行交叉验证是,这里选择用之前的日志来训练模型,然后对当前时刻的行为进行预测。不然的话,可能会出现“交叉验证时AUC提升但是线上效果却反而下降”的情况。

    通过上文介绍的神经网络对用户历史、上下文进行embedding后,得到每个用户的特征向量。在线服务在用户请求时,通过计算该用户的特征向量,然后与语料库中的视频向量做内积,检索出内积值最大的几百个推荐候选列表。这里需要与所有视频库的视频向量做内积,时间花费太大,文中采用了一种hash的快速算法。

    五、推荐排序

    排序的目的是要利用展示、点击(或转化)数据,然后加入更多的上下文、用户、物品特征,对推荐候选进行更精细的修正、打分。

    推荐排序模型

    如上图所示的推荐排序框架图,除了对用户看到过的视频ID进行了embedding、对该次展示的视频ID也进行embedding,同时还对用户语言和视频语言等进行了embedding。

    推荐排序中有几点需要注意的地方:

    特征工程: 虽然深度学习可以自动学习、捕捉出一些人工无法观测到的特征,但是一些人工已知的、被证明有效的特征工程的工作还是建议做一些,比如描述某个视频展示次数、点击次数的特征,需要做一些统计的工作。

    类别特征 : 对类别类特征,如该视频所属的类别,可以取topN的类别进行embedding,然后作为神经元的输入。

    连续特征: 对连续值类的特征进行归一化,对连续值类的特征进行分片累积将其归一到0~1之前;还可以对某些特征进行取根号、取对数和取平方的相关操作。这些其实都是特征工程的工作。

    六、实验结果

    论文中没有直接对视频是否点击进行建模,而是对用户观看该视频的时间进行建模。当然,也不是直接预测用户对视频的观看时间,而是把视频的观看时间,转换成训练时的样本的权重,也就是通过加权逻辑回归的方法来间接对观看时间建模。

    这样的话,离线衡量效果的指标也不是大家常用的AUC,而是一种叫做“加权单用户损失”(weighted, per-use loss)的指标。具体的计算过程是这样的:

    对一个用户的当时展示及其点击数据,如果一个展示没观看的视频的打分比一个观看的视频的打分要高,那么就把这个观看过的视频的时间叫做未预测观看时间,“加权单用户损失”就是所有未预测观看时间的总和占所有观看时间的百分比

    下图是推荐排序阶段采用不同神经网络结构下的实验结果数据:

    推荐效果

    七、总结

    作者采用深度学习的方法来替代我们常用的各种推荐算法,如协同过滤算法、基于内容的推荐。对用户的embedding其实有点类似与Matrix Factorization的思想,所不同的,一是MF算法是对用户和物品直接线性变换,而本文是用神经网络,二是MF一般都是拟合用户对物品的偏好分,而本文却把推荐问题看成是分类问题,采用了交叉熵损失函数进行训练。

    在推荐排序时候,作者也是采用了神经网络对候选集进行打分,对ID类特征,类别特征也是采用了同样的embedding策略。只不过训练时采用了观看时间对样本进行了加权,既文中所说的加权逻辑回归。

    相关文章

      网友评论

      • e6a56e3205c8:谷歌系三剑客google plus,真心管用。
      • 5122爱你所爱:您好,求论文题目《坐等》
        51895ae87ebf:[Covington et al., 2016] Paul Covington, Jay Adams, and
        Emre Sargin. Deep neural networks for youtube recommendations.
        In Proceedings of the 10th ACM Conference
        on Recommender Systems, RecSys ’16, pages 191–198,
        2016.

      本文标题:基于深度学习的视频推荐

      本文链接:https://www.haomeiwen.com/subject/kqmimttx.html