论文笔记 | RecSys2019 | Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations

youtube-two-tower-title.jpg

论文地址:https://dl.acm.org/doi/abs/10.1145/3298689.3346996

一 为什么读这篇

很早之前就收藏的,除了16年那篇YouTube DNN,本篇应该是YouTube首次明确的指出用双塔结构做召回,从这篇中参考一下G家用双塔的工程技巧。

二 截止阅读时这篇论文的引用次数

2020.2.21 3次

三 相关背景介绍

同样没往arXiv上挂,感觉G家那边做推荐的好像不稀罕arXiv,直接往会议投就完了,中了19年9月的RecSys。和YouTube MultiTask差不多是同一拨人做的,9个作者中英混合。一作Xinyang Yi12年本科毕业于清华,16年PHD毕业于德州大学奥斯汀分校,同时也是MMoE,YouTube MultiTask的合著者之一。值得注意的是,《MMoE》,《YouTube MultiTask》,加上这篇,三篇最后都有同一个作者Ed Chi,这个是他们的老板,G家的首席科学家(L8),美籍华人,在google快10年了,G家多个产品的推荐系统都是他领导的,所以能在G加不少paper上看到他的名字。

四 关键词

retrieval

two-tower

sampleing-bias-corrected

item frequency estimate

五 论文的主要贡献

1 公开YouTube在召回阶段做双塔的方法细节

2 提出校正softmax,以解决候选item个数过多,流式训练中item动态变化的问题

3 提出item频率预估,用于配合校正softmax

六 详细解读

0 摘要

处理数据稀疏性和呈幂律分布的item的常见方法是从内容特征中学习item的表示。本文使用双塔神经网络,其中一个塔(item塔)编码item的多种内容特征。训练此类双塔模型的一般方法是优化来自in-batch negatives的损失函数,其中的item是采样自一个随机mini-batch。然而,in-batch损失受采样偏差的影响,可能会损害模型性能,尤其是在分布高度倾斜的情况下。本文提出了一种从流式数据中估计item频率的新算法,通过理论分析和模拟,证明了该算法可以在无需固定item词表的情况下生效,并且能够产生无偏估计,同时能够适应item分布的变化。之后将这种采样偏差校正的建模方法应用于YouTube推荐的召回系统,该系统的召回语料达上千万视频。

1 介绍

给定三元组{user, context, item},构建可扩展的召回模型通常解法是:1)分别学习查询{user, context}和item{item}的表示。2)使用查询和item表示之间的简单评分函数(例如点积)来获取查询得到的推荐。context通过表示具有动态性质的变量,例如一天中的时间,用户使用的设备等。表示学习的挑战通常有两个:1)对于许多工业级别的应用来说item语料规模会相当大。2)采集自用户反馈的训练数据对许多item来说非常稀疏,从而导致模型预测的长尾内容有很大的方差。面对众所周知的冷启动问题,现实世界的系统需要适应数据分布的变化,以更好地获取新鲜内容。

如图1所示是一个双塔模型的例子,左右两侧分别对{user, context}和{item}进行了编码。

youtube-two-tower-fig1.jpg

MLP模型通常对来自固定词汇的item进行负采样训练,然而由于item的内容特征和共享网络参数,在计算所有item的embedding时,在许多负采样上训练通常是低效的。本文考虑过batch softmax优化,它是在随机batch中对所有item计算其概率的方法,是训练双塔DNN的一般方法。然而如本文实验所示,batch softmax会受到采样偏差的影响,并且可能在没有校正的情况下会严重限制模型性能。

本文提出了使用item频率预估的方法来校正batch softmax中的采样偏差。与输出item词表是固定的MLP模型相反,本文针对了词表和分布随时间变化的流式数据的状况。本文提出的新算法通过梯度下降来绘制和预估item的频率。本文也介绍了一种用于流式数据的序列训练策略,及其相关系统的索引和serving组件。

2 相关工作

2.1 内容感知和神经网络推荐

本文和NCF有两方面不同:1)本文利用双塔神经网络对user-item的交互进行建模,以便可以在亚线性的时间内对大量的item进行预测。2)NCF的学习依赖于point-wise损失(平方或log损失),而本文引入了多分类softmax损失并对item频率显式建模。

