Deep Neural Networks for YouTube Recommendations

摘要

Youtube是规模最大,最复杂的工业推荐系统之一。本文从高维度描述了该推荐系统和深度学习带来的显著影响。首先,我们描述了一个深度候选生成模型,然后描述了一个排序模型。我们同样从设计、迭代、维护一个有重大面向用户影响力的大型推荐系统的实践中分享经验和见解。

1.介绍

YouTube是世界上最大的创建、分享和发现视频内容的平台。YouTube的推荐负责帮助超过10亿用户从不断增长的视频语料库中发现个性化的内容。在本文中,我们将重点讨论深度学习最近对YouTube视频推荐系统产生的巨大影响。

从三个主要层面看,Youtube视频推荐任务是极具挑战性的:

1.规模:许多现存的在小规模数据上有效的推荐算法在我们的数据上无法正常工作。高效的分布式学习算法和服务系统对于Youtube的庞大客户量和数据库是很重要的。

2.新鲜度(freshness不知道怎么翻比较好):因为每秒都有用户上传许多视频,所以Youtube有一个动态的资料库。推荐系统应该能够及时做出反应对用户刚上传的视频进行建模。平衡新上传的视频和早就上传过的视频可以类比为探索和开发的关系进行理解。

3.噪声:因为其稀疏性和不可观测的外部因素,Youtube历史用户的信息在本质上是不可预测的。因此我们很难能收集到用户满意度的ground truth,而通常是带有噪声的隐式反馈信号。另外,与内容相关联的元数据结构不佳,没有良好定义的本体。我们的算法要求对训练数据的这些特征具有鲁棒性。

Youtube还是谷歌众多领域产品中国较早实现基本范式转换的产品,即开始使用深度学习作为所有学习问题的通用方案。(当时的背景是TensorFlow刚开源2016年)

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

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

2.系统概述

推荐系统的总体建构如下图所示,由一个候选生成模型和一个排序模型组成。

候选生成网络从用户的历史行为中获取事件作为输入,并且从大资料库中抽取数百个视频组成子集。这些候选对象被期望很精确的与用户相联系。候选生成网络通过协同过滤提供广泛个性化。用户之间的相似度可以被表示为各种粗糙的特征,比如看过的视频的id号,搜索过的词条,或者模型图(demographic)。

列出一些最佳推荐需要精细的表示来区分具有高召回率(recall)的候选对象的相对重要性。排序网络通过使用描述视频和用户的丰富特征集的期望目标函数来给候选对象分配一个分数来完成上述任务。得分最高的视频将会推荐给用户。

两阶段的推荐方法允许我们从一个非常大的库(数百万)视频中提出推荐,同时仍然确定出现在设备上的少量视频是个性化的,并吸引用户。此外,这种设计能够混合由其他源生成的候选源,如在早期工作[3]中描述的候选源。

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

3.候选对象生成

在候选对象生成过程中,巨大的YouTube语料库被筛选为数百个可能与用户相关的视频。

这里描述的推荐器的前身是一种在秩损失[23]下训练的矩阵分解方法。我们的神经网络模型的早期迭代模拟了只嵌入用户观看记录的浅层网络的这种因子分解行为。从这个角度来看,我们的方法可以看作是因子分解技术的非线性推广。

分类中的推荐

我们将推荐看成极端的多分类问题,其中预测问题成为了基于用户U和上下文C的语料库V中数百万个视频i(类别数)中特定的视频观看wt的精确分类,以下公式:

(Latex还不会只能截图)

 表示用户的高维嵌入和上下文对;

表示候选视频的高维嵌入 ;

在这个公式下,用户和候选视频都是稀疏实体的映射,变成稠密向量。深度神经网络的任务是学习用户嵌入作为上下文和观看历史的嵌入,用softmax分类器区分视频。

尽管Youtube上已经存在显式的反馈机制(点赞、反对、或者调查问卷等),我们还是采用基于用户观看记录的隐式反馈来训练模型,一个积极例子就是用户完整观看了一个视频。

这种选择是由于用户隐式历史观看记录的数量级更大,允许我们在显式反馈非常稀少的尾部深层依然能够进行推荐。

