《Deep Neural Networks for YouTube Recommendations》翻译

发布于 2022-11-24  281 次阅读


摘要

YouTube代表了现有的规模最大、最复杂的工业推荐系统之一。在本文中,我们对该系统进行了高水平的描述,并重点介绍了深度学习带来的巨大性能改进。本文根据经典的两阶段信息检索二分法进行分割:首先,我们详细介绍了一个深度候选生成模型,然后描述了一个单独的深度排名模型。我们还提供了从设计、迭代和维护一个具有巨大用户影响力的大规模推荐系统中获得的实际经验和见解。

引言

image-20221122191916225

YouTube是世界上最大的创作、分享和发现视频内容的平台。YouTube的推荐负责帮助超过10亿用户从不断增长的视频库中发现个性化的内容。在本文中,我们将重点讨论深度学习最近对YouTube视频推荐系统的巨大影响。图1展示了YouTube移动应用主页上的推荐。
从三个主要方面来看,推荐YouTube视频是极具挑战性的:

  • 规模:许多现有的推荐算法被证明在小问题上运行良好,但在我们的规模上却无法运行。高度专业化的分布式学习算法和高效的服务系统对于处理YouTube的庞大用户群和语料库至关重要。
  • 新鲜度:YouTube有一个非常动态的语料库,每秒钟有许多小时长度的视频被上传。推荐系统应该有足够的反应能力来模拟新上传的内容以及用户的最新行为。平衡新内容和成熟的视频可以从探索/开发的角度来理解。

在与谷歌其他产品领域的合作中,YouTube已经经历了一个根本性的范式转变,将深度学习作为几乎所有学习问题的通用解决方案。我们的系统建立在谷歌大脑[4]的基础上,它最近作为TensorFlow[1]被开源了。TensorFlow提供了一个灵活的框架,使用大规模的分布式训练来实验各种深度神经网络架构。我们的模型学习了大约10亿个参数,并在数以千亿计的样本上进行了训练。

与矩阵分解方法的大量研究相比[19],将深度神经网络用于推荐系统的工作相对较少。神经网络被用于推荐新闻[17]、引文[8]和评论评级[20]。协作过滤在[22]中被表述为一个深度神经网络,在[18]中被表述为自动编码器。Elkahky等人将深度学习用于跨域用户建模[5]。在一个基于内容的环境中,Burges等人将深度神经网络用于音乐推荐[21]。

本文的组织结构如下。第2节介绍了一个简单的系统概述。第3节更详细地描述了候选生成模型,包括它是如何被训练和用来部署推荐的。实验结果将显示该模型如何从深层的隐藏单元和额外的异质信号中获益。第4节详细介绍了排序模型,包括如何修改经典的逻辑回归来训练一个预测预期观看时间(而不是点击概率)的模型。实验结果将表明,在这种情况下,深度神经网络也是有帮助的。最后,第5节介绍了我们的结论和经验教训。

系统概览

image-20221122192015862

我们的推荐系统的整体结构如图2所示。该系统由两个神经网络组成:一个用于生成候选,另一个用于排序。

候选生成网络将用户的YouTube活动历史中的事件作为输入,并从一个大型语料库中检索出一个小的视频子集(数百个)。这些候选视频的目的是与用户普遍相关,并具有较高的精度。候选生成网络只通过协作过滤提供广泛的个性化。用户之间的相似性以粗略的特征表示,如视频观看的ID、搜索查询标记和人口统计学。

在列表中呈现几个 "最佳 "推荐,需要一个精细级别的表示,以区分具有高召回率的候选视频之间的相对重要性。排序网络模型通过使用描述视频和用户的丰富特征集,根据所需的目标函数给每个视频分配一个分数来完成这一任务。得分最高的视频会被呈现给用户,并按其得分进行排名。
这种两阶段的推荐方法使我们能够从一个非常大的视频语料库(数百万)中进行推荐,同时还能确定出现在设备上的少量视频对用户来说是个性化的和有吸引力的。此外,这种设计能够混合由其他来源产生的候选视频,例如早期工作[3]中描述的那些。

