百度多场景多任务模型MTMS:《Multi-Task and Multi-Scene Unified Ranking Model for Online Advertising》
背景
百度在线广告包含不同的场景,如搜索广告、信息流广告,通个场景也需要建模不同的目标,如CTR、CVR,构建统一的多场景多任务精排模型存在两大挑战:
- 不同目标之间数据不平衡。比如CTR和CVR,如果同时训练这俩目标,模型很可能偏向于CTR,导致CVR的指标受损。
- embedding耦合。多任务或多场景共享embedding是常见的范式,好处是能够缓解部分场景的数据稀疏性问题,坏处是模型不同场景不同任务embedding耦合在一起,拓展性差且容易有跷跷板问题。尤其当场景的数量很多的时候,这个问题更为严重。比如百度可能有超过100个场景。
为了解决这样的问题,作者提出了一种面向多任务多场景的统一精排模型。文章主要的贡献有2个部分:
- 提出了一种面向多任务多场景的统一精排模型MTMS,为每个场景每个目标设置独立的embedding表征。不同组件之间耦合度低,对于场景或任务的扩展性好。
- 提出了一种交替更新的模型训练策略。embedding update时关注表征的学习,fine tuning时固定住表征,只更新排序上层的网络参数。
方法
技术架构
这里以信息流广告和搜索广告两个场景(百度实际有100+场景)为例子展示MTMS的整体架构:我们从下往上看,最下面一层是各个场景的数据源,第二层是统一特征管理的一个服务,第三层是各个场景user、item的特征表征,最上面一层是各个场景的预估任务
百度通过这样的技术架构可以方便的接入多个场景
模型结构
整体采用了ESMM的模型结构,但是有以下几点不同:
1. 显式建模了CVR
我们知道,ESMM只建模CTR和CTCVR两个目标,CVR是间接被训练的,百度经过分析发现,当转化率(CVR)的训练数据非常稀疏且 CVR 的 AUC 水平相对较低时,ESMM效果良好,当 CVR 的训练数据变得丰富且 AUC 较高时,CTR 任务就会对 CVR 预测产生负面影响。百度场景的 CVR 的 AUC 相对较高。因此,MTMS没有像在 ESMM 中那样将 CVR 视为一个中间变量,而是选择对 CVR 进行显式建模:
\[ L_{ESMM} = L_{CTR}(\theta_{ctr}) + L_{CTCVR}(\theta_{ctr}, \theta_{cvr}) \]
\[ L_{MTMS} = L_{CTR}(\theta_{ctr}) + L_{CVR}(\theta_{cvr}) + L_{CTCVR}(\theta_{ctr}, \theta_{cvr}) \]
2. embedding不共享
ESMM中CTR和CVR任务是共享的特征embedding,但是MTMS不同场景的不同任务的特征embedding是不共享的
3. 交替训练
MTMS训练过程分两个步骤交替进行:
(1)训练embedding
如上图(b)所示,在此阶段各个场景会独立的训练模型,训练完成后得到各个场景各个任务训练的好的特征embedding
(2)训练dense网络
如上图(c)所示,在此阶段会固定上一阶段训练好的embedding参数,然后训练dense部分参数,需要注意的是这一步训练的dense网络和第一步训练的dense网络结构是不同的,会更大一些,因为这一步训练的dense网络会拼接不同场景的embedding作为输入,比如同一个user_id,在不同场景下都训练得到了1个embedding,那么在finetune的时候,对某个场景的某个任务,该user_id所有场景的向量可以一起参与finetune和predict,这样就利用到了其他场景的信息了
补充:百度两阶段训练方式
解决的问题:为了解决样本shuffle之后统计特征和序列特征穿越导致的过拟合问题
方案:
- 并行训练模型0和模型1
- 模型0只更新NN参数,模型1所有参数都更新,定时把模型1的统计特征和sparse embedding同步到模型0
- 最终用模型0的NN参数和模型1的统计特征和sparse embedding构成的模型serving