Deep Neural Networks for YouTube
Recommendations论文翻译
摘要
YouTube 所使用的推荐系统是现在最大规模的、最先进的业界的推荐系统之一。在这篇论文中,我们在较高层面上描述这个系
统,并重点关注了深度学习所带来的巨大的性能提升。。本论文根据典型的两阶段信息检索的二分法(two-stage information
retrieval dichotomy)分为两部分:首先,我们详细描述了一种深度候选生成模型(deep candidate generation model),接着
描述了一种分离的深度排名模型(deep ranking model)。通过设计、迭代、维护一个带有巨量面向用户的影响的巨型推荐系
统,我们还提供了实用的经验教训和见解。
关键词
推荐系统,深度学习,可扩展
1 简介
YouTube是世界上最大的创作,分享和发现视频内容的平台。YouTube推荐系统负责从不断增长的视频语料中,帮助超过十亿用
户提供个性化推荐内容。在这篇论文中,我们将聚焦在在Youtube推荐系统上带来巨大影响的深度学习。图1展示了YouTube在
视频App首页的推荐。
在推荐系统领域,特别是YouTube的所在视频推荐领域,主要面临三个挑战:
规模大:用户和视频的数量都很大,只能适应小规模数据集的算法就不考虑了。
更新快:youtube视频更新频率很高,每秒有小时级别的视频上传,需要在新发布视频和已有存量视频间进行balance。更
新快(实时性)的另一方面的体现是用户实时行为切换很快,模型需要很好的追踪用户的实时行为。
噪音:噪音主要体现在用户的历史行为往往是稀疏的并且是不完整的,并且没有一个明确的ground truth的满意度signal,
我们面对的都是noisy implicit feedback signals。噪音另一个方面就是视频本身很多数据都是非结构化的。这两点对算法的
鲁棒性提出了很高的挑战。
与google其它部门的产品相结合,YouTube经历了一个根本性的转变,将深度学习作为一个通用解决方案用作几乎所有的学习
问题。我们的系统构建在基于最近开源的TensorFlow的gooogle大脑上。TensorFlow为实验提供了一个灵活的框架,用于各种
深度神经网络架构的大规模分布式训练实验。我们的模型学习了大约十亿个参数,用数百亿样本训练。
与大量的矩阵分解方法研究[19]相比,很少有研究是关于使用深层神经网络做推荐系统的。神经网络在[17]中用于推荐新闻,在
[8]中被引用和在[20]中的评论。协同过滤在[22]中被建立为深层神经网络,在[18]中被自动编码。Elkahky等使用深层学习进行
跨域用户建模[5]。在基于内容方面,Burges等人使用深层神经网络进行音乐推荐[21]。
本文的组织结构如下:第2节介绍了一个简要的系统概述。第3节更详细地描述了候选集生成模型,包括如何对其进行训练并用
于提供推荐服务。 实验结果将显示模型如何从深层的隐藏单元和其他的异构信号中受益。 第4节详细说明了排序模型,包括如
何修改经典逻辑回归以训练预测预期观察时间(而不是点击概率)的模型。 实验结果表明,隐层深度在这种情况下也是有帮助
的。 最后,第5节介绍了我们的结论和经验教训。
2.系统概述
我们的推荐系统的整体结构如图2所示。该系统由两个神经网络组成:一个用于候选集的生成,一个用于排序。
候选集生成网络将用户的YouTube活动历史记录中的事件作为输入,并从大型语料库中检索一小部分(数百个)视频。 这些候
选集通常旨在以高精度与用户相关。 候选集生成网络通过协同过滤只能提供广泛的个性化。用户之间的相似性只能以诸如视频
观看的ID、搜索查询词、人口统计的粗略特征来表示。
在列表中呈现几个“最佳”推荐结果需要精细级别表示来区分具有高召回率的候选集之间的相对重要性。排序网络通过使用描述
视频和用户的丰富的特征集合,根据期望的目标函数向每个视频分配分数来完成这个任务。高得分的视频呈现给用户(按它们
的得分排名)。
两阶段的推荐方法允许我们从非常大的语料库(数百万)视频中做推荐,同时还要保证设备上出现的少量视频是个性化的,可
以为用户服务的。此外,该设计使得能够混合由其它数据源(例如在早期工作[3]中描述的那些数据源)产生的候选集。
在开发过程中,我们广泛使用离线数据(精度,召回率,排序损失等)来指导我们的系统的迭代改进。然而,对于算法或模型
的有效性的最终确定,我们依赖于通过线上实验的A / B测试。在线上实验中,我们可以衡量点击率,观看时间和衡量用户投入
的许多其他指标的细微变化。 这是很重要的,因为线上A/B测试结果并不总是与离线实验正相关。
3. 候选集生成
在候选集生成阶段,大量的YouTube语料被砍掉,到最后可能只剩下与用户相关的数百个视频。这里描述的推荐器的前身是在
最小化秩损失的目标下训练的矩阵分解方法[23]。 我们的神经网络模型的早期迭代中通过浅层网络模拟了这种用户行为矩阵分
解,但是只对用户的之前的观看记录做了embedding。从这个角度来看,我们的方法可以被看作是因式分解技术的非线性泛
化。
3.1 用分类做推荐
我们提出用极端多类分类做推荐,预测问题就变成了:对于用户U和上下文C,把语料库V中的数百万个视频(分类)i,在时间
t处做准确的分类, u代表了user & context对的高维embedding,vi 代表各个候选视频的embedding.
在这个设定中,embedding仅仅是稀疏实体(单个视频,用户等)到实数密集向量的映射。 深层神经网络的任务是根据用户的
历史和上下文来学习用户的embedding,这对于用softmax分类器来区分视频是有用的。
虽然YouTube上存在明确的反馈机制(大拇指向上/向下,产品内置调查等),但是我们这里使用观看记录的隐式反馈[16]来训
练模型,其中看完了视频的用户是一个正例。 这个选择是基于在数量级上可用的隐式用户历史更多,允许我们在尾部进行深度
推荐,而显式反馈是非常稀疏的。
有效的极端多分类
为了有效地训练这种具有数百万类的模型,我们依靠一种技术从背景分布(“候选抽样”)中抽样负类,然后通过重要性权重校
正这个抽样[10]。 对于每个例子,对于真实标签和样本负类,交叉熵损失被最小化。 在实践中,对几千个负样本进行采样,速
度相当于传统softmax的100倍以上。一个流行的替代方法是分层softmax [15],但我们不能实现与之可比的准确性。 在分层
softmax中,遍历树中的每个节点包括区分通常不相关的类集合,使得分类问题更加困难并且性能更低下。
在提供推荐服务时,我们需要计算最可能的N个类(视频),以便选择前N个呈现给用户。 在数十毫秒的严格服务延迟下对数
百万个视频进行评分,需要使用和分类数量呈亚线性的近似评分方案。以前的YouTube推荐系统依赖hashing[24],这里描述的
分类器使用类似的方法。 由于在服务时间不需要对来自softmax输出层进行似然校验,所以评分问题减少到可以使用通用库的
点积空间中的最近邻搜索[12]。 我们发现A / B结果对最近邻搜索算法的选择不是特别敏感。
3.2 模型架构
受连续词袋语言模型(CBOW)的启发[14],我们以固定词汇表学习每个视频的高维映射(embedding),并将这些高维映射
(embedding)喂给前馈神经网络。用户的观看历史由稀疏的视频ID构成的长度可变的序列表示,其通过embedding被映射成
稠密向量表示。神经网络的输入需要是固定大小的稠密矩阵,简单的将用户的所有历史观看视频ID的embedding做平均,其效
果在几种策略(相加、分量最大等等)中效果最好。
重要的是,embedding通过正常的梯度下降反向传播更新与所有其他模型参数一同学习。 特征被连接成一个宽的第一层,随后
是几层完全连接的修正线性单元(ReLU)[6]。 图3显示了包含其他非视频特征的一般网络架构。
3.3 异构信号
使用深层神经网络作为矩阵分解的一般化的一个关键优点是任意连续和分类特征可以容易地添加到模型中。搜索历史与观看历
史记录被同等对待——每个查询词都被切分为一元和二元的,并且每个字都被embedded。一旦平均之后,用户的切分并
embedded的查询就代表了一个概括的稠密搜索历史。 人口统计特征对于提供先验是重要的,使得推荐对于新用户来说是合理
的。 用户的地理区域和设备被embedded和连接。简单的二值和连续特征,例如用户的性别,登录状态和年龄作为归一化为
[0,1]的实数值直接输入到网络中。
“样本年龄”特征 (视频已上传的时长)
每秒有许多长达若干小时的视频被上传到YouTube。 推荐这些最近上传(“新鲜”)的内容对于作为产品的YouTube极为重要。
我们经常发现用户喜欢新鲜的内容,虽然没有损失相关性。 除了要第一优先保障简单的推荐给用户想要观看的新视频的之外,
还存在引导绑定和传播病毒内容的关键次要现象[11]。机器学习系统往往表现出对过去的隐含偏差,因为他们用历史样本训练
模型来预测未来的行为。视频流行度的分布是非常不稳定的,但是由我们的推荐器产生的语料库的多项分布将反映在几周的训
练窗口中的平均观看可能性。 为了纠正这一点,在训练的时候我们将训练样本的年龄作为一个特征。 在推荐系统提供服务的
时候,这个特征设置为零(或绝对值比较小的负数),以反映模型正在训练窗口的末端进行预测。
图4演示了这种方法对任意选择的视频的有效性[26]。
3.4 正负样本和上下文选择
强调一下,推荐通常涉及解决替代问题并将结果转移到特定上下文。 一个典型的例子:我们通常假设准确的预测分数才能达成
高效的电影推荐[2]。 我们发现,这种替代学习问题的选择在A / B测试中的性能具有极大的重要性,但是很难用离线实验来衡
量。
训练样本要用youtube上的所有视频观看记录,而不只是我们的推荐的视频的观看记录。否则,面对新视频的时候很难推荐,
并且推荐器会过度偏向exploitation(这里的exploitation是针对exploration来讲的)。如果用户不是在我们的推荐场景发现新视
频,我们希望能够快速的通过协同过滤将这种发现传播给其他人。另外一个提升线上衡量指标的感悟是为每个用户生产固定数
量的训练样本,在损失函数中所有用户的权重一样。这能防止一部分非常活跃的用户主导损失函数值。
有点反直觉的是,必须非常小心地保留来自分类器的信息,以防止模型利用网站的结构和过度拟合替代问题。 想象一下这种情
况,一个用户刚刚搜索查询了一个词“taylor swift”。因为我们的问题是预测下一个观看的视频,一个分类器拿到这个搜索关键词
信息的之后,会预测最有可能被观看的视频肯定是出现在“taylor swift”搜索结果页上的视频。想都不用想,用用户最后一次搜索
的结果页作为首页的推荐结果效果非常差。通过丢弃搜索信息的顺序,用无序的词袋表示搜索查询,分类器就无法直接感知正
负样本的来源了。视频的自然消费模式通常导致非常不对称的共同观看概率。 剧集系列通常是顺序地观看,并且用户经常是先
发现最广泛流行的流派的艺术家的视频,然后才专注于较小众的。因此,我们发现预测用户的下一个观看视频的效果要好得
多,而不是预测随机推出的视频(图5)。 许多协同过滤系统隐式地从历史观看记录中随机拿出来一个作为正样本来预测它,
其余的历史观看记录作为上下文(5a)。这样其实泄露了未来的信息,并且忽略了任何非对称的消费模式。相反,我们是从用
户的历史视频观看记录中随机拿出来一个作为正样本,然后只用这个视频之前的历史观看记录作为输入(5b)。
3.5 特征和深度实验
添加特征和深度显著提高了对保留数据的准确性,如图6所示。
在这些实验中,有1M个视频和1M个搜索词的词表,最多50个视频和50个最近的搜索被映射成256 维的float数组。softmax层输
出了一个针对1M个视频分类的多项式分布,每个视频分类对应一个256维的向量。模型基于所有youtube用户数据进行训练,
直至收敛。网络结构呈一个常见的塔状,底部的网络最宽,每往上一层节点数减半。深度为0的网络和之前的推荐系统非常相
似,是一个高效的线性分解公式。直到收益消失或者很难收敛之前,不断的增加宽度和深度。
深度为0:这时网络就是一个把连接起来的输入层转换一下,和softmax的256维输出对应起来
深度为1:第一层 256个节点,激活函数 是ReLU (rectified linear units 修正线性单元)
深度为2:第一层512个节点,第二层256个节点,激活函数都是ReLU
深度为3:第一层1024个节点,第二层512个节点,第三层256个节点,激活函数都是ReLU
......
4.排序
排序的任务是用展现数据,校正给特定用户生产的候选集预测顺序。比如说,一个用户本来很可能会看一个给定的视频,但是
因为首页上点赞图片的展现而不会去点这个视频。在排序阶段,我们使用了视频和用户及其关系的很多其他的特征,因为排序
阶段只有几百个候选视频,而候选集生成阶段有上百万个。不同数据源产生的候选集的分数是不能直接相比的,在这一点上来
说排序是非常重要的。