在开发过程中,我们广泛使用离线指标(精度、召回率、排名损失等)来指导我们系统的迭代改进。然而,为了最终确定一个算法或模型的有效性,我们依靠通过现场实验进行A/B测试。在现场实验中,我们可以测量点击率、观看时间和许多其他衡量用户参与度的指标的微妙变化。这一点很重要,因为现场A/B结果并不总是与离线实验相关。

候选生成

在候选生成过程中,巨大的YouTube语料库被筛选出数百个可能与用户相关的视频。这里描述的推荐器的前身是一个在等级损失下训练的矩阵分解方法[23]。我们的神经网络模型的早期迭代模仿了这种因式分解的行为,其浅层网络只嵌入了用户以前的观看记录。从这个角度来看,我们的方法可以被视为因子化技术的非线性泛化。

作为分类的推荐

我们把推荐看作是极端的多类分类,预测问题变成了根据用户和语境,在语料库的数百万个视频(类)中准确地对时间的特定视频观看进行分类。

其中代表用户、上下文对的高维 "嵌入",代表每个候选视频的嵌入。在这种情况下,嵌入只是将稀疏的实体(单个视频、用户等)映射到中的密集向量。深度神经网络的任务是学习用户嵌入,作为用户历史和背景的函数,这些嵌入对用softmax分类器区分视频是有用的。

虽然YouTube上存在明确的反馈机制(点赞/点踩,产品内调查等),但我们使用观看的隐性反馈[16]来训练模型,其中用户完整观看完一个视频就是一个正面的例子。这一选择是基于可用的隐性用户历史的数量级,使我们能够在显性反馈极为稀少的尾部产生推荐。

加速超大型多类别分类

为了有效地训练这样一个有数百万个类的模型,我们依靠一种技术,从背景分布中抽出负类("候选抽样"),然后通过重要性加权来纠正这种抽样[10]。对于每个例子来说,交叉熵损失对于真实标签和抽样的负类都是最小的。在实践中,有几千个负数被抽样,相当于比传统的softmax加速100倍以上。一种流行的替代方法是分层softmax[15],但我们无法达到类似的准确性。在分层softmax中,遍历树中的每个节点都涉及到对通常不相关的类集的判别,这使得分类问题更加困难,并降低了性能。

在线上提供服务的时候,我们需要计算出最有可能的N个类(视频),以便选择前N个类呈现给用户。在严格的几十毫秒的服务延迟下,对数百万个项目进行评分,这需要一个近似的评分方案,其数量与类的数量成亚线性关系。YouTube以前的系统依赖于散列[24],这里描述的分类器使用了类似的方法。由于在服务时不需要来自softmax输出层的校准似然,评分问题减少为点积空间中的近邻搜索,可以使用通用的库[12]。我们发现,A/B结果对近邻搜索算法的选择不是特别敏感。

模型结构

image-20221122200143470

受连续词袋语言模型[14]的启发,我们为每个视频学习固定词汇中的高维嵌入,并将这些嵌入送入一个前馈神经网络。用户的观看历史由一串长度可变的稀疏视频ID表示,通过嵌入映射到密集的向量表示。该网络需要固定大小的密集输入,在几种策略(求和、最大池化等)中,简单平均池化嵌入的效果最好。重要的是,嵌入是通过正常的梯度下降反向传播更新与所有其他模型参数共同学习的。特征被串联到一个宽的第一层,然后是几层全连接的整流线性单元(ReLU)[6]。图3显示了一般的网络结构和下面描述的额外的非视频观看特征。

异质性信号

使用深度神经网络作为矩阵分解的一般形式的一个关键优势是,任意的连续和分类的特征可以很容易地添加到模型中。搜索历史的处理与观看历史类似,每个查询被标记为unigrams和bigrams,每个标记被嵌入化。一旦平均化,用户的标记化、嵌入的查询就代表了一个总结的密集的搜索历史。人口统计学特征对于提供先验数据非常重要,这样才能使推荐对新用户有合理的表现。用户的地理区域和设备被嵌入并串联起来。简单的二进制和连续的特征,如用户的性别、登录状态和年龄,作为归一化为[0, 1]的实际值直接输入网络。

Example Age特征

