1 ESMM

1.1 背景

Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate
论文基于 Multi-Task Learning (MTL) 的思路,提出一种名为ESMM的CVR预估模型,有效解决了真实场景中CVR预估面临的数据稀疏以及样本选择偏差这两个关键问题。

  • 样本选择偏差:构建的训练样本集的分布采样不准确
  • 稀疏数据:点击样本占曝光样本的比例很小

    1.1.1 样本选择偏差 Sample Selection Bias(SSB)

    转化是在点击之后才“有可能”发生的动作,传统CVR模型通常以点击数据为训练集,其中点击未转化为负例,点击并转化为正例。但是训练好的模型实际使用时,则是对整个空间的样本进行预估,而非只对点击样本进行预估。即训练数据与实际要预测的数据来自不同分布,这个偏差对模型的泛化能力构成了很大挑战,导致模型上线后,线上业务效果往往一般。
    image.png

    1.1.2 稀疏数据 Data Sparsity(DS)

    CVR预估任务的使用的训练数据(即点击样本)远小于CTR预估训练使用的曝光样本。仅使用数量较小的样本进行训练,会导致深度模型拟合困难。
    一些策略可以缓解这两个问题,例如从曝光集中对unclicked样本抽样做负例缓解SSB,对转化样本过采样缓解DS等。但无论哪种方法,都没有从实质上解决上面任一个问题。
    由于点击=>转化,本身是两个强相关的连续行为,作者希望在模型结构中显示考虑这种“行为链关系”,从而可以在整个空间上进行训练及预测。这涉及到CTR与CVR两个任务,因此使用多任务学习(MTL)是一个自然的选择,论文的关键亮点正在于“如何搭建”这个MTL。


    1.2 ESMM 模型核心思想

    CTR:点击率预估模型

CVR:转化率预估模型

CRVR:点击转化率预估模型

ESMM引入两个辅助任务 CTR 以及 CTCVR 消除了之前传统的CVR问题并同时得到了CVR模型,在ESMM中训练的模型就是针对全空间样本S来训练的,通过估计CTR以及估计CTCVR来得到CVR
Task04 多任务模型:ESMM、MMOE - 图2

其中Task04 多任务模型:ESMM、MMOE - 图3表示曝光,Task04 多任务模型:ESMM、MMOE - 图4表示点击, Task04 多任务模型:ESMM、MMOE - 图5表示转化

  • 损失函数

ESMM的损失函数由CTR以及CTCVR的损失函数组成
Task04 多任务模型:ESMM、MMOE - 图6

其中 Task04 多任务模型:ESMM、MMOE - 图7Task04 多任务模型:ESMM、MMOE - 图8 分别是CVR网络和CTR网络的参数, Task04 多任务模型:ESMM、MMOE - 图9 是交叉熵损失函数,在CTR任务中,点击表示正样本,其余的表示负样本;在CVR任务中,点击并转化的表示正样本,其余的表示负样本。
image.png
整个模型的结构非常的简单清晰,分为一个main task和一个auxiliary task,其中main task依然是传统的cvr转化模型,auxiliary task通过shared lookup table与main task共享embedding层,这样缓解了数据稀疏导致的embedding学习表达较弱的问题,ctr预估模型主要用到了impression数据,因此共享embedding层可以为cvr预估模型带来一些impression相关的数据信息,这样就解决了样本偏差的问题


