摘要
作者提出一个大规模的多目标排序在“what video to watch next”这个工业界的推荐场景下。主要是使用了软参数共享技术Multi-gate Mixture-of-Experts,同时通过W&D结构解决了选择性偏差问题
1.介绍
这篇文章主要focus在ranking阶段而不是召回阶段,在ranking阶段的两个大问题:多个冲突和互相影响的目标 ,以及隐性的偏差。对于多目标我们使用MMoE,对于偏差我们使用一个浅层的塔来进行建模,这样能够节省使用随机来进行偏差分数去除的流量(Learning to rank with selection bias in personal search)。框架如下
注意:
- wide部分和deep部分的合并是通过乘法来的,具体的参数是手调的,所以不是一个完全的end2end框架
2.相关工作
一般的推荐系统都是两步走,召回和排序。
召回包括:1)基于共现;2)基于协同过滤;3)在共现图上进行随机游走;4)基于内容表征(visual discover at pinterest);5)混合各种特征(youtube2016)
排序包括:1)使用线性和树模型进行point-wise和pair-wise学习;2)GBDT for pointwise;3)dnn for pointwise
我们的排序需要保持效果和效率,常见的方案就是使用dnn for point-wise,pair-wise太需要资源了
2.1 多目标学习
一个用户可能点击一个视频单最后点了不喜欢,一个用户可能只喜欢打分而不点击或者观看,我们的系统需要学习和预估用户的各种各样的行为,最后合并成一个最终的分数来进行排序(多种行为怎么合并?)
已知的系统针对多种目标一般只是在召回阶段而不适用于大规模的在线排序阶段,比如(Improving user topic interest profiles by behavior factorization)就会使用各种用户的信号来进行学习以产生候选。
2.2 理解模型偏差
使用当前模型训练的数据训练出来的新模型很有可能会产生(feedback loop effect)。通常去掉位置偏置的做法有这么几种:
- 在训练中将位置信息作为特征加入,而在预测时候将其固定。
- 使用归一化或者标准化,使用随机的数据来进行统计
- IPS(inverse propensity score)不需要随机数据,使用rank-SVM来进行标准化
在实际的社交网络中,用户和物品的流行度会经常变,所以我们不能使用IPS而需要一个效率更高的方式。
3.问题描述
除了上面提到的困难,实际的大规模视频推荐系统还需要考虑以下几个方面
- 多模态的特征空间,视频内容、封面图、音频、文本和描述、用户人口学特征等等,这就需要1)连接底层内容特征的语义gap;2)从item的稀疏分布中进行协同过滤。对于视频,我们提取了它的meta-data和视频内容信号作为ta的表达,对于上下文我们使用用户基本信息、设备、时间和地域特征
- 可扩展性,训练和预测都需要高效,所以我们也是分为召回和排序阶段, 召回大约几百个视频
3.1 召回
基于请求视频和候选视频的相似性召回 - 请求视频的topic相同
- 请求视频经常被一起观看的视频
- 序列模型来根据用户观看历史生成个性化视频(youtube2016)
- 上下文相关的高recall相关视频(《Efficient training on very large corpora via gramian estimation》)
3.2 排序
跟召回只选择相关的视频不一样,排序系统主要是提供一个对用户最有用的排序列表
4. 模型结构
4.1 系统总览
从两种数据中进行学习:1)参与型行为比如点击和观看;2)满意型行为比如点赞和取关
我们分别用分类模型和回归模型来进行多目标的学习,使用pointwise的学习方法,主要是出于系统性能的考虑。
4.2 排序目标
我们把点击、点赞作为分类任务,使用交叉熵作为loss;时长和投票作为回归任务,使用mae loss。最终的结果使用权重的合并方式,手工调整权重。
4.3 MMoE
生硬的使用底层的参数共享,如果目标在low的特征层面相关性不强的话其实是有害的,所以我们采用一种软参数共享的模型结构MMoE。主要是使用混合专家的结构,通过与MoE层替换relu层来为每一个任务加上单独的门网络结构,在我们的实验中,我们把expert加在共享隐层之上,结构如下:
MoE可以学习到一些高阶的特征,但是如果直接把MoE放在input层那么计算开销就太大了,因为input层的维度特别高。我们的export网络使用MLP和relu激活函数,我们使用了比较少的expert主要是为了训练的效率
4.4 建模和去除Bias
类似Wide&Deep模型结构,我们把模型预测分为两个部分,一个是main tower还有一个浅层的偏置tower,偏置tower主要是用来添加偏置信息。训练的时候我们会把大部分position和device信息加上,丢掉10%防止模型太过依赖这个特征。预测的时候,位置特征就直接当做miss。
5.实验结果
5.1 实验设置
我们训练新的model和baseline的model都是用的增量更新的方式,这样模型就能适应更实时的数据,这其实是一个比较难的事情,因为数据分布和用户行为会随着时间的变化而变化。
在离线实验中,我们主要对分类任务检查auc,对回归任务检查squared error。线上数据我们主要通过ab测试来对比效果,比如用户的点击、时长等等。
5.2 MMOE多目标
baseline的model是2a里面的隐层全共享结构,相比之下mmoe不管是4个expert还是8个expert效果都有提升。我们通过画出每个任务的每个export的softmax的门网络的累计概率发现,有些参与型任务的expert概率分布有很多是共享和类似的,但是满意度型的任务却不是,如下图。同时,如果是直接把MoE层架在input层之上却看不到明显的效果差别。
分布式训练的时候有可能让模型经常偏离,比如Relu death。我们发现门网络中有20%的概率会极化,我们通过10%概率让export失效和重新规范化softmax的输出方法减少了极化情况。
5.3去偏
位置偏置是一个很常见的现象,点击率高有可能是因为位置靠前。有几种去偏的方法
1)直接把位置作为输入的feature,在线性模型里面很常见
2)对抗学习,使用一个辅助的任务来预测位置,并且在反向传播的时候,对梯度取负来让底层的网络不去学习位置的逻辑
最终的结果是shallow tower效果很好
5.4 讨论
1)关于模型结构,很多经典的模型结构比如cnn或者attention对我们的场景不合适主要因为:
- 我们需要处理多模态的特征,比如内容特征,上下文特征,这些特征很多都是稀疏的类别特征
- 我们需要应对多目标,很多模型设计是为了获得某一种类型的信息,比如序列信息
- 大部分的系数特征都是幂率分布,同时用户的反馈有高方差,搜索与对于长尾的数据很难去优化他的embedding空间
- 基于minibatch的分布式训练本省就有很多挑战
2)关于效果和效率的折中,效率太低一样的影响用户体验,所以我们选择一种直接和简单的模型结构
3)关于训练数据的偏差,其实除了位置还有很多别的偏差,如何自动发现和学习这些我们不知道的偏差需要持续探索
4)关于评估的挑战,因为我们训练主要用的是用户的隐形反馈,所以离线评估的结果不一定能迁移到真实的表现,我们经常会发现离线和在线表现不一致,所以还是需要找一个简单一点的模型,这样泛化性能可能会好一些
5)关于未来的方向 - 探索新的模型结构来平衡训练性和表现
- 理解和学习去分解,自动的发现一些训练数据中潜在的偏差以及学习去除它们
- 模型压缩
6.重要的参考文献
Practical Lessons from Developing a Large-Scale Recommender System at Zalando
Practical lessons from predicting clicks on ads at facebook
Efficient training on very large corpora via gramian estimation
Improving user topic interest profiles by behavior factorization