每秒钟都有时长数小时的视频上传到YouTube。推荐这些最近上传的("新鲜")内容对于YouTube这个产品来说是非常重要的。我们一直观察到,用户更喜欢新鲜的内容,尽管并不是以牺牲相关性为代价。除了简单地推荐用户想看的新视频的一阶效应外,还有一个关键的二阶现象,即引导和传播病毒性内容[11]。
机器学习系统经常表现出对过去的隐性偏见,因为它们被训练为从历史实例中预测未来行为。视频流行度的分布是高度非稳态的,但我们的推荐器产生的语料库上的多项式分布将反映几周内训练窗口的平均观看可能性。为了纠正这一点,我们在训练中把训练例子的age作为一个特征。在线上提供服务的时候,这个特征被设置为零(或略微为负),以反映模型是在训练窗口的最后阶段进行预测的。
图4展示了这种方法在一个任意选择的视频上的效果[26]。

image-20221122201351078

标签和上下文选择

image-20221122203729967

需要强调的是,推荐通常涉及解决替代问题并将结果转移到特定的上下文中。一个典型的例子是假设准确预测评级会导致有效的电影推荐 [2]。我们发现,这个替代学习问题的选择对 A/B 测试的性能非常重要,但很难通过离线实验来衡量。

训练的例子是从所有的YouTube观看(甚至是那些嵌入其他网站的观看)中产生的,而不仅仅是我们产生的推荐上的观看。否则,新的内容就很难浮出水面,推荐者就会过分偏向于利用。如果用户通过我们推荐以外的方式发现了视频,我们希望能够通过协作过滤将这种发现快速传播给其他人。另一个改善实时指标的关键见解是为每个用户生成固定数量的训练实例,有效地将我们的用户在损失函数中加权平均。这就防止了一小批高度活跃的用户主导损失的情况。

有点反直觉的是,必须非常小心地从分类器中保留信息,以防止模型利用网站的结构和过度拟合代用问题。作为一个例子,考虑到用户刚刚发出 "泰勒-斯威夫特 "的搜索查询。由于我们的问题是预测下一个被观看的视频,给定的分类器将预测最有可能被观看的视频是那些出现在 "泰勒-斯威夫特 "相应搜索结果页面上的视频。无可挑剔的是,将用户的最后一次搜索页面复制为主页建议的效果非常差。通过摒弃序列信息,用一个无序的标记袋表示搜索查询,分类器不再直接知道标签的来源。

视频的自然消费模式通常导致了非常不对称的共同观看概率。剧集通常是按顺序观看的,用户通常在一个流派中发现艺术家,从最广泛的流行开始,然后再关注较小的niches。因此,我们发现预测用户的下一次观看的性能要好得多,而不是预测随机保留的观看(图5)。许多协同过滤系统隐含地选择了标签和上下文,从用户历史上的其他项目中选出一个随机项目并预测它(5a)。这泄露了未来的信息,并且忽略了任何不对称的消费模式。与此相反,我们通过选择一个随机的表和只输入用户在被保留的标签表之前采取的行动来 "回滚 "用户的历史(5b)。

特征和深度的实验

image-20221122203911762

如图6所示,增加特征和深度可以明显提高测试数据的精度。在这些实验中,由100万个视频和100万个搜索标记组成的词汇被嵌入了256个浮点数中,每个浮点的最大袋子大小为50个最近的观看和50个最近的搜索。softmax层在相同的1M个视频类别上输出一个维度为256的多项式分布(可以认为是一个单独的输出视频嵌入)。这些模型被训练到在所有YouTube用户上收敛,对应于数据上的几个epoch。网络结构遵循常见的 "塔式 "模式,其中网络的底部最宽,每个连续的隐藏层的单元数量减半(类似于图3)。深度为零的网络实际上是一个线性分解方案,其表现与前代系统非常相似。宽度和深度不断增加,直到递增的好处减少,收敛变得困难。

  • Depth 0: A linear layer simply transforms the concate- nation layer to match the softmax dimension of 256
  • Depth 1: 256 ReLU
  • Depth 2: 512 ReLU → 256 ReLU
  • Depth 3: 1024 ReLU → 512 ReLU → 256 ReLU
  • Depth 4: 2048 ReLU → 1024 ReLU → 512 ReLU → 256 ReLU

排序层