2.2 极限分类

在大量类别上如何训练softmax分类模型。

2.3 双塔模型

双塔模型源自NLP,例如对句子相似度的建模《Learning Text Similarity with Siamese Recurrent Networks》,回应建议《Smart Reply: Automated Response Suggestion for Email》,基于文本的信息检索《End-to-End Retrieval in Continuous Space》《Learning Semantic Textual Similarity from Conversations》。

3 建模框架

查询和item分别用特征向量\left\{x_{i}\right\}_{i=1}^{N}\left\{y_{j}\right\}_{j=1}^{M}表示。这里x_{i} \in \mathcal{X}, y_{j} \in \mathcal{Y}都是一系列特征的组合(例如稀疏ID和密集特征),同时有非常高的维度。假设user和context完全用x_{i}表示。

我们的目的是用两个参数化的embedding函数(u: \mathcal{X} \times \mathbb{R}^{d} \rightarrow \mathbb{R}^{k}, v: \mathcal{Y} \times \mathbb{R}^{d} \rightarrow \mathbb{R}^{k})构建模型,该模型参数\theta \in \mathbb{R}^{d},映射查询和候选的特征到k维的embedding空间。模型的输出是两个embedding的内积,即:
s(x, y)=\langle u(x, \theta), v(y, \theta)\rangle
目标是从有T个样本的训练集中学习模型参数\theta,定义如下:
\mathcal{T}:=\left\{\left(x_{i}, y_{i}, r_{i}\right)\right\}_{i=1}^{T}
其中\left(x_{i}, y_{i}\right)是查询x_{i}和itemy_{i}组成的对。r_{i} \in \mathbb{R}是与每一对关联的奖赏(分数)。

给定查询x,从有M个item(\left\{y_{j}\right\}_{j=1}^{N})中挑选候选y的通常选择是基于softmax函数,即:
\mathcal{P}(y | x ; \theta)=\frac{e^{s(x, y)}}{\sum_{j \in[M]} e^{s\left(x, y_{j}\right)}}
通过进一步与奖赏r_{i}关联,认为如下的加权对数似然是损失函数:
L_{T}(\theta):=-\frac{1}{T} \sum_{i \in[T]} r_{i} \cdot \log \left(\mathcal{P}\left(y_{i} | x_{i} ; \theta\right)\right)
M非常大时,对包含所有的候选进行计算是不可行的,例如softmax公式的分母部分。一个常见的想法是构造部分函数时使用item的一个子集。本文聚焦于处理流式数据,因此不像训练MLP模型那样从固定的语料中进行负采样,本文仅考虑使用in-batch中的item中作为相同批次中所有查询的负样本。更精确地说,给定一个含有B个对\left\{\left(x_{i}, y_{i}, r_{i}\right)\right\}_{i=1}^{B}的mini-batch,对于每个i,batch softmax为:
\mathcal{P}_{B}\left(y_{i} | x_{i} ; \theta\right)=\frac{e^{s\left(x_{i}, y_{i}\right)}}{\sum_{j \in[B]} e^{s\left(x_{i}, y_{j}\right)}}
在本文目标应用中的in-batch item通常是从幂律分布中采样的,即上式会引入大量的偏差,流行的item由于被包含在batch中的可能性很高,因此会被过度惩罚为负的。受采样softmax模型中logQ校正的启发,本文通过如下公式校正每个logit s\left(x_{i}, y_{j}\right)
s^{c}\left(x_{i}, y_{j}\right)=s\left(x_{i}, y_{j}\right)-\log \left(p_{j}\right)
这里的p_{j}定义为一个随机batch中item j的采样概率,下一节会介绍它的预估。通过校正,得到:
\mathcal{P}_{B}^{c}\left(y_{i} | x_{i} ; \theta\right)=\frac{e^{s^{c}\left(x_{i}, y_{i}\right)}}{e^{s^{c}\left(x_{i}, y_{i}\right)}+\sum_{j \in[B], j \neq i} e^{s^{c}\left(x_{i}, y_{j}\right)}}
则相应的损失函数如下,即batch损失函数:
L_{B}(\theta):=-\frac{1}{B} \sum_{i \in[B]} r_{i} \cdot \log \left(\mathcal{P}_{B}^{c}\left(y_{i} | x_{i} ; \theta\right)\right)
注意L_{B}无需固定的查询或候选集。相应的,该公式可以应用于随着时间改变分布的流式训练数据,算法1是对本文提出方法的完整描述。

