摘要
许多推荐系统从一个非常大的语料库中召回和评分项目。处理数据稀疏和幂律项目分布(长尾分布)的一个常见方法是,从其内容特征中学习项目表征。除了许多基于矩阵分解的内容感知系统,我们考虑使用双塔神经网的建模框架,其中一个塔(项目塔)编码各种项目内容特征。训练这种双塔模型的一般秘诀是优化从批内负样本计算出来的损失函数,这些负样本是从随机小批次中抽出的项目。然而,批内损失会受到抽样偏差的影响,可能会损害模型的性能,尤其是在高度倾斜分布的情况下。在本文中,我们提出了一种新的算法,用于估计流数据中的项目频率。通过理论分析和模拟,我们表明所提出的算法可以在不需要固定项目词汇表的情况下工作,并且能够产生无偏的估计,对项目分布的变化具有适应性。然后,我们应用抽样偏差校正的建模方法,建立了一个大规模的YouTube推荐的神经召回系统。该系统被部署为从一个拥有数千万视频的语料库中召回个性化建议。我们通过在两个真实世界的数据集上进行离线实验,证明了采样偏差校正的有效性。我们还进行了现场A/B测试,表明神经召回系统导致了YouTube推荐质量的提高。
引言
推荐系统帮助用户在许多互联网服务中发现感兴趣的内容,包括视频推荐[12, 18]、应用程序建议[9]和在线广告定位[38]。在许多情况下,这些系统在严格的延迟要求下,将数十亿用户与来自极其庞大的内容语料库的项目连接起来,其规模通常为数百万至数十亿。一个常见的做法是把推荐当作一个召回和排序的问题,并设计一个两阶段的系统[9, 12]。也就是说,一个可扩展的召回模型首先从一个大的语料库中召回出一小部分相关的项目,然后一个全面的排名模型根据一个或多个目标(如点击率或用户评价)重新排列召回的项目。在这项工作中,我们专注于建立一个现实世界中的学习型召回系统,用于个性化推荐,可扩展到数百万个项目。
给定一个{用户、上下文、项目}的三联体,建立一个可扩展的召回模型的常见解决方案是。1)分别学习{用户、上下文}和{项目}的查询和项目表示;2)在查询和项目表示之间使用一个简单的评分函数(如点积)来获得为查询量身定做的推荐。上下文通常表示具有动态性质的变量,如一天中的时间,以及用户使用的设备。表征学习问题通常在两个方面具有挑战性。1)对于许多工业规模的应用来说,项目的语料库可能非常大;2)从用户的反馈中收集的训练数据对于大多数项目来说是非常稀少的,因此导致模型预测对于长尾内容有很大的差异。面对广为报道的冷启动问题,现实世界的系统需要对数据分布变化进行自适应,以更好地浮现新鲜内容。
受Netflix奖[32]的启发,基于矩阵分解(MF)的建模已被广泛用于学习查询和项目的隐因子,以构建召回系统。在MF框架下,大量的推荐研究(如[21,34])解决了上述从大型语料库中学习的挑战。其共同的想法是利用查询和项目的内容特征。内容特征可以被粗略地定义为描述项目的各种特征,而不是项目ID。例如,视频的内容特征可以是从视频帧中提取的视觉和音频特征。基于MF的模型通常只能捕捉到特征的二阶互动,因此在表示具有各种格式的特征集合时能力有限。
近年来,在计算机视觉和自然语言处理中深度学习的成功激励下,有大量的工作将深度神经网络(DNNs)应用于推荐。深度表征很适合在低维嵌入空间中编码复杂的用户状态和物品内容特征。在本文中,我们探讨了双塔DNNs在构建召回模型中的应用。图1提供了一个双塔模型架构的说明,其中左塔和右塔分别编码{用户,上下文}和{项目}。双塔DNN是从多类分类神经网络[19]中概括出来的,是一个多层感知器(MLP)模型,图1中的右塔被简化为带有项目嵌入的单层。因此,双塔模型架构能够对标签具有结构或内容特征的情况进行建模。MLP模型通常是用固定的项目词汇中的许多采样的负样本来训练。相比之下,对于深层物品塔,由于物品内容特征和计算所有物品嵌入的共享网络参数,通常对许多负样本进行采样和训练的效率很低。
我们认为批量softmax优化,即项目概率在随机批次的所有项目上计算,是训练双塔DNN的一般秘诀。然而,正如我们的实验所显示的那样,批量softmax受到采样偏差的影响,如果不进行任何修正,可能会严重限制模型的性能。在MLP模型中已经研究了重要性抽样和相应的偏差减少[4, 5]。在这些工作的启发下,我们提出使用估计的项目频率来纠正批量softmax的采样偏差。与MLP模型相比,输出的项目字典是固定的,我们针对的是词汇和分布随时间变化的流数据情况。我们提出了一种新的算法,通过梯度下降来勾画和估计项目频率。此外,我们还应用了偏差校正建模,并将其用于建立一个个性化的YouTube推荐召回系统。我们还介绍了一种连续的训练策略,旨在将流媒体数据与系统的索引和服务组件一起纳入。
本文的主要贡献包括:
- 流媒体频率估计:我们提出了一种新的算法来估计数据流中的项目频率,受词汇和分布变化的影响。我们提供分析结果,以显示估计的方差和偏差。我们还提供了模拟,证明了我们的方法在捕捉数据动态方面的功效。
- 建模框架:我们为构建大规模召回系统提供了一个通用的建模框架。特别是,我们将估计的项目频率纳入批处理softmax的交叉熵损失中,以减少批处理项目的采样偏差。
- YouTube推荐:我们描述了我们如何应用建模框架来建立一个大规模的YouTube推荐召回系统。我们介绍了端到端的系统,包括训练、索引和服务组件。
- 离线和线上实验:我们在两个真实世界的数据集上进行了离线实验,证明了采样偏差校正的有效性。我们还表明,我们为YouTube建立的召回系统在线上实验中带来了改进的参与度指标。
相关工作
内容感知和神经网络推荐器
利用用户和项目的内容特征对于提高泛化性和减轻冷启动问题至关重要。有一系列的研究专注于将内容特征纳入经典的矩阵分解框架中[23]。例如,广义的矩阵因式分解模型,如SVDFeature[8]和Factorization Machine[33],可以应用于纳入项目内容特征。这些模型能够捕捉到特征之间的双线性,即二阶相互作用。近年来,深度神经网络(DNNs)已被证明能有效提高推荐的准确性。由于高度非线性的性质,DNNs提供了更大的能力来捕捉复杂的特征互动[6, 35],与传统的因子化方法相比。He等人[21]直接应用协同过滤(CF)的直觉,并提供了一个神经CF(NCF)架构来模拟用户-项目的相互作用。在NCF框架中,用户和项目的嵌入被串联起来,并通过多层神经网络得到最终的预测结果。我们的工作在两个方面与NCF不同。1)我们利用双塔神经网络对用户-项目互动进行建模,这样就可以在亚线性时间内对大量的项目语料库进行推理;2)学习NCF依赖于点式损失(如平方或对数损失),而我们引入了多类softmax损失并明确地对项目频率进行建模。
在另一条工作线上,深度和循环神经网络模型如LSTM被应用于将时间信息和历史事件纳入推荐中,例如,[12,14]。除了学习独立的用户和项目表征,还有一组工作侧重于设计神经网络,特别是用于学习排名系统。值得注意的是,多任务学习一直是优化复杂推荐器的多个目标的核心技术[27, 28]。Cheng等人[9]用联合训练的宽线形模型和深度神经网络引入了一个wide-n-deep框架。
超大规模分类
Softmax是最常用的函数之一,用于设计预测多达数百万标签的大型输出空间的模型。很多研究都集中在训练大量类的softmax分类模型上,从语言任务[5, 29]到推荐系统[12]。当类的数量非常大时,一个广泛使用的技术是对类的子集进行采样,以加快训练速度。Bengio等人[5]的研究表明,一个好的采样分布应该是对模型的输出分布有适应性的。为了避免计算抽样分布的复杂性,许多现实世界的模型应用了一个简单的分布,如unigram或uniform作为代理。最近,Blanc等人[7]设计了一种高效且自适应的基于核的采样方法。尽管采样的softmax在各个领域都很成功,但它并不适用于标签具有内容特征的情况。在这种情况下,自适应采样也仍然是一个开放的问题。多项工作表明,基于树的标签结构,如分层softmax[30],对于建立大规模的分类模型非常有用,同时大大减少了推理时间。这些方法通常需要一个基于某些分类属性的预定义树状结构。因此,它们不适合纳入各种各样的输入特征。
双塔模型
构建具有双塔的神经网络最近在一些自然语言任务中成为一种流行的方法,包括为句子相似性建模[31]、响应建议[24]和基于文本的信息召回[17, 37]。我们的工作对这一研究方向做出了贡献,特别是证明了双塔模型在构建大规模推荐者方面的有效性。与上述文献中的许多语言任务相比,值得注意的是,我们专注于具有更大语料库规模的问题,这在我们的目标应用中很常见,如YouTube。通过现场实验,我们发现明确地对项目频率进行建模对于提高这种环境下的召回准确性至关重要。然而,这个问题在现有的工作中没有得到很好的解决
模型框架
我们考虑推荐问题的一个常见设置,即我们有一组查询和项目。查询和项目分别由特征向量
我们的目标是建立一个具有两个参数化嵌入函数的模型
将模型参数
我们的目标是从一个由
直观地说,召回问题可以被看作是一个具有连续奖励的多类分类问题。在每个标签同等重要的分类任务中,对于所有的正数对,
通过进一步纳入奖励
当
在我们的目标应用中,批量内的项目通常是从幂律分布中取样的。因此,方程(5)引入了对完全softmax的巨大bias:由于被纳入一个批次的概率很高,受欢迎的项目被过度地惩罚为负样本。受采样softmax模型中使用的
这里
通过修正,我们有
然后将上述公式带入方程(4)中,可以得出
这是批损失函数。以
请注意,
例如,[2,10,25],用于近似的最大内积搜索(MIPS)问题。具体来说,高维嵌入的紧凑表示是通过量化[20]和粗量化器和积量化器的端到端学习[36]建立的。
归一化和温度。从经验上看,我们发现增加嵌入归一化,即
在实践中,
流媒体频率估计
在这一节中,我们详细说明算法1中使用的流媒体频率估计。
考虑一个随机批次的流,其中每个批次包含一组项目。问题是要估计在一个批次中击中每个项目
在单机或分布式训练中,一个唯一的全局步骤,代表训练器消耗的数据批次的数量,与每个采样批次相关。在分布式设置中,全局步骤通常通过参数服务器在多个工作者之间进行同步。我们可以利用全局步骤,将一个项目的频率
由于使用固定的项目字典并不实用,我们应用哈希数组来记录流媒体ID的采样信息。注意,引入散列可能会导致潜在的散列碰撞。我们将重新审视这个问题,并在本节的最后提出一个改进的算法。如算法2所示,我们保留两个大小为
在
对于每个项目,假设两个连续命中之间的步骤数遵循随机变量
命题4.1。假设
估计偏差由以下公式给出
对于方差我们有如下证明
通过取期望值,我们有
通过对
对于最后一项,我们有
由于
方程(13)表明,当
为了得到
分布式更新。我们考虑[13]中提出的分布式训练框架,其中模型参数分布在一组称为参数服务器的服务器上,多个工作者独立处理训练数据并与参数服务器通信以获取和更新模型参数。算法2可以扩展到这种设置。数组
多重散列。受count-min sketch[11]中类似想法的启发,我们对算法2进行了扩展,利用多个哈希函数来减轻由于碰撞造成的项目频率的过度估计。改进后的估计结果在算法3中提出。更新每个数组
youtube神经网络召回系统
我们应用所提出的建模框架,并将其扩展到为YouTube的一个特定产品建立一个大规模的神经召回系统。这个产品根据用户正在观看的视频(称为种子视频)来生成视频推荐。该推荐系统包括两个阶段:召回(又称召回)和排名。在召回阶段,我们有多个召回器,每个召回都会根据用户和种子视频的约束条件产生数百个视频推荐。这些视频随后被一个完全成熟的神经网络排名模型打分并重新排名。在这一节中,我们重点讨论在召回阶段建立一个额外的召回,特别是在数据、模型结构、训练和服务等方面。
模型概览
我们建立的YouTube神经召回模型由查询和候选网络组成。图2说明了一般的模型结构。在任何时间点,用户正在观看的视频,即种子视频,提供了一个关于用户当前兴趣的强烈信号。因此,我们利用了大量的种子视频特征和用户的观看历史。候选塔的建立是为了从候选视频特征中学习。
训练标签。视频点击量被用作正标签。此外,对于每次点击,我们构建一个奖励
视频特征。我们使用的视频特征包括分类的和密集的特征。分类特征的例子包括视频
用户特征。我们使用用户的观看历史来捕捉用户对种子视频以外的兴趣。一个例子是用户最近观看的
对于同一类型的ID,嵌入参数在相关的特征中是共享的。例如,同一组视频ID嵌入被用于种子、候选和用户的过去观看。我们确实做过非共享嵌入的实验,但没有观察到明显的模型质量改进。
顺序渐进式训练
我们的模型在Tensorflow[1]中实现,并在许多worker和参数服务器上用分布式梯度下降法进行训练。在YouTube上,每天都有新的训练数据产生,训练数据集也相应地按天组织。模型训练以如下方式利用了这种顺序结构。训练器从最古老的训练实例到最近的训练实例依次消耗数据。一旦训练器赶上了最近一天的训练数据,它就等待第二天的训练数据到来。通过这种方式,模型能够跟上最新的数据分布转变。训练数据基本上是由训练器以流的方式消耗的。我们应用算法2(或算法3,如果使用多个哈希值)来估计项目频率。方程(6)的在线更新使模型能够适应新的频率分布。
索引和模型服务
召回系统中的索引管道会定期创建一个Tensorflow SavedModel用于在线服务。索引管道分为三个阶段:候选实例生成、嵌入推理和嵌入索引,如图3所示。在第一阶段,根据某些标准从YouTube语料库中选择一组视频。它们的特征被提取出来并添加到候选例子中。在第二阶段,图2的右塔被用于计算候选例子的嵌入。在第三阶段,我们基于树状和量化散列技术,训练一个基于Tensorflow的嵌入指数模型。我们略过这些细节,因为它们不是本文的重点。最后,服务中使用的SavedModel是由图2的查询塔和索引模型拼接而成的。
实验结果
在这一部分,我们展示了实验结果,以证明所提出的项目频率估计和建模框架的有效性。
关于频率估计的模拟
为了评估算法
具体来说,我们报告了。1)学习率
学习率
多个哈希值的影响。在第二次模拟中,我们运行算法3,用不同数量的哈希函数
维基百科页面召回
在本节中,我们在维基百科数据集[16]上进行了页面召回实验,以显示采样偏差校正的批量损失4的功效。
数据集。我们考虑的任务是预测维基百科页面之间的站内链接。对于一对给定的源页和目的页
模型。我们将链接预测视为一个召回问题,即给定一个源页面,任务是从页面语料库中召回出目标页面。因此,我们训练了一个双塔神经网络,其中左塔和右塔分别映射源特征和目的特征。输入的特征嵌入在两个塔之间共享。每个塔有两个全连接的ReLU层,尺寸为[512, 128]。
基线。我们将提议的抽样偏差修正的批量软算法(correct-sfx)与没有任何修正的批量软算法(plain-sfx)进行比较,如公式(3)所示,以证明偏差修正的功效。此外,我们还考虑了平均平方损失,它被广泛用于推荐中的隐性反馈建模。该损失是观察到的配对的MSE和将所有未见过的配对推向常数先验的正则化项的组合,通常选择为0。在第3节介绍的框架下,该损失为
其中
训练和评估。对于所有的方法,我们使用批次大小1024,模型用Adagrad[15]和学习率
结果总结在表1中。对于每个温度值,correct-sfx都比相应的plain-sfx要好很多。看到温度对性能的影响是很有趣的,这表明在应用规范化时有必要仔细调整这个参数。我们还注意到,基于批量softmax的方法导致了比mse-gramian更好的性能。
youtube实验
我们基于第5节介绍的神经召回系统,在YouTube上进行离线和实时实验。我们使用的YouTube训练数据包括每天数十亿的点击视频,横跨许多天。
设置。回顾一下,我们使用的模型结构如图2所示。如前所述,如果输入的特征嵌入对查询塔和候选塔都可用,那么这两个塔就共享。我们对两个塔使用三层DNN,隐藏层大小为[1024, 512, 128]。我们使用Adagrad训练模型,学习率为0.2,批次大小为8192。对于频率估计,我们设定H=50M,m=1,α=0.01。回顾一下,我们采用了第5.2节中介绍的顺序训练。在本节的实验中,从YouTube语料库中选择的大约1000万个视频的索引每隔几小时就会定期建立。索引语料库会随着时间的推移而发生变化,例如,由于新鲜视频的上传。但它通常涵盖90%以上的训练实例。
离线实验。我们为所有被点击的视频指定
线上实验。我们还在YouTube的A/B测试框架中进行现场实验。对于对照组的用户,视频是由生产系统推荐的。对于处理组,在将图2所示的神经召回系统的候选项目加入到提名阶段后,用户会被推荐。由于推荐用户喜欢点击的视频并不理想,对于现场实验,我们用奖励的方式训练模型,以反映用户对点击视频的真实参与度。我们报告与这个标签相一致的参与度指标。结果显示在表3中。可以看出,加入神经召回系统后,以前的制作系统有了很大程度的改善。此外,带有correct-sfx的模型比使用plain-sfx的基线要好很多,证明了采样偏差校正的有效性。
结论
在本文中,我们提出了一个通用的建模框架,用于为工业规模的应用建立大规模的内容感知的召回模型。我们提出了一种估计项目频率的新算法。理论分析和模拟证明了其正确性和有效性。我们应用所提出的建模框架,建立了一个用于YouTube推荐的神经召回系统。特别是,为了捕捉YouTube的数据动态,我们提出了一种顺序训练策略,流媒体频率估计算法可以很容易地与之结合。对维基百科链接预测和YouTube视频召回的离线实验显示,使用采样偏差校正法有明显的改善。在YouTube的现场实验也显示了用户对我们的神经召回系统所召回的候选物品的参与度有所提高。
Comments | NOTHING