排序模型的主要作用是使用印象数据来专门化和校准对特定用户界面的候选预测。例如,一个用户可能会以很高的概率普遍观看一个给定的视频,但由于缩略图的选择,不太可能点击具体的主页印象。在排名过程中,我们可以获得更多描述视频和用户与视频关系的特征,因为只有几百个视频被打分,而不是在候选生成过程中给几百万视频打分。排名对于组合不同的候选来源也是至关重要的,因为这些来源的分数是不能直接比较的。

我们使用一个深度神经网络,它的结构与候选生成类似,使用逻辑回归给每个视频印象分配一个独立的分数(图7)。然后,视频列表按照这个分数进行排序,并返回给用户。我们的最终排名目标函数是根据现场A/B测试结果不断调整的,但通常是每个印象的预期观看时间的一个简单函数。按点击率排名往往会促进用户不完成的欺骗性视频("点击诱饵"),而观看时间能更好地捕捉到参与度[13, 25]。

特征表示

我们的特征是用传统的分类法来划分的,即分类特征和连续数值特征。我们使用的分类特征在其ji shu上2有很大的不同,有些是二进制的(例如,用户是否登录),而其他的有数百万个可能的值(例如,用户的最后一次搜索查询)。特征还可以根据它们是否只贡献一个单一的值("单价")或一组值("多价")来进一步划分。单价分类特征的一个例子是被打分的印象的视频ID,而相应的多价特征可能是用户最后观看过的N个视频ID的集合。我们还根据特征是描述项目的属性("印象")还是描述用户/环境的属性("查询")来进行分类。查询特征在每个请求中计算一次,而印象特征则为每个项目的得分计算。

特征工程

我们通常在我们的排名模型中使用数百个特征,大致上在分类和连续之间平均分配。尽管深度学习有望减轻手工设计特征的负担,但我们的原始数据的性质并不容易被直接输入前馈神经网络中。我们仍然花费了大量的工程资源,将用户和视频数据转化为有用的特征。主要的挑战是代表用户行为的时间序列,以及这些行为与正在评分的视频印象之间的关系。

我们观察到,最重要的信号是那些描述用户以前与项目本身和其他类似项目的互动的信号,与其他人的广告排名经验相匹配[7]。作为一个例子,考虑用户与上传被评分视频的频道的过去历史,用户从这个频道看了多少视频?用户最后一次观看这个主题的视频是什么时候?这些描述用户过去在相关项目上的行为的连续特征特别强大,因为它们在不同的项目上具有很好的概括性。我们还发现,将候选生成的信息以特征的形式传播到排序模型中是至关重要的,例如,哪些来源提名了这个候选视频?他们给出了什么分数?

描述过去视频印象频率的特征对于在推荐中引入 "扰动"也很关键(连续的请求不会返回相同的列表)。如果一个用户最近被推荐了一个视频,但没有观看,那么这个模型就会在下一次页面加载时自然地降低这个印象。提供最新的印象和观看历史是本文范围之外的工程特性,但对产生响应式推荐至关重要。

对类别特征进行嵌入

与候选生成类似,我们使用嵌入将稀疏的分类特征映射到适合神经网络的密集表征中。每个独特的ID空间("词汇表")都有一个单独的学习嵌入,其维度的增加大约与唯一值的数量的对数成正比。这些词汇表是在训练前通过一次数据建立的简单查找表。非常大基数的ID空间(例如视频ID或搜索查询术语)被截断,只包括前N个,然后根据它们在点击印象中的频率进行排序。词汇外的值被简单地映射到零嵌入。如同在候选人生成中一样,多价分类特征嵌入在被送入网络之前被平均化。

重要的是,同一ID空间中的分类特征也共享底层嵌入。例如,存在一个单一的视频ID全局嵌入,许多不同的特征都使用这个嵌入(印象中的视频ID,用户最后观看的视频ID,"种子 "推荐的视频ID,等等)。尽管有共享嵌入,但每个特征都被单独送入网络,以便上面的层可以学习每个特征的专门表示。共享嵌入对于提高泛化能力、加快训练速度和减少内存需求非常重要。绝大多数的模型参数都在这些高基数嵌入空间中,例如,嵌入在32维空间中的100万个ID的参数是全连接层2048单元宽度的7倍。

