结合论文看 Youtube 推荐系统中召回和排序的演进之路(中)篇

上一篇( 结合论文看Youtube推荐系统中召回和排序的演进之路(上)篇 )主要介绍的是Youtube发表的三篇论文,但主要集中在机器学习方向,接下来会用几篇论文说明一下Youtube在深度学习推荐系统方向做的工作。

在介绍Youtube的DNN之前,先介绍一篇Google的非常经典的深度学习推荐算法Wide & Deep,虽然Youtube 也属于Google,这里之所以先介绍Wide & Deep,因为我个人觉得这应该是深度学习应用在推荐系统排序上的「 基石 」之作,而且其提出的框架也是非常的经典。

2016年-Google Wide & Deep

Wide & Deep的论文全称为:《Wide & Deep Learning for Recommender Systems》,其首次发表应该是在2015年末,然后2016年的时候中了ACM的Deep Learning for Recommender Systems Workshop。

该论文提出了一种深度学习排序模型的框架,主要是联合线性模型和深度学习模型一起训练的新的框架下的模型。

Wide 部分是一个广义线性模型,因为具有非线性特征变换功能,而广泛应用在分类和回归上。通过特征之间的组合来对用户的兴趣进行排序是十分有效和可解释的,然后依赖大量的特征工程。相对于线性模型而言,DNN不强依赖人工特征,但可能由于高维稀疏的特征而产生过拟合。

推荐系统的一个挑战是同时满足对历史行为的总结和扩展,即Memorizaton 和 Generalization,其具体含义如下:

  • Memorization:近似的被定义为学习物品或特征的共性,探索用户历史行为数据中的相关性。
  • Generalization:基于相关性的传递,探索在历史行为中很少或者没有出现过的新特征组合情况。

这篇论文的主要贡献分为以下三点:

  • Wide & Deep联合训练具有嵌入的前馈神经网络和具有特征变换的线性模型,用于具有稀疏输入的通用推荐系统
  • WD在google应用商店上进行了线上测试和评估
  • 在TensorFlow API中贡献了源码,方便调用

Wide & Deep算法的原理可以使用下面的一张图表示:

a)Wide部分

wide部分对应上图中的左侧部分,通常是一个广义线性模型: y = w ∗ x + b y=w*x + b b

  • y y y :是要预测的结果
  • x x x :是一组特征向量
  • w w w :模型的参数
  • b b b :偏置量

特征集合包含的是原始输入和他们对应的特征转换,其中一个比较重要的转换是:cross-product transformation,其对应的公式如下:

ϕ k ( x ) = ∏ i = 1 d x i c k i \phi k(x)=\prod_{i=1}^{d} x_i^{c_{ki}} ϕ k ( x ) = i = 1 d x i c k i

c k i c_{ki} c k i

属于

0 , 1 {0,1} 0 , 1

上边的公式实现的其实就是one-hot编码,比如当gender=female,language=en时为1,其他为0。

b)Deep部分

deep部分对应上图中的右侧部分,是一个前馈神经网络。对于分类特征,原始输入是字符串(比如language=en)。这些稀疏、高维的分类特征第一步是转化为低维、密集的向量。这些向量通常在10-100维之间,一般采用随机的方法进行初始化,在训练过过程中通过最小化损失函数来优化模型。这些低维的向量传到神经网络的隐层中去。

每个隐层的计算方式如下:

a ( l + 1 ) = f ( W l a l + b l ) a^{(l+1)} = f(W^la^l + b^l) a ( l + 1 ) = f ( W l a l + b l )

其中:

  • l l l :神经网络的层数
  • f f f :激活函数(通常是relus)
  • a l a^l a l :第l层的输出值
  • b l b^l b l :第l层的偏置
  • W l W^l W l :第l层的权重

c)联合训练

wide部分和deep部分使用输出结果的对数几率加权和作为预测值,然后将其输入到一个逻辑回归函数用来联合训练。论文中强调了联合训练(Join training)和整体训练(ensemble)的区别。

  • Ensemble:两个模型分别独立训练,只在最终预测的时候才将两个模型结合计算;单个模型需要更大(比如进行特征转换)来保证结合后的准确率
  • Join trainging:在训练时,同时考虑wide部分和deep部分以及两个模型拼接起来的权重来同时优化所有的参数;wide部分可以通过少量的特征交叉来弥补deep部分的弱势

wide & deep的join training采用的是下批量梯度下降算法(min-batch stochastic optimization)进行优化的。在实验中,wide部分采用的是FTRL+L1,deep部分采用的是Adag。

对于LR,模型的预测结果如下:

P ( Y = 1 ∣ x ) = σ ( w w i d e T [ x , ϕ x ] + W d e e p T a ( l f ) + b ) P(Y=1|x)=\sigma (w^T_{wide}[x,\phi x] + W^T_{deep}a^{(l_f)}+b) P ( Y = 1 x ) = σ ( w w i d e T [ x , ϕ x ] + W d e e p T a ( l f ) + b )