1.3 代码实现

  1. class ESMM(torch.nn.Module):
  2. def __init__(self, user_features, item_features, cvr_params, ctr_params):
  3. super().__init__()
  4. self.user_features = user_features
  5. self.item_features = item_features
  6. self.embedding = EmbeddingLayer(user_features + item_features)
  7. self.tower_dims = user_features[0].embed_dim + item_features[0].embed_dim
  8. # 构建CVR和CTR的双塔
  9. self.tower_cvr = MLP(self.tower_dims, **cvr_params)
  10. self.tower_ctr = MLP(self.tower_dims, **ctr_params)
  11. def forward(self, x):
  12. embed_user_features = self.embedding(x, self.user_features,
  13. squeeze_dim=False).sum(dim=1)
  14. embed_item_features = self.embedding(x, self.item_features,
  15. squeeze_dim=False).sum(dim=1)
  16. input_tower = torch.cat((embed_user_features, embed_item_features), dim=1)
  17. cvr_logit = self.tower_cvr(input_tower)
  18. ctr_logit = self.tower_ctr(input_tower)
  19. cvr_pred = torch.sigmoid(cvr_logit)
  20. ctr_pred = torch.sigmoid(ctr_logit)
  21. # 计算pCTCVR = pCTR * pCVR
  22. ctcvr_pred = torch.mul(cvr_pred, cvr_pred)
  23. ys = [cvr_pred, ctr_pred, ctcvr_pred]
  24. return torch.cat(ys, dim=1)

2 MMOE模型

Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Expert

2.1 Motivation

  • 多任务模型通过学习不同任务的联系和差异,可提高每个任务的学习效率和质量。
  • 多任务学习的的框架广泛采用shared-bottom的结构,不同任务间共用底部的隐层。这种结构本质上可以减少过拟合的风险,但是效果上可能受到任务差异和数据分布带来的影响
  • 多任务学习的的框架广泛采用shared-bottom的结构,不同任务间共用底部的隐层。这种结构本质上可以减少过拟合的风险,但是效果上可能受到任务差异和数据分布带来的影响

    2.2 MMOE模型原理

    MMoE模型的结构(下图c)基于广泛使用的Shared-Bottom结构(下图a)和MoE结构,其中图(b)是图(c)的一种特殊情况,下面依次介绍。
    image.png

    2.2.1 Shared-Bottom Multi-task Model

    如上图a所示,shared-bottom网络(表示为函数f)位于底部,多个任务共用这一层。往上,K个子任务分别对应一个tower network(表示为Task04 多任务模型:ESMM、MMOE - 图12 ),每个子任务的输出 Task04 多任务模型:ESMM、MMOE - 图13

    2.2.3 Mixture-of-Experts

    MoE模型可以形式化表示为 Task04 多任务模型:ESMM、MMOE - 图14
    其中 Task04 多任务模型:ESMM、MMOE - 图15 , Task04 多任务模型:ESMM、MMOE - 图16 是n个expert network(expert network可认为是一个神经网络)。g是组合experts结果的gating network,具体来说g产生n个experts上的概率分布,最终的输出是所有experts的带权加和。显然,MoE可看做基于多个独立模型的集成方法。这里注意MoE并不对应上图中的b部分。
    后面有些文章将MoE作为一个基本的组成单元,将多个MoE结构堆叠在一个大网络中。比如一个MoE层可以接受上一层MoE层的输出作为输入,其输出作为下一层的输入使用。

    2.2.4 Multi-gate Mixture-of-Experts

    章提出的模型(简称MMoE)目的就是相对于shared-bottom结构不明显增加模型参数的要求下捕捉任务的不同。其核心思想是将shared-bottom网络中的函数f替换成MoE层,如上图c所示,形式化表达为:
    Task04 多任务模型:ESMM、MMOE - 图17
    其中 Task04 多任务模型:ESMM、MMOE - 图18 ,输入就是input feature,输出是所有experts上的权重。
    一方面,因为gating networks通常是轻量级的,而且expert networks是所有任务共用,所以相对于论文中提到的一些baseline方法在计算量和参数量上具有优势。
    另一方面,相对于所有任务公共一个门控网络(One-gate MoE model,如上图b),这里MMoE(上图c)中每个任务使用单独的gating networks。每个任务的gating networks通过最终输出权重不同实现对experts的选择性利用。不同任务的gating networks可以学习到不同的组合experts的模式,因此模型考虑到了捕捉到任务的相关性和区别。


    0 参考

    Task04 多任务模型:ESMM、MMOE