youtube-two-tower-alg1.jpg

最近邻搜索

一旦学习到embedding函数u, v,预测由两步组成:1)计算查询的embedding u(x, \theta)。2)在一组item embedding上执行最近邻搜索,这些embedding已经通过embedding函数v预先计算了。更重要的是,本文的建模框架在预测时提供了可以选择任意大小的item集合。低延迟的召回通常基于哈希技术构建高效的相似搜索系统,而不是计算所有item到表面顶层item的点积,以解决最大内部产品搜索(MIPS)问题。具体来说,通过对粗略和乘积量化器进行量化和端到端的学习,构建高维embedding的压缩表示。

归一化和温度

根据经验,通过给embedding增加归一化,例如,u(x, \theta) \leftarrow u(x, \theta) /\|u(x, \theta)\|_{2}v(y, \theta) \leftarrow v(y, \theta) /\|v(y, \theta)\|_{2},可以提升模型的可训练性,进而得到更好的召回质量。

此外,给每个logit增加温度\tau可以完善预测,即:
s(x, y)=\langle u(x, \theta), v(y, \theta)\rangle / \tau
实践中,\tau是一个需要调优的超参。

4 流式频率预估

对于一个流式的随机batch,问题是预估每个batch中每个item y的命中概率。一个关键的设计准则是当有多个训练jobs(workers)时,要有一个完全分布的预估来支持分布式训练。

我们可以利用全局step,并对一个item的频率预估p转化为预估\delta,其表示为两次连续命中item所需的平均step。例如,如果一个item每50step采样一次,则得到p=0.02。使用全局step提供了两点优势:1)通过读取和修改全局step,多个worker在频率预估中隐式的同步。2)预测\delta通过简单的滑动平均来更新,该更新适用于分布的改变。

由于使用固定的item词汇表不切实际,本文应用哈希数组来记录流IDs的采样信息。注意引入哈希技术可能会带来哈希冲突问题,本文会在本节最后提出改进算法来解决这个问题。

youtube-two-tower-alg2.jpg

如算法2所示,保留两个大小为H的数组AB。哈希函数h将任意item映射为[H]中的一个整数。对于给定的item yA[h(y)]记录了当y被采样时最近的step,B[h(y)]包含对y的预估\delta。使用数组A来辅助更新数组B。一旦在step t时出现item y,通过如下公式(公式6)更新数据组B:
B[h(y)] \leftarrow(1-\alpha) \cdot B[h(y)]+\alpha \cdot(t-A[h(y)])
在更新B后,将步长t赋给数组A[h(y)]

对于每个item,假设两个连续命中之间的step遵循由随机变量\Delta表示的分布,其均值为\delta=\mathbb{E}(\Delta)。本文的目的是从流式采样中预测\delta。每当在第t个step的batch中出现item时,t-A[v(y)]是一个新的采样\Delta。因此可将上述更新理解为以固定学习率\alpha运行SGD,以学习此随机变量的均值。形式上,在没有碰撞的情况下,下面的结果将显示在线预估的偏差和方差。证明略。。

分布式更新

数组A,B和全局step参数分布在参数服务器上。

多个哈希

受count-min sketch算法的启发,本文扩展了算法2,利用多个哈希函数来消除由于冲突带来的item频率的过度预估。改进如算法3所示。

youtube-two-tower-alg3.jpg

5 YouTube的神经网络召回系统

5.1 建模概述

如图2所示。在任何时候,seed video(用户当前观看的视频)提供了用户当前兴趣的最强信号。因此,本文利用了大量的种子视频的特征以及用户的观看历史记录。

youtube-two-tower-fig2.jpg
训练标签

视频点击被视为正样本,此外,对于每次点击,构建奖赏r_{i}来反映用户对视频不同程度的交互。例如,r_{i}=0表示点击的视频只有很少的观看时长,而r_{i}=1则表示全部观看完成。这个奖赏被用于损失函数中的样本权重。