其中:

  • Y Y Y :label
  • σ ( . ) \sigma (.) σ ( . ) :表示sigmoid函数
  • ϕ ( x ) \phi (x) ϕ ( x ) :原始特征x的交叉转换
  • b b b :偏置
  • w w i d e w_wide w w i d e :wide模型的权重
  • w d e e p w_deep w d e e p a ( l f ) a^{(l_f)} a ( l f ) 的权重

系统实现

Google的团队主要是再APP商店上进行了算法的实验,并取得了不粗的效果,APP商店的架构图如下:

上图主要包含了两部分,一部分是检索系统,一部分是排序系统。当用户进入app store时,被视作是一次query查询,伴随着的是用户维度和上下文维度的特征,检索系统会根据这些信息通过模型或者人工制定的规则匹配到一些用可能点击或者购买的APP。同时,这一次的请求行为会记录在日志中作为训练数据使用。

数据库中包含了百万级别的app,每次查询推荐系统不可能对所有的app进行排序,因此第一步是挑选候选集,然后在使用排序系统对候选集中的每个APP进行打分,计算出来的分数为P(y|x),即通过特征x计算出来的用户行为y的可能性。这些特征包括:

  • 用户维度的特征(城市,年龄,人口统计学特征等)
  • 上下文特征(设备,几点请求,周几请求)
  • APP维度特征(app上线时长,app的历史统计信息)

app推荐系统实现如下图所示,主要包含:数据准备,模型训练,模型服务。

a)数据准备

用户和app的展示数据用来生成训练数据,每次展示对应一条样本,label是用户是否安装推荐的app,安装的话为1,否则为0。

分类特征映射成ID编码类数据,连续型特征先映射到CDF(累积分布函数),再离散化到0-1,其离散化的方式如下:

x = i − 1 n − 1 x = \frac{i-1}{n-1} n 1 i 1

含义:首先将数据分为n份,落入第i份的数据离散化后为

x x x

b)模型训练

训练的模型结构图如上所示,wide部分的包含了用户安装app和展示app的交叉特征,deep部分每个分类特征生成32维的特征向量,连接所有的特征向量作为低维密集的特征,大约1200维。

论文中提到了一个注意点:如果每一次都重新训练的话,将会花费大量的时间和精力,为了解决这个问题,采取的方案时热启动,即每次新产生训练数据的时候,从之前的模型中读取embedding和线性模型的权重来初始化新模型,在接入实时流之前使用之前的模型进行校验,保证不出问题。

c)模型服务

为了保证每个请求都可以在 10 ms 内返回结果,我们通过多线程并行运行来优化性能,而不是单个 batch 内对所有候选集的 score 进行计算。

Memorization(记忆) and generalization(泛化)对于推荐系统而言很重,线性模型能够有效的记录特征之间的交互,神经网络模型能够低维的嵌入特征泛化到可能的特征交叉组合。目前wide & deep一般是企业进行深度学习推荐系统尝试的首选,而且在企业应用也十分广泛。

同时由于Wide & Deep算法的左右部分很容易被替换,因此也开辟了很多尝试和实验的可能性。

2016年-Youtube 深度学习推荐系统

这篇论文是Youtube2016年发表在RecSys上的,16年之前Youtube关于推荐系统的优化主要集中在机器学习方向(一般会再往前推1到2年,一般方案成熟时才会公布出来),自此开启了深度学习与推荐系统的主要工作,下面我们来看看这一篇论文介绍的内容。

论文详细介绍了Youtube是如何基于深度学习构建推荐系统的,包括召回部分和排序部分,下面的内容将会分为三部分进行介绍:

  • Youtube 深度推荐系统概述
  • 基于深度学习做召回
  • 基于深度学习做排序
  • 实践经验和见解

Youtube 深度推荐系统概述

整个推荐系统的架构如下图所示,其中candidate generation为生成候选池的神经网络,主要负责从大量的内容中产出少量的用户感兴趣的候选集合,ranking为排序的神经网络,最终推荐少量用户感兴趣的内容给用户。

两阶段推荐方法允许我们从大量视频中进行推荐,同时确保设备上出现的少量视频是个性化的,并且适合用户。此外,这种设计允许混合由其他来源生成的候选源。

论文中在验证推荐系统的好坏时,离线主要参考:精确率(precision,准确率是Accuracy)、召回率、loss值,线上主要通过ABTest来进行相关指标的验证,比如点击率、观看时长等。

基于深度学习的召回

a)网络结构

深度学习召回模型的网络结构如下图所示:

使用到的特征包括:

  • 观看序列视频的平均embedding、搜索关键词的平均embedding、其他序列embedding
  • 用户的地理位置信息、设备信息(embedding编码之后的)
  • 人口统计学特征(年龄、性别、登录状态等,并将其进行归一化到[0,1])

然后将所有特征进行拼接,得到网络的原始输入特征。

