1.介绍
本文主要解决的三个挑战:
- 大规模的推荐场景,能够支持分布式训练和提供有效率的服务。
- 不断更新的新物料。
- 稀疏的用户行为,包含大量的噪声。
2.推荐系统
文章包含推荐系统的两阶段模型:召回和排序。
召回网络根据用户的历史行为从视频库中检索几百个候选视频,这些视频被认为有很高的准确率与用户相关。候选集的生成是根据粗粒度的个性化—协同过滤生成的。用户之间的相似性是以粗粒度特征表示的,例如视频观看ID,搜索query和统计特征。
3.召回
在候选生成期间,庞大的YouTube语料库被缩小到可能与用户相关的数百个视频。前身是一种矩阵分解的召回方法。我们早期的神经网络模型通过学习用户历史观看的嵌入,模仿了这种因子分解行为。从这个角度来看,我们的方法可以看作是因子分解技术的非线性推广。
3.1 推荐到分类
我们将推荐视为极端多类分类问题,其中预测问题变为准确地将特定视频分类问题。
基于用户 U 和上下文 C 在时间 t t t,指定视频 w t w_t wt为视频 i i i的概率:
P ( w t = i ∣ U , C ) = e v i u ∑ j ∈ V e v j u P(w_t=i|U,C)=\frac{e^{v_iu}}{\sum_{j\in V}e^{v_ju}} P(wt=i∣U,C)=∑j∈Vevjueviu
V V V指语料库,其中 u ∈ R N u∈R^N u∈RN 表示用户向量,上下文对以及候选视频 v j ∈ R N v_j∈R^N vj∈RN 的高维向量。
深度神经网络的任务是学习用户嵌入:通过一个将用户历史和上下文映射为用户嵌入的函数和 softmax 分类器。
虽然YouTube上存在显式反馈机制(点赞/取消赞,产品调查),但我们使用观看的隐含反馈来训练模型,其中用户完成视频是一个正样本。这个选择是基于可用的用户历史的数量级更多,这能够产生位于长尾的视频推荐,而显式反馈对长尾视频的数据是极其稀疏的。
为了有效地训练这样一个数百万个类别的模型,我们依赖于一种从背景分布随机负采样的方法,并通过重要性加权对其进行校正。对于每个示例,最小化真实标签和负采样交叉熵损失。
实际上,每次取几千个负例,速度是传统softmax速度的100倍以上。流行的替代方法是层次Softmax,但我们未能实现可比的准确性。在层次Softmax中,遍历树中的每个节点涉及到区分通常无关的分类,从而使分类问题变得更加困难,降低了性能。
在服务时,我们需要计算最可能的N个类(视频),以便选择顶部N个显示给用户。在严格的几十毫秒的服务延迟条件下为数百万项评分,需要近似评分方案,其类的数量呈线性。YouTube先前的系统依赖于哈希,这里的分类器也使用类似的方法。由于不需要在服务时间内使用softmax输出似然,因此评分问题减少到了在点积空间中的最近邻搜索,其中可以使用通用目的库。我们发现在A / B测试结果对最近邻居搜索算法的选择不太敏感。
3.2 模型结构
受连续词袋语言模型的启发,我们为固定词汇中的每个视频学习高维度嵌入,并将这些嵌入馈送到前馈神经网络中。用户的观看历史通过稀疏视频ID的可变长度序列表示,并通过嵌入映射到稠密矢量表示。网络要求固定的密集型输入,只需简单地平均嵌入就表现得最好,这是几种策略(求和、逐元素最大值等)中的一种。重要的是,嵌入是通过正常的梯度下降反向传播更新与其他所有模型参数一起联合学习的。特征连接到宽的第一层,后面跟着几个完全连接的Rectified Linear Unit (ReLU)层。结构如下:
3.3 特征
使用深度神经网络作为矩阵分解的一般化实现方式的一个关键优势是:可以添加任意连续和分类特征到模型中。搜索历史与观看历史类似,每个query都分为单个单词和双字,并且每个标记都被嵌入。通过求平均值,用户的标记化、嵌入的查询就代表了摘要的密集搜索历史。人口统计数据很重要,因为它为新的用户提供先验,使推荐行为合理。用户的地理位置和设备被嵌入并连接起来。简单的二进制和连续特征,如用户的性别、登录状态和年龄,直接作为实值输入到网络中,并归一化到[0, 1]。
特殊特征:样本年龄 Example Age
每秒上传到YouTube的视频很多。对于YouTube作为产品来说,推荐这种最近上传的新鲜内容是非常重要的。我们一致认为,用户喜欢新鲜内容,但并不牺牲相关性为代价。除了仅仅推荐用户想要观看的新视频的第一个效应外,还有一个至关重要的次要现象,即启动和传播病毒内容。
机器学习系统经常对过去表现出内在偏差,因为他们是根据历史序列来预测未来。视频流行度的分布是非稳定的,但是推荐者产生的语料库的多项式分布会反映几周内训练窗口内的平均观看可能性。为了纠正这一点,我们在训练期间将训练例子的年龄作为特征输入。在服务时间,这个特性设置为零(或者稍微负),以反映模型正在训练窗口的尽头进行预测。
图4展示了这种方法在一个随意选择的视频上的有效性。
这里并没有说明“样本年龄”这个特征怎么计算的。
3.4 label和上下文选择
要强调的是,推荐往往涉及解决一个代理问题并将结果转移到特定上下文中。一个经典的例子假设:预测分数越准确,电影推荐更有效。我们发现,这个代理学习问题的选择对A / B测试中的性能有很大影响,但在离线实验中很难衡量。
训练样例是根据所有的YouTube观看生成的(嵌入其他网站的观看)而不是我们生成的推荐结果。否则,新内容很难出现,并且有些推荐人(更活跃)的数据倾向于过度利用。如果用户通过我们推荐以外的方式发现视频,我们希望通过协同过滤将这一发现快速传播给其他人。
另外一个提高线上指标的关键trick是为每个用户生成固定数量的训练样本,有效地在损失函数中平等对待我们的用户。这防止了一小批高度活跃的用户主导损失。
有点违反直觉的是,必须小心地保留信息,以防止模型利用网站的结构过度拟合代理问题。例如,考虑用户刚刚搜索了"tay-lor-swift",预测用户下一个观看的视频,给定该信息的分类器将预测最有可能观看的视频是,出现在相应的搜索结果页面上的“泰勒·斯威夫特”。无限制地再现用户的上次搜索页面作为主页推荐的表现非常糟糕。
通过丢弃序列信息,并使用无序的搜索query来表示搜索,分类器不再直接知道之前的label。
视频的自然消费模式通常会导致非常不对称的共同观看概率。观看序列包括
通常按顺序观看,用户发现艺术家,开始于最受欢迎的流派,然后专注于较为小众的。两种采样的性能对比:预测用户的下一次观看 VS 预测一个随机抽取的观看。如下图:
许多协同过滤系统隐式地随机选择item,然后通过用户历史的其他item预测它。这会泄露未来的信息,并且忽略了非对称的消费模式。作为对比,我们回滚用户的消费历史,随机选择item,但只输入用户之前的序列。
3.5 特征和模型深度实验
增加特征和深度显著提高了预测的精度,如图6所示。在这些实验中,使用了100万个视频和100万个搜索令牌的词汇表,每个dnn超参为256,在最大袋大小为50个最近观看和50个最近搜索的情况下。softmax层输出的是一个100万个视频类别的多元分布,其维度为256(可以认为是一个单独的输出视频嵌入)。这些模型一直训练到YouTube的所有用户收敛,对应于对数据进行的几个时期。网络结构遵循一个常见的“塔”模式,其中网络的底部最宽,每一层隐藏层都将单元数量减半(类似于图3)。深度为零的网络实际上是一种线性分解方案,其表现类似于之前的系统。添加宽度(features)和深度(dnn层数)直到边际收益递减以及难以收敛。
4.排序
排序的主要作用是利用印象数据来专门化并校准针对特定用户界面的候选预测。例如,用户可能通常以高概率观看某个视频,但由于缩略图图片的选择,不太可能点击特定的主页印象。在排序过程中,我们可以访问更多描述视频和用户与视频关系的特性,因为只有几百个视频正在评分,而不是在候选生成中得分的数百万个视频。排序对于将分数不能直接比较的不同候选源进行集成也至关重要。我们使用与候选生成类似的架构的深度神经网络,使用逻辑回归(图7)为每个视频印象分配一个独立的分数。然后按此分数对视频列表进行排序,并将其返回给用户。我们的最终排序目标是根据实时A/B测试结果不断调整的,但通常是每个印象预期观看时间的一个简单函数。通过点击率进行排序往往会推广欺骗性的视频,用户没有完成(“点击诱饵”),而观看时间更好地捕捉到了参与度。
4.1 特征表示
我们的特征按照传统的分类学和连续/顺序特征的分类方式进行了分离。我们使用的类别特征在基数上差异很大——有些是二进制的(例如用户是否登录),而另一些则有数百万种可能的值(例如用户的最后一条搜索查询)。特征进一步根据它们仅贡献单个值还是多个值进行分割。单类别特征的一个例子是被评分的印象的视频ID,而相应的多类别特征可能是用户最近观看的N个视频ID的集合。我们还根据特征是描述item的属性还是描述用户/上下文的属性来分类特征。Query特征每请求计算一次,而印象特征为每个被打分的项目计算。
特征工程
我们通常在我们的排序模型中使用数百个特征,均匀地分为类别和连续特征。尽管深度学习承诺通过手工减轻工程特征的负担,但是我们原始数据的本质并不容易直接输入前馈神经网络。我们仍然投入了大量的工程资源,将用户和视频数据转换为有用的特征。主要挑战在于表示用户操作的时间序列以及这些操作如何与正在排序的视频印象相关。
我们发现最重要的信号是那些描述用户之前与项目本身的交互以及其他相似项目的信号,这与其他人在广告排序方面的经验相吻合。例如,考虑用户过去与上传被打分视频的频道的历史-用户观看了这个频道多少视频?用户上次观看该主题的视频是什么时候?这些描述过去用户在相关项目上的连续动作的特征特别强大,因为它们很好地适用于不同的项目。我们还发现,以特征形式表示召回来源向排序传递信息至关重要,例如哪些来源召回了这个视频?分数是多少?
描述过去视频曝光频率的特征对于引入推荐中的“滚动”(连续请求不会返回相同的列表)也至关重要。如果用户最近被推荐了一个视频,但他们没有观看,那么模型自然会在下一页加载时降低这个印象的得分。提供最新的曝光和观看历史是一项工程壮举,超出了本文的范围,但对于产生响应式推荐至关重要。
类别特征embedding
与候选生成类似,我们使用嵌入将稀疏分类特征映射到适合神经网络的密集表示。每个唯一的ID空间(“词汇表”)都有一个单独的学习嵌入,其维数大致随唯一值的数量的对数增加。这些词汇表是在训练前遍历数据一次构建而成的简单的查找表。非常大的基数ID空间(例如视频ID或搜索查询词)只包括根据点击印象中频率最高的前N个。不在词汇表中的值只是映射到零嵌入。
重要的是,同一个ID空间中的分类特征共享底层嵌入。例如,存在一个全局的视频ID嵌入,许多不同的特征都在使用(视频印象的视频ID,用户最后观看的视频ID,建议的种子视频ID等)。虽然共享嵌入,每个特征都单独输入网络,以便上层可以为每个特征学习专门化的表示。共享嵌入对于提高泛化能力、加速训练和减少内存需求非常重要。绝大多数模型参数都是在这些高基数的嵌入空间中——例如,一个百万ID嵌入32维空间中的参数比全连接层2048单位宽的参数多7倍(321000000 / (20482048)=7.63)。
标准化连续特征
神经网络对输入的比例和分布极为敏感,而决策树等替代方法则不受单个特征比例的影响。在收敛过程中适当归一化连续特征是至关重要的。具有分布f的连续特征 x x x被转化为 x ~ \tilde{x} x~,通过缩放值,使得该特征在[0,1)范围内均匀分布, x ~ = ∫ − ∞ x d f \tilde{x} =\int_{-\infty}^x df x~=∫−∞xdf。这个积分在训练开始前通过一次遍历数据计算特征值的四分位数来进行线性插值。
除了原始归一化的特征 x ~ \tilde{x} x~外,我们还输入 x ~ 2 \tilde{x}^2 x~2和 x ~ \sqrt{\tilde{x}} x~,使网络能够轻松形成超线性和次线性函数,从而增强表达能力。输入连续特征的幂被发现可以提高离线精度。
4.2 建模预测观看时长
我们的目标是根据训练示例预测期望观看时间,这些示例点击与未点击。正样本用用户观看视频的时间进行标注。为了预测期望观看时间,采用了加权逻辑回归技术。
模型使用逻辑回归进行训练,并且损失函数为交叉熵(图7)。然而,正(点击)样本由观察到的观看时间进行加权。负(未点击)样本采用单位权重。这样,逻辑回归学习到的概率是 T i N − k \frac{T_i}{N-k} N−kTi。
其中 N N N是训练样本的数量, k k k是正样本的数量, T i T_i Ti是第 i i i个印象的观看时间。假设正样本的比例很小(在我们的情况下这是真的),那么学到的概率近似为 E [ T ] ( 1 + P ) E[T](1+P) E[T](1+P),其中 P P P是点击概率, E [ T ] E[T] E[T]是印象的期望观看时间。由于 P P P很小,这个乘积接近 E [ T ] E[T] E[T]。在推理时,我们使用指数函数 e x e^x ex作为最终激活函数来生成紧密估计期望观看时间。
4.3 隐藏层实验
表1显示了隐藏层实验中在第二天数据上使用不同隐藏层配置获得的结果。对于每个配置(“加权,单用户损失”)得到的值是由考虑单个页面上展示给用户的正(点击)和负(未点击)印象。
首先用我们的模型对这两个印象预测分值。如果负曝光获得的分数高于正曝光,则我们认为正曝光的观看时间被错误预测。单用户的损失就是这样一个比例:抽出对中的总的错误预测观看时间/总观看时间。
结论
结果显示,增加隐藏层的宽度可以改善结果,增加其深度也是如此。然而,权衡是推理所需的服务器CPU时间。1024宽ReLU后跟512宽ReLU后跟256宽ReLU的配置为我们提供了最好的结果,同时使我们能够保持在服务CPU预算内。
对于1024→512→256模型,我们尝试只输入不带幂的规范化连续特征,这会增加0.2%的损失。
在相同隐藏层配置下,我们也训练了一个正负样本权重相同的模型。观看时间加权损失增加了4.1%。
5. 总结
我们已经描述了用于推荐YouTube视频的深度神经网络架构,分为两个不同的问题:召回和排序。我们的深度协同过滤模型能够有效地吸收多种信号,并通过捕获非对称的协同观看行为和防止未来信息泄漏,在现场指标上表现良好,超越了YouTube以前使用的矩阵分解方法。从分类器中保留区分性信号也是取得良好结果的关键,否则模型会过度拟合代理问题,并且无法很好地转移到首页。
我们证明了将训练样本的年龄作为输入特征可以消除对过去的内在偏见,并允许模型代表流行视频的时间依赖性。这提高了离线保留精度结果,并在A/B测试中大大增加了最近上传视频的观看时间。
排序是一个更经典的机器学习问题,但我们的深度学习方法在观看时间预测方面超过了之前的线性和基于树的方法。特别是推荐系统受益于描述过去用户与项目行为的专业功能。我们分别用嵌入和四分位数标准化来转化分类和连续特征。深度层有效地模拟了数百个特征之间的非线性交互。
通过用观看时间为正样本加权,用负样本单位加权修改逻辑回归,从而使我们能够学习紧密模拟期望观看时间的可能性。这种方法在预测点击率直接相比,更能适应加权观看时间的排名评估指标。