前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【CTR】Youtube:双塔召回模型

【CTR】Youtube:双塔召回模型

作者头像
阿泽 Crz
发布2020-07-21 11:43:40
3K0
发布2020-07-21 11:43:40
举报
文章被收录于专栏:阿泽的学习笔记

作者:阿泽

本文是 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_{j\in[B],j\neq 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.
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿泽的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Introduction
  • Modeling
    • Framework
      • Streaming Frequency Estimation
        • Neural Retrieval System
        • Experiment
        • Conclusion
        • Reference
        相关产品与服务
        批量计算
        批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档