这里需要注意的是,论文中将推荐问题看成了多分类问题来进行模型的训练,如下面公式所示:

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_i u}} {\sum_{j \in V} e^{v_j u}} P ( w t = i U , C ) = j V e v j u e v i u

其中:

  • U U U 表示 u s e r user u s e r
  • C C C 表示上下文
  • w t w_t w t 表示 t t t 时刻看到的视频
  • u u u 表示 u s e r user u s e r 的embedding编码
  • v v v 表示 v i d e o video v i d e o 的embedding编码

b)召回模型中注意的点

论文中提到使用深度学习构建模型的好处是可以很轻松的添加连续、类别特征, 在构建模型的过程中有几个需要注意的点

  • 1、虽然Youtube平台上包括显式反馈数据,但是构建数据集的时候采用的是隐式反馈,即用户观看了一个视频,则视为一条正样本
  • 2、因为作为分类来进行模型的训练,负样本规模巨大,所以采用随机负采样的方法构建负样本
  • 3、使用word2vec等方法产出基础的video embedding,并随着模型的训练和其他参数一起更新
  • 4、论文中特意提到了一个特征: Age ,视频的年龄特征,因为用户上传的视频随着时间的变化,其流行度是极其不平稳的,如果忽略了这个特征,会引起一定的偏差,因此定义了视频年龄这个特征,对于新上传的视频是0。论文中还特意提到引入时间特征和不引入时间特征的对比图,如下所示,蓝色的线为基本模型,红色的线为增加了age特征,可以看出增加该特征后,模型预估的分布十分接近经验分布。
  • 5、构建用户序列数据时,应该是基于全平台的数据进行构建的,而不仅仅是推荐结果,这样有利于新内容的建模
  • 6、 构建序列时每个用户采用相同长度的序列,目的是降低活跃用户的影响
  • 7、打乱搜索序列数据,避免时序带来影响
  • 8、选取序列时,只使用label前的序列数据,避免引起 数据穿越
  • 9、视频和搜索关键词被编码成256长度的embedding,序列长度为50
  • 10、用户的最终表示向量和视频的最终表示向量维度要一致,然后才能做内积计算,如结构图的右上角所示

c)在线召回

在线服务阶段,通过视频向量 v v v 和用户向量 u u u 进行相似度计算,为了满足时延要求,在进行实际的召回计算时采用的是最近邻查询的方式。对于每个用户向量 u u u ,对视频库中的所有视频根据向量 v v v 做最近邻算法,得到top-N的视频作为召回结果。

基于深度学习的排序

a)网络结构

排序模型的网络结构图如下所示:

整个结构分为:

  • 特征输入拼接层 :序列embedding特征,类别特征的embedding,连续特征的处理之后进行拼接
  • 三层的神经网络 :每层神经网络激活函数使用的是ReLU,最优得结构为: 1024 − > 512 − > 256 1024 ->512 ->256 1 0 2 4 > 5 1 2 > 2 5 6
  • 输出层 :在训练时,采用得时加权得逻辑回归,在线预测时,采用的是 e W x + b e^{Wx + b} e W x + b

b)特征表示

模型使用到的特征是非常丰富的,首先将特征分为:离散特征和连续特征(每类特征的处理方式不同),离散特征又可以划分为二值的(比如登录状态,即是否登录)和多值的(用户搜索关键词),连续特征主要是一些统计类特征,比如观看时长,年龄等。

论文中提到一些独特的特征构造和一些通用的特征处理方式。

1、特征构造

  • 用户会上传视频到指定的频道,那么用户在其上传频道下的观看视频次数是一个很重要的特征(也可以扩展到,用户在需要排序的item所属频道下的观看次数等统计指标)
  • 用户距离上一次观看item所属频道下的视频的时间
  • 用户的实时交互特征也特别重要,比如第一刷的时候,用户对视频产生了行为(正向的或者负向的),那么在第二刷的时候应该被体现到(但是这个比较依赖数据实时处理技术,对数据延迟不太友好)
  • 其他的就是一些正常的特征构造技巧,但一些独特的特征还是需要深入业务进行了解和挖掘

2、类别特征的embedding编码

  • 类别特征的embedding编码可以采用基础的word2vec技术进行向量生成,然后通过look-up的技术进行使用
  • 但是如果类别特征基数特别大时,加载全量的embedding特征也很困难,因此论文中提到了一种方法:根据item的点击次数,只生成top N的item embeding向量,剩余的采用0向量进行填充
  • 同一ID空间中的分类特征也共享底层的embedding,尽管embedding进行了共享,但每个特征都被单独的输入到网络中,这样上面的层就可以学习到每个特征的表示
  • 共享embedding对于模型的泛化性、训练速度和减少内存都是至关重要的