高效的极度多分类

为了高效的训练我们这个有百万为数量级的类的模型,我们依赖一种从背景分布中抽取负类的技术(候选采样),然后通过重要性加权[10]对该抽样进行校正。对于每个样本,真实标签和采样的负类的交叉熵损失被最小化。在实践中,采样了数千个负类样本,比传统的softmax加速了100多倍。一种流行的替代方法是分层softmax,但我们没有达到相当的精度。在分层的softmax中,遍历树中的每个节点涉及到区分通常不相关的类集,这使得分类问题更加困难,并降低了性能。

 在服务时间内,我们需要计算最有可能的N个类(视频),以便选择前N个类呈现给用户。在数十毫秒的严格服务延迟下对数百万项进行评分需要类数的近似评分方案。YouTube以前的系统依赖于哈希[24],这里描述的类标识符使用了类似的方法。由于在服务时不需要从softmax输出层校准的可能性,评分问题退化为了点积空间中的最近邻搜索,通用库可以使用[12]。我们发现(A/B结果)对最近邻搜索算法的选择不是特别敏感。

  PS:A/B Test:A/B测试(也称为分割测试桶测试)是一种将网页或应用程序的两个版本相互比较以确定哪个版本的性能更好的方法。AB测试本质上是一个实验,其中页面的两个或多个变体随机显示给用户,统计分析确定哪个变体对于给定的转换目标(指标如CTR)效果更好。

(可以码一下 下篇文章了解一下~)

3.2 模型架构

受到语言模型中连续词袋的启发,我们学习了在固定词汇表中每一个视频的高维嵌入,然后将这嵌入反馈到一个前馈神经网络中。

用户的观看历史由一个变长的稀疏视频id序列表示,该序列通过嵌入映射为一个稠密向量。

这个网络需要固定尺寸的输入,并且简单的平均在几种策略(max,sum, compoent-wise)中表现最好的嵌入。更重要的是,这个嵌入表示可以同时与模型的其他参数通过简单的梯度下降共同学习。特征就在这样的网络中被联系提取起来(第一层投射到高维,然后通过一些全连接层和ReLU)。下图展示了这种网络的一般架构。

深度候选生成模型架构显示嵌入的稀疏特征与密集的特征连接。在连接前对嵌入进行平均,将可变大小的稀疏id袋转换为适合于输入隐藏层的固定宽度向量。所有隐藏层都已完全连接。在训练中,通过对采样的softmax输出的梯度下降,使交叉熵损失最小。在服务时,执行一个近似的最近邻查找,以生成数百个候选视频推荐。

3.3 异构信号

使用深度神经网络作为矩阵分解的推广的主要有点事,任意的连续和分类特征可以很容易的添加到模型中。搜索历史记录的处理方式类似于观看历史,每一次查询都被标记为单元组或双元祖,然后每个标记都被嵌入。一旦经过平均,用户的标记化嵌入就代表一个汇总了的稠密查询历史向量。

人口统计学特征对于提供先验知识非常重要。用户的地理位置和设备信息是嵌入链接的。其他简单的特征,比如用户的性别、登入状态、年龄经过归一化后被直接输入网络。

"样本年龄"特征

每秒都有许多小时时长的视频上传到YouTube。推荐这个最近上传的(“新鲜”)内容对于YouTube作为一种产品是极其重要的。我们一直观察到,用户更喜欢新鲜的内容,尽管不是以牺牲相关性为代价。除了简单地推荐用户想要观看的新视频的一级效应外,还有一个关键的次要现象,即引导和传播病毒内容[11]。

机器学习系统通常表现出对过去表现出隐性的偏见,因为它们被训练从历史例子中预测未来的行为。视频流行度的分布是高度非平稳的,但我们的推荐者产生的语料库上的多项分布将反映在几周的训练窗口内的平均观看可能性。为了纠正这一点,我们将训练示例的年龄作为训练期间的一个特征提供。在服务时间时,该特性被设置为零(或略负),以重新预测模型在训练窗口的最后正在做出预测。

3.4 标签和上下文选择

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

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

