【CTR】Youtube:双塔召回模型

2020-07-21 11:43:40 浏览数 (1)

作者:阿泽

本文是 Google 在 RecSys 2019 上的最新论文,作者采用了目前主流的双塔模型,并基于此设计了一个使用双塔神经网络的建模框架,其中一个塔为 item 塔,编码了 item 大量的内容特征。

这类双塔模型的的优化方法通常是对 mini-batch 进行负采样的方式进行训练,但是这样做会存在问题。比如说,当样本分布出现明显倾斜的时候,潜在的会破坏模型的性能。

为此,作者提出了一种从流数据中评估 item 频率的方法,并通过理论分析和实验结果表明,该算法不需要固定的 item 语料库也能够产生无偏估计,并通过在线更新来适应 item 的分布变化。

随后,作者采用了这种“采样偏差矫正”的方法为 Youtube 建立了一个基于神经网络的大型检索系统,该系统用于从那个包含数千万个视频的语料库中提供个性化服务。

最后在两个真实数据集和 A/B 测试中进行测试,证明了“采样偏差矫正”的有效性。

Introduction

给定 {user、context、item} 三元组,构建一个可扩展的检索模型通常分为一下两个步骤:

  1. 首先,分别学习 {user、context} 和 {item} 的 query 和 item 的向量表示;
  2. 然后,设计一个评分函数(如点积)来获得与 query 匹配的 item。

然而,上下文通常是动态的,所以这种方法会遇到两方面的挑战:

  1. item 的语料库通常回答,如何进行快速匹配;
  2. 从用户反馈种受到的训练数据通常是非常稀疏的,因此导致模型预测对于长尾内容的方差较大。

所以,系统更需要适应数据的分布变化,从而才能获得更好的表现。

随着深度学习在诸多领域的成功应用,本文将探讨双塔 DNN 在构建检索模型中的应用,下图为双塔模型:

其中,左塔和右塔分别对 {user、context} 和 {item} 进行编码。

MLP 模型通常可以采用从 item 的固定语料库中通过负采样得到训练,但由于双塔模型体系是同时对 item 的结构和内容特进行建模的,两者共享网络参数,所以无法通过类似的方式进行采样训练。

为此,作者提出 batch softmax 的优化方法,item 采样概率会考虑随机批次中的所有 item。但是在实验过程中,作者发现 batch softmax 存在抽样偏差,如果不进行矫正则会影响模型性能(Bengio 指出采样分布应该与模型输出分布相似)。受到 MLP 中重要性采用来减少偏差的工作启发,作者通过估计 item 的频率来纠正 batch softmax 的抽样偏差。但与 MLP 模型中输入固定语料库不同的是,作者针对流数据来评估语料库分布情况。

最后,作者将这种偏差矫正技术应用到 Youtube 的个性化检索系统中,并取得了不错的成绩。

为此,本文的贡献主要有以下几点:

  1. 基于数据流的 item 频率评估,有助于矫正抽样偏差;
  2. 提出了一个通用的模型架构来构建一个大型检索系统。

Modeling

Framework

首先,我们的模型目标是对于所给的 query 检索得到 item 的一个子集。我们的目标是构建一个具有两个参数话 Embedding 的函数

u:mathcal{X}times R^{d} rightarrow R^{k},v: mathcal{Y}times R^{d} rightarrow R^{k}

,可以将 Query 和候选的 Item 映射到一个 k 维 Embedding 空间中。正如上面的那个双塔模型所示,然后通过内积来求得两个 Embedding 的相似度:

s(x,y) = < u(x,theta), v(y,theta) >\

其中,

theta

为模型的参数。

所以我们的目标是通过训练集 T 来更新这个参数,训练集表示为:

tau := {(x_i, y_i, r_i)}_{i=1}^T \

其中,

(x_i,y_i)

表示 query 和 item 的 pair,

r_i in R

表示该 pair 的权值。

此时这个问题可以被认为是一个多分类问题,给定一个用户 x,从 M 个候选 items 中选择要推荐的 item,多分类 softmax 函数定义为:

P (y|x; theta) = frac{e^{s(x,y)}}{sum_{j in [M]} e^{s(x,y_j)}} \

其中,

s(x,y)

是之前计算的相似度。

损失函数为对数似然函数:

L_T(theta) := -frac{1}{T} sum_{i in [T]} r_i cdot log(P(y_i|x_i; theta)) \

当样本量 M 过大时,计算所有候选样本时非常低效的。一个很常用的方法就是对样本集合 M 进行采样得到子集。但作者是对流数据进行采样,会产生偏差,不会像 MLP 那样可以针对一个固定的数据集进行负采样。只能对 in-batch 的 items 进行负采样。给定一个 mini-batch B,其 softmax 表示为:

P_B (y_i|x_i; theta) = frac{e^{s(x_i,y_i)}}{sum_{j in [B]} e^{s(x_i,y_j)}} \

in-batch 中的 item 通常是从目标应用中幂律分布中采样得到的。因此上面的公式计算出来的 softmax 是有偏差的(因为频率高的 item 被经常作为负样本,从而过度惩罚导致了偏差)。为此作者通过引入 logit 函数来进行采样修正:

s^c(x_i,y_i) = s(x_i,y_i) - log(p_j) \

其中,

p_j

表示一个从随机的 batch 中采样得到 item j 的概率。后面会对此进行极少。

有了这个修正后,我们后:

P_B^c(y_i|x_i;theta) = frac{e^{s^c(x_i,y_i)}}{e^{s^c(x_i,y_i)} sum_{jin[B],jneq i} e^{s^c(x_i,y_j)} } \

带入损失函数后得到:

L_B(theta) := -frac{1}{B} sum_{i in [B]} r_i cdot log(P_B^c (y_i|x_i; theta)) \

我们可以用 SGD 进行优化,算法伪代码如下:

给定 Embedding 函数后,我们会用最近邻进行搜索,其中包括两个步骤:首先是利用 Embedding 函数查询 Embedding,然后对该 Embedding 进行最近邻搜索。但是在作者的框架中通常是需要低延迟的,所以其材采用基于哈希技术的高效相似度搜索系统,而不是计算所有 item 之间的点积,从而解决近似最大内积搜索问题(MIPS)。

作者发现通过对向量进行归一化也可以改善模型训练;另外,加上一个超参

tau

可以调节预测准确率:

s(x,y) = < u(x,theta), v(y,theta) >/ tau \

Streaming Frequency Estimation

这一节主要介绍

p_j

如何从随机的 batch 中采样得到 item j 的概率。

由于无法使用固定的语料库,所以作者使用散列阵来记录流 id 的采样信息(不过要注意这里可能会引起哈希冲突)。

作者提出的采样概率修正算法,其核心思想在于通过采样频率来估计采样概率,如某 item 的采样频率为 p,则其采样概率为 1/p。在流式计算中,作者会记录两个信息,一个是 item y 的上一次采样时间

A[h(y)]

,另一个是 item y 的概率估计

B[h(y)]

,我们会用 A 来协助更新 B:

B[h(y)] leftarrow (1-alpha) cdot B[h(y)] alpha cdot (t-A[h(y)]) \

伪代码如下:

刚刚提到哈希冲突,所以作者也给出了改进算法:

Neural Retrieval System

Youtube 神经检索模型由查询网络和候选网络组成,任何时刻系统都能捕捉到用户当前感兴趣的点,其模型体系结构如下图所示:

作者利用了大量的视频和用户观察历史来训练模型:

  • 训练标签:当用户观看视频完整看完时为 1,否则为 0;
  • 视频特征:视频特征有诸如视频 id,频道 id 之类的类别特征,也有连续特征。类别特征分为单值类别特征(如 vedio id)和多值类别特征(如 vedio topic),后者我们取其多值 Embedding 的均值即可;
  • 用户特征:用户特征主要是基于用户的历史观看记录来捕获用户的兴趣,比如说,用户最近看过 k 个视频,那我们可以取其 Embedding 的均值来刻画用户兴趣;

Youtube 每天都会生成新的训练数据集,其也会以天为单位对模型进行更新,这样模型便能更新最新的数据分布变化。

检索系统的的 index pipeline 定期创建了一个 SaveModel 用于在线服务:

index pipeline 包括三个阶段:

  • 候选示例生成:根据一定的标准从语料库中选择一组视频;
  • Embedding 计算:计算候选样本的的 Embedding 向量;
  • 索引训练:基于树训练一个索引模型。

Experiment

简单看一下实验。

首先是不同

alpha

参数下的准确率:

不同数量的 hash 方程的表现情况:

5M 语料库下的离线实验:

10M 语料库下的离线实验:

线上 A/B 测试:

Conclusion

本文 Youtube 工业实战类型的推荐论文,主要介绍了搭建基于双塔模型搭建的神经检索系统的一些 Trick,包括流失数据处理中的采样偏差纠正,利用哈希加快检索效率,归一化提高准确率,加入超参

tau

来微调召回率和精确率。总的来说,还是一篇比较值得细品的论文。

Reference

  1. Yi X, Yang J, Hong L, et al. Sampling-bias-corrected neural modeling for large corpus item recommendations[C]//Proceedings of the 13th ACM Conference on Recommender Systems. 2019: 269-277.

0 人点赞