3、连续特征的归一化和其他处理

  • 首先论文提到神经网络对于输入特征的缩放和分布是非常敏感的,而其他的例如树模型对这些则不受影响,这在平时使用树模型做排序和dnn模型做排序时也可以深深的体会到
  • 特征的正则化处理对于特征的融合十分重要
  • 这里提到了几种对连续特征的处理方式,假设原始的连续特征为 x x x
    • 累计分位点(标准化操作): x ~ = ∫ − ∞ x d f \tilde{x} = \int_{- \infty}^{x} df x d f
    • 累计分位点求根号( 获得特征次线性 sub-linear ): x ~ \sqrt{\tilde{x}} x ~
    • 累计分位点求平方( 获得特征超线性 super-linear ): x ~ 2 \tilde{x} ^2 x ~ 2

c)用户观看时长建模

模型的目标是预测用户观看时长,有点击行为的为正样本,有曝光但是无点击的为负样本,正样本需要根据观看时长进行加权,因此,训练阶段网络最后一层用的是 w e i g h t l o g i s t i c r e g r e s s i o n weight logistic regression w e i g h t l o g i s t i c r e g r e s s i o n

∑ T i N − k \frac{\sum T_i} {N -k} N k T i

其中:

  • N N N 表示总的样本数量
  • k k k 表示正样本的数量
  • T i T_i T i 表示第 i i i 个样本的观看时长

一般来讲, k k k 相对 N N N 较小,因此上述公式的期望可以转换成:

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 e x 作为激励函数,就是近似的估计期望观看时长。

d)隐层网络的选择

上图展示了不同隐藏层网络选择下的数据指标,从中可以看出采用三层的神经网络( 1024 − > 512 − > 256 1024 -> 512 -> 256 1 0 2 4 > 5 1 2 > 2 5 6 )效果是最好的(当然由于这里没有列出更多的隐藏层选择,可能是因为效果不好,或者线上预测时的延迟太高)。

在选定网络结构之后,论文作者也尝试了对连续特征归一化后不进行超线性和次线性的特征扩展,loss增加0.2%;把weighted lr 换成lr,效果下降了4.1%。

实践经验和见解

论文中提出的召回和排序模型结构相比较矩阵分解类召回、树模型排序等取得了不错的效果,这也说明深度学习推荐系统是工业界的主流趋势,我们应该拥抱深度学习推荐系统。

论文中很值得借鉴和思考的点其实在上面的内容中已经介绍到了,主要包括:

  • 经典的三层的网络结构
  • 序列特征的处理方式
  • 连续特征的处理方式
  • 离线模型的评估和模型的优化扩展对比
  • 在线实验ABTest
  • CTR类模型中label的选取
  • … …

这里推荐王喆老师的一篇文章,也是介绍youtube dnn的,思考点也很多:https://zhuanlan.zhihu.com/p/52169807

2019年-Youtube 基于多任务学习的排序

这篇论文是Youtube2019年发表在RecSys上的,这篇论文主要是针对推荐系统排序阶段的多任务深度学习模型,下面我们来看看这一篇论文介绍的内容。

论文名称: Recommending What Video to Watch Next: A Multitask Ranking System

下面的内容后半部分来自公众号:「数据与智能」,老哥总结的很全面,所有迁移过来了,点赞!

论文提出了一个在Youtube视频分享平台上基于当前观看视频预测用户下一部要观看的视频的大型多目标视频排序系统(其业务形态如下图所示),论文聚焦于推荐排序阶段,其面临的真实业务场景中的挑战主要体现在:

  • 1、面临多个不同甚至相互冲突的的排序目标;比如,我们希望用户观看某个视频,并且还希望他能够给视频高评分并分享给他的好友
  • 2、用户对推荐结果隐式反馈产生的选择偏差;比如用户可能会观看一个评分比较高(因此排在推荐列表的前面)的视频但是用户本身不是特别喜欢这个视频

为了解决如上两个现实问题,论文通过软参数共享技术(soft-parameter sharing techniques,比如Multi-gate Mixture-of-Experts,简称MMoE)来优化多个排序目标。另外通过引入Wide & Deep框架,该模型增加一个整合了偏差信息的浅层塔结构来解决选择偏差问题,最终在Youtube上做在线AB测试验证,可以显著提高多种排序目标的推荐质量。

相关工作

本部分作者主要探讨三方面的内容:

  • 1、工业推荐系统概况
  • 2、多目标推荐系统
  • 3、理解训练数据中的偏差

a)工业推荐系统概况

大多数推荐系统包含两部分:候选集的生成,排序。对于候选集的生成,可以使用多种算法,比如基于共现的算法、协同、基于图的embedding表示法、矩阵分解等,排序侧的算法使用更是丰富,比如线性模型(pair-wise)、树模型(point-wise)等LTR方法、基于point-wise的DNN算法等。

更多关于LTR框架的知识可以参考: 怎么理解基于机器学习“四大支柱”划分的学习排序方法

论文中,首次明确了工业排序系统中的一个关键问题:用户隐式反馈和用户在推荐项上的真实反馈不一致问题。随后,我们提出了一个深度神经网络排序模型,该模型使用多任务学习技术来支持多个排名目标,每个目标对应一种类型的用户反馈。