反直觉的是,必须非常小心地保留分类器中的信息,以防止模型利用站点的结构或过度拟合替代问题。

一个例子是用户刚刚搜索了泰勒斯威夫特的视频,由于我们的模型被用来预测下一个观看的视频,给出这些信息的分类器将预测最有可能被观看的视频是那些出现在“泰勒斯威夫特”搜索结果页面上的视频。令人不奇怪的是,将用户当前观看的视频再度推荐的效果非常差。通过丢弃序列信息并用无序令牌包表示搜索查询,分类器不再直接知道标签的来源。

视频的自然模式通常会导致非常不对称的共同观看概率。剧集通常是连续观看的,用户通常会发现艺术家是最受欢迎的类型,然后再关注较小的细分市场。因此,我们发现,预测用户的下一条观看视频的性能要比预测随机保留的视频要好得多(图5)。许多协作过滤系统通过保留一个随机项目并从用户历史记录中的其他项目中预测它,隐式地选择标签和上下文(5a)。这将泄露未来的信息,并忽略任何非对称的消费模式。相比之下,我们通过选择一个随机的视频来“回滚”用户的历史记录,并且只输入用户在保留了标签的视频(5b)之前所采取的操作。

选择模型的标签和输入上下文对离线评估具有挑战性,但对实时性能有很大的影响。在这里,实体事件是网络的输入特征,而空心事件◦被排除在外。我们发现,预测未来的观看视频(5b)在a/b测试中表现更好。在(5b)中,示例年龄表示为tmax−tN,其中tmax为训练数据中的最大观测时间。                                 

4.排序

排名的主要作用是使用印象数据来专门化和校准特定用户界面的候选预测。例如,用户通常可以以很高的概率观看给定的视频,但由于选择了缩略图图像,因此不太可能点击特定的主页印象。在排名过程中,我们可以获得更多描述视频和用户与视频的关系的功能,因为只有几百个视频被评分,而不是候选人一代的数百万分。排名对于整合得分不能直接比较的不同候选来源也是至关重要的。

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

深度排名网络架构描述了嵌入的分类特征(单价的和多价的),具有共享的嵌入和标准化连续特征的能力。所有图层都已完全连接。在实践中,数百个特性被输入到网络。 

4.1 特征表示

我们的特征与传统的分类特征和连续/序数特征的分类法相分离。我们使用的分类特性在基数上差异很大——一些是二进制的(例如用户是否登录),而另一些则有数百万个可能的值(例如用户的最后一次搜索查询)。特征根据它们是只贡献一个值(“单价值”)还是贡献一组值(“多价值”)进行进一步划分。单价分类特征的一个例子是被评分的印象的视频ID,而相应的多价特征可能是用户观看的最后N个视频ID的一个袋子。我们还根据它们是描述了物品的属性(“印象”)还是用户/上下文的属性(“查询”)来对特征进行分类。查询特征为每个请求计算一次,而为每个有评分的物品都要计算一次印象特征。

特征工程

我们通常在排名模型中使用数百个特征,大致平均分为分类特征和连续特征。尽管深度学习有望减轻手工制造特征的负担,但我们的原始数据的性质并不容易直接输入到前馈神经网络中。我们依然期望花费一定的特征工程资源将用户和视频数据转化为有用的特征。

主要的挑战是如何表示用户行为的时间性序列,以及这些行为如何与被评分的视频印象相关联。

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

描述过去视频印象频率的功能对于在推荐中引入“流失”也至关重要(连续的请求不会返回相同的列表)。如果一个用户最近被推荐了一个视频,但没有观看它,那么该模型将会在下一页加载时自然地降低这种印象。提供第二印象和观看历史是一种工程壮举,但对于产生响应性的建议是至关重要的。

嵌入分类特征

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

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

归一化连续特征

众所周知,神经网络对其输入[9]的缩放和分布非常敏感(由于过深的层数导致的梯度问题),而其他方法,如决策树的集合,对单个特征的缩放是不变的。我们发现适合的归一化对于连续特征的收敛非常重要。

实验设置和验证部分就不继续看了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值