视频特征

视频特征包括categorical和dense特征。categorical特征包括video id,channel id等。创建一个embedding层将每个categorical特征映射为dense向量。通常需要处理两种categorical特征,一些特征(例如视频id)严格具有一个categorical值,因此用一个embedding向量表示。另一种(如视频主题)可能是categorical值的稀疏向量,因此表示该特征的最终embedding将是稀疏向量中每个值的embedding的加权和。

为了处理超出词典范围的实体,将实体随机赋给一组固定的哈希桶。在YouTube中哈希桶对于模型捕捉可用的新实体非常重要,尤其是在下节所述的序列训练中。

用户特征

使用用户观看历史捕获用户的兴趣。将观看历史视为词袋(BOW),用视频id embedding的平均值来表示。在查询塔,用户和种子视频特征融合为输入层。

对于相同类型的ID,在相关的特征上共享embedding,例如,同样集合的视频id embedding用于种子,候选,用户观看历史。也做了不共享embedding的实验,但并发现模型质量有明显提升。

5.2 序列训练

YouTube每天生成新的训练数据,训练数据根据天来组织。模型训练按以下方式使用此顺序结构。训练器从最旧的训练数据到最新的训练数据按序列使用数据。一旦训练器得到了最新的训练数据后,便会等待第二天训练数据的到达。通过这种方式,模型能跟上最新的数据分布变化。训练数据实际上是以流的方式被消耗的。通过算法2(或算法3)预测item频率,公式6的在线更新能使模型适应新的频率分布。

5.3 索引和模型serving

召回系统中的索引流水线周期性的生成TensorFlow SavedModel用于在线serving。索引流水线由3个阶段组成:候选样本生成,embedding inference,embedding索引,如图3所示。

youtube-two-tower-fig3.jpg

6 实验

6.1频率预估模拟

学习率\alpha的效果
youtube-two-tower-fig4.jpg
多个哈希的效果
youtube-two-tower-fig5.jpg

6.2 维基百科页面召回

youtube-two-tower-table1.jpg

6.3 YouTube实验

本文使用的YouTube训练数据包括多天的,每天都包含数十亿的点击视频。

设置

如图2所示,查询塔和候选塔的输入特征embedding会共享,当它们在两边都可用时。两边的塔都使用3层DNN,隐层单元个数分别为[1024,512,128]。用学习率为0.2的Adagrad进行训练,batchsize为8192。至于频率预估,设置H=50 M, m=1, \alpha=0.01。在本节的实验中,每隔几个小时就会定期构建从YouTube语料库中选择的大约1000万个视频的索引。索引语料库会随着时间变化,例如新鲜视频的上传。但它通常覆盖了90%以上的训练样本。

离线实验

对于所有点击是视频赋r_{i}=1。当检索点击视频时通过召回来评估模型效果。本文为离线实验简化了奖励函数,因为对于连续的奖赏定义合适的离线指标并不明显。为了兼容序列训练,设置训练器完成15天(d_{0})后的训练再开始评估模型效果,并开始等待新数据。对于d_{0}后的每天,保留10%的数据用于评估。为了说明每周的模式,本文报告了7天平均的离线结果,即从d_{0}+1d_{0}+7

youtube-two-tower-table2.jpg
在线实验

因为通过用户的点击来推荐视频并不是理想的,因此对于线上实验,本文通过奖励(权重)的方式来训练模型,以反映用户对点击视频的真正参与度。

youtube-two-tower-table3.jpg

七 小结

相比MMoE那两篇,这篇看起来还是有点费劲的,本文不单是简单的网络结构的修改,而是训练方法上,流程上的优化,公式也比较多。干货也有不少,也有不少工程实践上的细节,例如样本加权,embedding归一化,超参温度\tau的影响等等,非常值得学习参考。

素质四连

要解决什么问题

YouTube召回系统中大规模候选带来的采样偏差

用了什么方法解决

提出流式item频率预估算法,融入校正softmax进行训练

效果如何

YouTube在线互动指标提升0.37%个点

还存在什么问题

pass

算法背后的模式和原理

损失函数优化

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容