b)多目标推荐系统

从训练数据中学习和预测用户的行为偏好是极具挑战的,因为用户的行为是丰富多样的,比如点击、评分、评论等,然后每种行为并不能真实的表现用户的兴趣,比如用户点击了一个item,但是用户并不喜欢它,用户可以仅仅对点击的或者参与的其他item提供一个评分但是并不是真的喜欢它。

我们的排序系统需要有能力的、去学习和捕获用户的多种行为,然后结合这些估计去计算用户最终的排序分数。

例如我们可以根据用户的多种行为构建user-item的矩阵,但是这种方式在离线运行比较方便,线上实时排序时则失去了很好的扩展性。另一方面,许多存在的多目标排序系统是专为特定类型的功能和应用程序而设计,如文本和视觉,这些系统对于支持多目标任务的特征空间来讲是具有很大的挑战的,而其他考虑多种输入特征的多目标排序系统由于其在有效共享多目标模型参数方面的局限性而无法扩展。

基于多任务学习的DNN已经广泛应用于传统的机器学习任务,比如表示学习、NLP、计算机视觉等,因此我们也可以将这些思路和做法移植和拓展到推荐系统上。

c)理解训练数据中的偏差

用户和推荐出的item之间的行为交互会产生选择偏差,比如用户点击了一个排序系统推出的item,但是在整个语料库中它可能并不是最有用的。

因此基于排序系统产出的训练数据训练的模型会向排序系统产生偏差,从而产生反馈回路效应。如何有效的学习研究排序系统中这样的偏差情况是一个开放的问题。

Joachims等在论文《Evaluating the accuracy of implicit feedback from clicks and query reformulations in web search》首次分析了隐式反馈数据中的位置偏差和呈现偏差,以此训练排序模型。通过比较点击数据和显式反馈的相关性,他们发现点击数据中存在位置偏差,并且在估计查询和文档之间的相关性时可以显著影响排序模型的学习。

选择偏差指得是信息流类的场景中,由于item的位置不同,用户在进行点击时会受到影响,这种一种选择偏差,但一般去讲选择偏差时主要谈的是位置偏差,因为分析表示,排在前边的item点击率是要比后边的高。所以在文章中,会交替出现选择偏差和位置偏差,我们可以理解是同一种意思。

一种常见的消除位置偏差的方法是将位置作为输入模型的特征,在CTR模型中位置特征用来学习位置与目标的相关性概率: p ( r e l e v a n c e ∣ p o s ) p(relevance|pos) p ( r e l e v a n c e p o s ) ,当在线预测时,另 p o s = 1 pos=1 p o s = 1 ,更加详细的内容可以参考论文:《A dynamic bayesian network click model for web search ranking. In Proceedings of the 18th international conference on World wide web》

另外一种从位置中学习偏差的方法是将其作为一个正则化或标准化。通常要学习偏差项,需要使用失血随机数据来推断偏差项(称为“全局偏差”,“倾向”)而不考虑相关性,在论文《Unbiased learning-to-rank with biased feedback》中,倾向得分(inverse propensity score,IPS)是通过反事实模型学习得到的,不需要随机数据。在Rank-SVM模型中,位置特征被用作正则项。

在真实的推荐系统中,尤其是社会媒体平台,比如说Twitter、Youtube,用户的行为和item的流行趋势变化的很快,IPS方法并不能很好的适用,因此在训练排序模型时需要一种更加有效的方法去消除位置偏差。

问题描述

在真实的、稀疏的视频推荐系统中,基于隐式反馈训练排序模型需要考虑两个重要的因素:

  • 1、多模态特征空间,在一个上下文感知的个性化推荐系统中,我们需要利用多模式生成的特征空间来学习候选视频的用户效果,例如视频内容、缩略图、音频、标题和描述、用户统计信息。与其他的机器学习系统相比,从多模态特征空间中进行推荐的学习表示具有独特的挑战性。 它涉及两个难题:
    • 1、弥补低维内容特征的语义鸿沟,以此来实现内容的协同
    • 2、从稀疏的项目空间中进行协作学习
  • 2、可扩展性,主要指的是推荐系统的高效性和可扩展性

为了解决多模态特征空间问题:对于每个视频,我们提取诸如视频元数据和视频内容信号之类的特征作为其表示,对于上下文,我们使用诸如用户人口统计,设备,时间和位置等特征。

为了解决系统的扩展性,采用了两段式的推荐系统架构,即生成候选池、排序。

a)生成候选池

Youtube视频推荐系统中依旧采用了多路召回的思路,比如:

  • 匹配用户搜索视频的主题来进行召回
  • 基于视频的共现频率进行的召回
  • 基于序列模型的召回
  • 基于上下文的召回

最后将所有的召回形成一个集合,构建出候选池

b)排序

