ESMM

8/2/2021 ESMM

# CVR预估到底要预估什么?

CVR预估模型的本质,不是预测“item被点击,然后被转化”这整个链路的概率(CTCVR),而是“假设item被点击,那么它被转化”的概率(CVR)

所以我们不能直接使用全部样本训练CVR模型,因为咱们压根不知道这个信息:那些未被点击的item,假设他们被用户点击了,它们是否会被转化。如果直接使用0作为它们的label,会很大程度上误导CVR模型的学习。

# 与CTR预估不同,cvr预估中面临的数据稀疏和样本选择偏差分别指的是什么?

  • 样本选择偏差(sample selection bias:SSB问题)

如图所示,整个样本空间为,其中由点击事件()的样本组成的集合为,对应图中阴影区域,传统的CVR模型就是用此集合中的样本来训练的,同时训练好的模型又需要在整个样本空间做预测推断。由于点击事件相对于展现事件来说要少很多,因此只是样本空间的一个很小的子集,从上提取的特征相对于从中提取的特征而言是有偏的,甚至是很不相同。从而,按这种方法构建的训练样本集相当于是从一个与真实分布不完全一致的分布中采样得到的,这一定程度上违背了机器学习算法之所以有效的前提:训练样本与测试样本必须独立地采样自同一个分布,即独立同分布的假设。

总结一下,传统的 CVR 模型是在点击样本上训练的,但是推断是在曝光样本上进行的。这导致训练样本和推断样本不一致,降低了模型的泛化能力。

  • 数据稀疏(data sparsity:DS问题)

推荐系统展现给用户的商品数量要远远大于被用户点击的商品数量,同时有点击行为的用户也仅仅只占所有用户的一小部分,因此有点击行为的样本空间相对于整个样本空间来说是很小的,通常来讲,量级要少1~3个数量级。在淘宝公开的训练数据集上,只占整个样本空间的4%。这就是所谓的训练数据稀疏的问题,高度稀疏的训练数据使得模型的学习变得相当困难。

# ESMM是如何解决样本选择偏差问题的?

在转化链路中用户遵循 “曝光 -> 点击 -> 转化” 的顺序。ESMM 模型借鉴了多任务学习的思想,基于该顺序引入两个辅助任务:CTR 预测任务、CTCVR 预测任务。

模型由两个子网络构成:左侧的 CVR 网络和右侧的 CTR 网络,二者均采用 BASE 模型(即下图左侧的基准 DNN 模型)相同的结构。

模型同时输出pCTR,pCVR,pCTCVR 三路输出,其中:

  • pCVR 输出由左侧的 CVR 网络输出
  • pCTR 输出由右侧的 CTR 网络输出
  • pCTCVR 输出将 CVR 和 CTR 网络输出的乘积作为输出

ESMM 模型不会直接使用点击样本来预测 CVR,而是利用CTCVR和CTR的监督信息来训练网络,隐式地学习CVR:

$$pCTR × pCCVR = pCTCVR $$

其中 PCTR 和 pCTCVR 都是在整个曝光样本空间进行估计的,因此派生的 pCVR 也适用于整个曝光样本空间。这就消除了样本选择偏差问题。

# ESMM是如何解决数据稀疏问题的?

ESMM模型借鉴迁移学习的思路,在两个子网络的embedding层共享embedding向量(特征表示)词典。网络的embedding层把大规模稀疏的输入数据映射到低维的表示向量,该层的参数占了整个网络参数的绝大部分,需要大量的训练样本才能充分学习得到。由于CTR任务的训练样本量要大大超过CVR任务的训练样本量,ESMM模型中特征表示共享的机制能够使得CVR子任务也能够从只有展现没有点击的样本中学习,从而能够极大地有利于缓解训练数据稀疏性问题。

# ESMM的结构基于“乘”的关系设计(pCTCVR=pCVR*pCTR)而不是基于除的原因是什么?

表面上看,我们可以分别独立的建立两个模型分别估计 pCTR 和 pCTCVR,然后根据:

来计算 pCVR 。但这种做法存在两个问题:

  • 由于 pCTR 通常是一个非常小的数(如 ),除以一个很小的数很容易导致数值不稳定。
  • 除法的结果无法确保是在 0~1 之间。

在 ESMM 模型中,pCVR 是一个中间变量,通过乘法的形式使得这三个概率可以同时被训练。

另外模型结构也保证了 pCVR 一定是在 0~1 之间。

# 解释一下ESMM的目标函数

ESMM模型的损失函数由两部分组成,对应于pCTR 和pCTCVR 两个子任务,其形式如下:

其中, 分别是CTR网络和CVR网络的参数,是交叉熵损失函数。

在CTR任务中,有点击行为的展现事件构成的样本标记为正样本,没有点击行为发生的展现事件标记为负样本;在CTCVR任务中,同时有点击和购买行为的展现事件标记为正样本,否则标记为负样本。