归一化连续特征

神经网络对其输入的比例和分布是非常敏感的[9],而另一种方法,如决策树的集合,对单个特征的比例是不变的。我们发现,对连续特征进行适当的归一化是收敛的关键。一个连续的分布为的连续特征经过数值缩放被转换为,使用累积分布使该特征在中平均分布,
这个积分是在训练开始前对数据进行一次计算的特征值的量值的线性插值来逼近的。

除了原始的归一化特征,我们还输入幂,允许网络轻松形成特征的超线性和亚线性函数,给予网络更多的表现力。我们发现,输入连续特征的幂,可以提高离线精度。

预测预期的观看时间

我们的目标是预测预期的观看时间,这些训练实例要么是正面的(视频印象被点击),要么是负面的(印象没有被点击)。正面的例子被注释为用户花了多少时间来观看视频。为了预测预期的观看时间,我们使用了加权逻辑回归技术,该技术是为此目的而开发的。

该模型是在交叉熵损失下用逻辑回归模型训练的(图7)。然而,积极的(点击的)印象是由观察到的视频观看时间加权的。负面的(未点击的)印象都接受单位权重。这样,通过逻辑回归学到的几率是,其中是训练例子的数量,是正面印象的数量,是第个印象的观看时间。假设正面印象的比例很小(在我们的案例中确实如此),学到的几率大约是,其中是点击概率,是印象的预期观看时间。由于很小,这个乘积接近于。对于推理,我们使用指数函数作为最终的激活函数来产生这些接近估计预期观看时间的几率。

隐藏层的实验

image-20221122213730992

表1显示了我们在不同的隐藏层配置下对第二天的保留数据所得到的结果。每个配置的数值("加权的,每个用户的损失")是通过考虑在一个页面上向用户展示的正面(点击)和负面(未点击)印象而得到的。我们首先用我们的模型对这两个印象进行评分。如果负面印象得到的分数比正面印象高,那么我们就认为正面印象的观看时间是错误预测的观看时间。加权后,每个用户的损失就是错误预测的观看时间的总量,占保持印象对的总观看时间的一部分。

这些结果表明,增加隐藏层的宽度可以改善结果,增加其深度也是如此。然而,代价是推理所需的服务器CPU时间。1024宽的ReLU和512宽的ReLU以及256宽的ReLU的配置给了我们最好的结果,同时使我们能够保持在我们的CPU预算之内。

对于1024→512→256的模型,我们尝试只输入归一化的连续特征,而不输入它们的power,这使损失增加了0.2%。在相同的隐藏层结构下,我们还训练了一个模型,其中正面和负面的例子被平均加权。不出所料,这使观察时间加权的损失急剧增加了4.1%。

结论

我们已经描述了我们用于推荐YouTube视频的深度神经网络架构,分为两个不同的问题:候选生成和排序。
我们的深度协同过滤模型能够有效地吸收许多信号,并对它们的互动进行层层深入的建模,优于之前在YouTube使用的矩阵分解方法[23]。在选择推荐的代用问题上,艺术多于科学,我们发现对未来观看的分类通过捕捉不对称的共同观看行为和防止未来信息的泄露,在直播指标上表现良好。从分类器中扣留歧视性信号对于取得良好的结果也是至关重要的,否则模型会过度适应代用问题而不能很好地转移到主页上。
我们证明了使用训练实例的age作为输入特征可以消除对过去的固有偏见,并使模型能够代表视频的流行的时间依赖行为。这改善了离线测试集的精度结果,并在A/B测试中大大增加了最近上传视频的观看时间。
排序是一个比较经典的机器学习问题,但我们的深度学习方法在观看时间预测方面的表现超过了以前的线性和基于树的方法。推荐系统尤其受益于描述用户过去对项目行为的专门特征。深度神经网络需要分类和连续特征的特殊表示,我们分别用嵌入和量化归一化来转换。深度层被证明可以有效地模拟数百个特征之间的非线性相互作用。
通过对正例的观看时间和负例的统一加权训练示例来修改逻辑回归,使我们能够学习与预期观看时间密切相关的几率。与直接预测点击率相比,这种方法在观看时间加权排名评估指标上的表现要好得多。


面向ACG编程