不同于候选池的生成,排序模型的主要目标是提供一个排序列表,用户高概率会交互的视频排列在前边。因此,这里采用的是神经网络架构,以具有足够的模型表达能力来学习特征的关联及其与目标的关系。

模型架构

a)基本框架

模型的基本框架如上图所示,最终的优化目标分为两大类:

  • 1、用户参与度(engagement objectives)指标,比如点击率、为用户推荐视频的用户满意度等
  • 2、用户满意度(satisfaction objectives)指标,比如用户点赞视频、用户给推荐视频的评分等

为了学习和估计多样的用户行为,该模型基于wide & deep模型架构做了拓展,采用MMoE技术来自动学习多个可能存在冲突的目标的共享模型参数。上图中间偏右的Mixture-of-Experts模块从多种输入数据源中学习数据不同维度的特征,每个维度可以类比为某个方面的“专家”(Experts),再通过使用多个门控网络(Gating Networks)模块(见上图中间部分),不同的学习目标可以选择不同的或者共享的”专家“来最终优化多目标任务。

为了减少从有偏差的训练数据中产生的模型偏差(比如位置偏差),该模型加入了一个浅层塔(shallow tower)模块(见上图左边蓝色的shollow tower模块),这个模块可以类比wide & deep模型中的wide部分。该模块通过整合推荐的视频的位置信息等可能产生偏差的信息,最终作为主模型的偏差项(浅塔模型输出是一个具体的数值)整合进主模型进行学习,而在推断时,可以将位置参数设置为pos=1来消除位置产生的影响。

论文的主要贡献点:

  • 引入一个端到端的推荐排序模型
  • 将排序模型抽象为一个多任务学习问题,并且利用MMoE技术优化多目标学习
  • 通过采用wide & deep架构,引入浅层塔结构避免位置偏差
  • 通过在Youtube上进行AB测试,证明可以大幅度提升模型的效果

b)系统概述

论文中的排序系统学习两类用户反馈:

  • 用户参与行为(如点击、播放等)
  • 用户满意度行为(喜欢、不喜欢等)。

对每个待排序的候选视频,排序模型利用候选视频的特征、query(如用户播放历史或者用户人口统计学特征等)、上下文(如观看时的时间等)作为输入来预测多种用户行为

采用LTR(learning to rank)框架,将预测问题建模为分类或者回归问题。具体是利用point-wise方法,而不是pair-wise或者list-wise LTR方法,主要是因为point-wise更简单,可以有效地拓展到大规模的候选集排序中,尽管pair-wise和list-wise方法可以增加预测结果的多样性。

c)排序目标的定义

排序模型利用用户的行为作为训练的label。在「 b)系统概述 」中提到排序模型预测参与性目标与满意性目标。对于参与度目标(如点击与播放),将预测行为建模为二分类任务(如点击) 和回归任务(如用户播放时长)两大类。类似地,对于满意度目标,也可以建模为二分类任务和回归任务两大类,比如,喜欢某个视频可以看成是二分类任务,对视频进行评分可以看成是回归任务。对于二分类任务,可以采用交叉熵(cross entropy)损失函数,而对于回归任务,可以采用平方损失函数。

一旦多任务排序的目标和建模问题类型确定了,我们可以训练多任务排序模型来进行最终的排序。对任意一个候选视频,我们通过多个目标预测模型的输入获得一个综合得分(通过多个预测模型得分的加权乘积,权重通过手动调整,需要权衡用户参与度和满意度目标)。

d)利用MMoE来对任务的相关性和冲突性建模

多目标排序系统的学习一般使用一个共用的底层模型(如上图左边的网络结构),但是硬编码的参数共享往往对学习多目标是有副作用的,特别是当这些不同学习任务相关性很低时。为了避免这种情况,这篇论文采用了MMoE技术,MMoE采用软参数共享结构,可以消除多任务目标中的存在冲突的目标。

MMoE采用Mixture-of-Experts(MoE)结构应对多任务学习,让多个任务共享这些“专家”,同时,每个任务配备一个训练好的门控网络(gating network)来协调不同“专家“所起的作用。相比于共享的底层模型结构,MMoE需要更少的参数。MMoE的核心思想是对每个学习任务将共享的ReLU层替换为MoE层并加上门控网络。

推荐排序系统通过在共享的隐含层之上增加”专家“层(如上图右边网络结构),让最终的模型可以从输入中学习模块化的信息。在输入层或者隐含层之上增加”专家“层,最终可以更好地对多模态的特征空间进行建模。但是直接加在输入层之上会增加模型训练和推断的时间开销(因为输入层维度相比隐含层包含更多的参数,参数越多,训练效率往往越低),因此该论文采用”专家“层直接加在隐含层之上的方法。

该模型的”专家“网络是利用ReLU作为激活函数的多层感知机。对于任务 k k k 和预测值 y k y_k y k 及最后一个隐含层 h k h^k h k 。包含 n n n 个”专家”的MMoE层在任务 k k k 上的输出为: f k ( x ) f^k(x) f k ( x ) ,可以用如下方程来表示:

y k = h k ( f k ( x ) ) w h e r e f k ( x ) = ∑ i = 1 n g ( i ) k ( x ) f i ( x ) y_k = h^k (f^k(x)) \\ where f^k(x) = \sum_{i=1}^{n} g_{(i)}^k (x) f_i(x) h k ( f k ( x ) ) w h e r e f k ( x ) = i = 1 n g ( i ) k ( x ) f i ( x )

这里 x ∈ R d x \in R^d R d 是共享隐含层的低维嵌入向量, g k g^k g k 是任务 k k k 的门控网络, g k ( x ) ∈ R n g^k(x) \in R^n g k ( x ) R n 是第 i i i 个分量,而 f i ( x ) f_i(x) f i ( x ) 是第 i i i 个”专家”。门控网络是输入通过简单线性变换后再经过softmax变换,即:

g k ( x ) = s o f t m a x ( W g k x ) g^k(x) = softmax(W_{g^k}x) g k ( x ) = s o f t m a x ( W g k x )

这里, W g k W_{g^k} W g k 是线性变换的自由参数。“专家”的数量可以设置为很多个,但是论文构建的模型中只用少量的”专家”,期望”专家”可以被更多的任务共享,这样做主要是期望提升模型的训练效率(“专家”数越多参数越大)。

e)通过整合浅层塔结构提出位置等带来的偏差

隐式反馈数据被广泛用于排序学习模型的训练中。从用户行为日志中可以获得大量的隐式反馈信息,因此可以利用复杂的神经网络模型来学习排序特征。但是,很多隐式反馈是从推荐排序系统的产品交互中产生的(我们通过给用户推荐视频,用户点击推荐的视频产生隐式反馈行为),因此是带有偏差的。位置偏差(推荐的视频在推荐列表中所排的次序)及其他类型的偏差被大量研究者在排序学习模型中所证实。

在我们的排序系统中,这里的查询请求是当前用户正在观看的视频(如果将推荐问题看成一个搜素问题,那么当前在看的视频可以等价于搜素的查询关键词),候选视频是相关的视频,用户通常倾向于点击并观看显示在列表顶部的视频,而不管这些视频的真实用户效用(与观看视频的相关性、用户的偏好)如何(这是一种先入为主的效应,因此会产生位置偏差)。我们的目标是从排序模型中消除这种位置偏差。在我们的训练数据中或在模型训练过程中通过建模减少选择偏差可以提升模型质量。

我们的模型采用跟wide & deep类似的结构,将模型预测分解为两个部分:来自主塔的用户效用(user-utility)部分和来自浅层塔的偏差部分。具体地说,我们训练一个包含选择偏差(如位置偏差)特征的浅塔模型,然后将其输出添加到主模型的Logit中,如下图5所示。在训练中,使用所有视频的位置信息,采用drop-out的思路,随机丢弃10%的位置信息,以防止我们的模型过度依赖位置特征。在模型推断期间,将位置特征设置为缺失值(这样所以视频的位置信息都不考虑了,从而剔除了位置偏差)。同时我们将位置特征与设备特征交叉(是因为在不同类型的设备上观察到不同的位置偏差)。

排序模型核心亮点解读

通过上面的详细讲解,我们介绍完了这篇非常有工程参考价值的推荐排序学习模型。在这一节我们来梳理一下该模型的核心亮点,这些点都是值得我们参考借鉴的。

a)通过多任务学习来进行排序

该模型通过将用户的行为分为参与度行为与满意度行为两大类,作为独立的任务,通过机器学习中的多任务学习框架来建模。参与度行为更多的是隐式反馈,而满意度行为更多的用户的主动反馈,在同一个模型中整合这两类反馈可以充分利用已知信息,提升模型的精准度。使用多种类型的隐式反馈信号和多个排序目标,我们获得了更多调控手段,更好地平衡模型预测结果和用户真实兴趣之间的关系。

b)通过MMoE技术来平衡多目标

有了多任务框架,那么怎么来学习和平衡这两类任务呢?MMoE框架通过在不同任务之间共享“专家”的方式来更好地平衡多任务之间的冲突和相关关系,可以更好地学习多任务模型。这个思想是非常朴素的,不同的”专家“有不同的优点和特长,不同任务通过在不同“专家”上学习到不同的权重参数分布(可以简单理解为选择适合自己的“专家”),最终达到更好地刻画每个任务的目的,最终提升整体模型的效果。

分布式训练一般可能会导致模型发散。在MMoE模型中,采用softmax激活函数的门控网络会导致“专家”分布不平衡的问题,最终导致很多“专家”的效用为0,该论文作者在实验中发现大概20%的概率会出现这种情况,作者采用drop-out的方式来解决了该问题,具体就是采用10%的概率随机设置”专家“的效用为0,并且重新归一化softmax的输出。

c)通过整合位置信息来消除偏差

