ESMM 论文精读

论文引用: Ma, Xiao, et al. “Entire space multi-task model: An effective approach for estimating post-click conversion rate.” The 41st International ACM SIGIR Conference on Research & Development in Information Retrieval. ACM, 2018.

本文是阿里发表在 SIGIR 2018 年的短文,主要解决了精确预估 CVR 的问题。

CVR 预估是最大化场景商品交易总额 (GMV=流量×点击率×转化率×客单价) 的重要因子,它可以用于 OCPC 模式下动态调整出价来使平台和广告主共同受益;并且从用户体验的角度来说,准确预估的 CVR 被用来平衡用户的点击偏好与购买偏好。文章认为当前的 CVR 预估主要存在两个问题:

  1. Sample Selection Bias (SSB):当前 CVR 预估是基于 点击->转化 数据进行训练的,而有点击的展示数据只是所有展示数据中的一小部分 (如下图所示),这部分数据的分布与整体的分布通常并不一致。而在实际 serving 的时候,模型又是对整个空间中的所有样本进行预测,因此模型的泛化效果会受到影响。
  2. Data Sparsity (DS):与前一个问题的根因相同,只使用点击数据会存在严重的数据稀疏问题。

业界也提出过一些解决这两个问题的方案:

  1. SSB SolutionAMAN 方法 将所有展示未点击的数据也作为负样本进行训练,但是这种方法天然会导致 CVR 被低估 (因为对于一些展示未点击的物品,可能是因为用户并没有关注到,或者用户已经点击了其他的条目而遗漏,并非是真正不会产生转化的物品);无偏估计方法 通过拒绝采样的方法来保证预估的 CVR 与真实的观察一致,但是这种方法在计算过程中会除以一个很小的数,因此可能导致数值不稳定的问题。
  2. DS Solution分层建模方法使用不同的特征构建多个预估模型,然后使用 LR 等模型将这些模型的结果汇总,这种方法需要比较可靠的先验知识来构建分层模型,在数据量大的推荐场景下难以实现;过采样方法将数据量少的类别样本进行过采样,但是对采样参数十分敏感。

文章在已有工作的基础上,提出使用多任务学习的框架,使用所有 展示->点击->转化 数据进行训练,将 CVR 预测问题转变为同时预测 CTRCTCVR 的问题。由于使用所有展示样本,因此不存在 SSB 问题;在多任务学习下共享 embedding 向量,实际上是一种参数迁移学习,可以有效的解决 DS 问题。

具体来讲,将一个样本记为 $(\boldsymbol{x},y\rightarrow z)$,其中,$\boldsymbol{x}$ 表示样本特征,$y$ 表示是否点击,$z$ 表示是否转化。则:

由于这三个变量的自由度为 2,因此损失函数只需要计算其中两个即可。文章将损失函数设计为 CTRCTCVR 的预测损失,如下所示:

整体网络架构如下图所示:

可以看到,两个任务共享底层 embedding,同时通过顶层的 Dot 算子进行关联。文章没有将 pCVR 作为最终输出的结果,是因为 $pCVR = \frac{pCTCVR}{pCTR}$,如果将 pCVR 作为最终输出,则最后一步为除法算子,而除法具有数值不稳定性,可能会得出 $pCVR>1$ 的情况,因此将 pCTCVR 作为最终输出的结果,这样能够保证 pCVR 的结果在 $[0,1]$ 范围内,避免了数值不稳定的问题。

文章在淘宝数据上与现有解决 SSBDS 问题的几个策略进行了对比验证,发现基于 ESSM 模型的 CVRCTCVR 预估任务的 AUC 是最高的。而且文章还发表了一个 mini 公开数据集,诚意满满~

参考文献

  1. XDL ESSM: https://github.com/alibaba/x-deeplearning/tree/master/xdl-algorithm-solution/ESMM
  2. 完整空间多任务模型:CVR预估的有效方法: http://xudongyang.coding.me/esmm/
  3. 构建分布式Tensorflow模型系列之CVR预估案例ESMM模型: http://xudongyang.coding.me/esmm-1/