采用wide & deep的双塔结构,在浅层塔中通过整合位置信息,让模型学到位置偏差,最终在模型推断时剔除掉位置偏差,从而让模型有更好的表现。位置偏差等选择偏差是推荐算法工程师在构建推荐模型中很少会考虑的(但是一般是会意识到这个问题的)的一类影响因子。该模型提供了一种消除位置偏差的解决方案和思路。

d)按照时间序将数据灌入模型训练

作者按照样本产生的时间顺序依次训练模型。先训练之前的数据,当有新的样本产生时再将新样本加入训练中。通过这样做,模型可以适应最新的数据。这对于许多实际的推荐应用来说是非常关键的,在这些实际应用中,数据分布和用户模式会随着时间的推移而动态变化。

建模过程中面临的挑战

在构建YouTube排序推荐模型过程中会面临很多问题与挑战,这里我们简要整理一下,本篇论文对这些问题与挑战给出了相应的解决方案,在前面都有所讲解。这些问题及经验教训值得我们多思考。

a)构建基于神经网络的推荐排序算法面临的问题

许多推荐系统研究扩展了最初为传统机器学习应用设计的模型体系结构,如自然语言处理的multi-headed attention和计算机视觉的cnn算法。然而,许多适合于特定领域的表示学习的模型体系结构并不直接适用于YouTube的推荐需求。这是由于:

多模态特征空间

YouTube排序模型依赖多种数据源的特征,这些特征包括类别特征、文本、图像等等,从混合特征中进行学习是非常有挑战的。

可拓展性及多目标排序

很多模型结构被设计来建模某种信息,它们在提升某个目标的同时可能损害另外一个目标,通过构建复杂的模型结构来处理多目标又往往无法拓展到大规模数据场景。

包含噪音及局部稀疏的数据

排序系统需要训练视频和查询的嵌入向量。然而,大多数稀疏特性遵循幂律分布,并且在用户反馈上有较大的差异。比如,在同一条件下,用户可能会播放或者不播放一个视频仅仅由于推荐视频的视频海报图清晰度上的一点点差异,而这些差异又很难被算法捕捉到,因此,对于长尾内容训练出好的嵌入表示是非常困难的。

利用mini-batch随机梯度下降法来分布式训练

当数据量大,模型表达能力强(模型复杂,参数多)时,必须要用分布式技术进行训练,这本身在工程上就是一件非常有挑战的事情(需要搭建分布式计算平台来支持模型训练,还要实现分布式算法)。论文作者基于TensorFlow利用TPU来训练模型,利用TFX(见参考文献7)来提供生产服务。

效果与效率的平衡

在工业级推荐系统中,效率除了影响请求时间外,也会影响用户体验。过于复杂的模型会显著增加生成视频推荐结果的延迟,从而降低用户满意度和在线指标。因此,我们通常更热衷于使用更简单、更直接的模型。

b)训练数据中的偏差

除了位置偏差外,模型可能还存在其他种类的偏差,这些偏差可能是未知的。自动化地学习和捕获这些偏差本身就是一个非常复杂的问题。

c)模型评估面临的挑战

由于排序模型使用隐式反馈,线下评估好的模型上线后不一定真实的线上指标就好,甚至有时真实线上指标效果会更差。一般来说,可以选择一个简单的模型,这样可以更好地推广到线上,产生相对较好的结果,也就是说,简单的模型能更好地保证线下和线上指标的一致性。

优化方向

论文作者在文章最后总结了几个对该模型进行优化的方向,具体包含如下3点:

a)探索新模型架构,在稳定性、可训练性、强表达能力等三方面达到平衡

MMoE技术通过灵活选择哪些“专家”可以共享来提升多任务排序模型的性能,参考文献5提供了另一种架构,除了可以保证模型性能外,还能提升模型稳定性,是值得研究的一个方向。

b)理解和识别偏差

为了对已知和未知的偏差进行建模,探索从训练数据中自动识别潜在偏差并学习如何减少这些偏差的模型架构和目标函数是一个值得研究的方向。

c)模型压缩

为了降低请求延迟,可以使用不同类型的模型压缩技术(见参考文献6),减少模型大小,从而提升处理效率。

该论文通过构建多任务学习模型,利用MMoE技术来平衡多个任务之间的相关或者冲突关系从而更好地平衡多个目标。同时将位置偏差信息整合进模型,消除偏差影响,最终达到非常好的线上效果。

从这篇文章出发,我们可以进行更深入的思考。比如视频一般是包含贴片广告的,增加贴片广告(从而为公司创造广告收益)和用户体验之间也是一对冲突的目标,是否可以采用多任务学习的方式来寻求广告收益和用户体验的平衡呢?除了位置偏差外,视频海报的颜色、清晰度是否会产生偏差呢?怎么通过将这些因素引入模型解决相关的偏差呢?这些都是值得探索的问题,相信本文给我提供了很好的思路,为我们指明了探索的方向。

【技术服务】,详情点击查看:
https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!