精读&解析 Entire Space Multi-Task Model(ESMM) 阿里2018年CVR预测

近期公司在CTR模型的基础上准备重写CVR模型,目前处于调研阶段,读了阿里的处理方法,特意记录下来,温故而知新。下面按照个人理解介绍这篇文章内容,主要思想借鉴一篇博客,文字寻源参考原paper

<Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate>

初识:

传统的CVR方法存在两个方面的缺陷:sample selection bias和data sparsity problom。阿里这篇文章利用的用户的行为序列模式(the sequential pattern of user actions)建模,即:impression->click->conversion  数据集保留用户行为过程顺序(阿里把商品曝光记做impression)。目前还没有这种形式的数据集可用,所以阿里自己公开了一个包含用户序列行为的数据集

提出的ESMM(完整空间多任务)模型能够在完整的样本数据空间(即曝光的样本空间,下图最外层圈)同时学习点击率(post-view click-through rate, CTR)和转化率(post-click conversion rate, CVR)。

《精读&解析 Entire Space Multi-Task Model(ESMM) 阿里2018年CVR预测》

用户在购物时都遵循一个顺序:impression → click → conversion。CVR模型旨在预估用户在观察到曝光商品进而点击到商品详情页之后购买此商品的概率,即条件概率 pCVR = p(conversion|click, impression)。传统的CVR建模方法基本照搬CTR模型,数据取自发生曝光+点击的样本空间,即上图中圈。但是,有别于CTR预估任务,CVR预估有三方面的挑战:1) 样本选择偏差;2) 训练数据稀疏;3) 延迟反馈等。下面依次介绍。

在CVR预估任务中,x 是高维稀疏的特征向量, 通常是Multi-fields的,如user特征,item特征等。y 和 z 的取值为0或1,分别表示是否点击和是否购买。CVR模型的目标是预估条件概率pCVR ,与其相关的两个概率为点击率pCTR 和点击且转换率 pCTCVR ,它们之间的关系如下【公式1】:可以通过条件概率公式消掉p(x,y,z)得到。

《精读&解析 Entire Space Multi-Task Model(ESMM) 阿里2018年CVR预测》

  • 样本选择偏差(SSB)

如上所述,传统的CVR训练数据是曝光+点击的数据,然而预测时又要在整个样本空间。点击事件只是整个曝光样本空间的一个子集,在子集中提取的特征在完整集中使用是有偏的,且数据分布也不一致,违背了机器学习算法有效训练的前提(iid),减弱模型的泛化能力。

  • 训练数据稀疏(DS)

曝光的商品数肯定是远大于被用户点击的商品数,通常大1~3个数量级。正负样本极度不均衡。在淘宝的数据集上,有点击的样本空间仅占整体样本空间的4%,这就是DS问题,高度稀疏的训练数据使得模型的学习变得相当困难。

  • 延迟反馈

意思是点击后的conversion很可能延时发生,比如看过一个商品,但并没有马上去买,过了几天才去购买(Delayed Feedback),给建模带来困难。文中并没有说,有兴趣可以参考paper <Modeling Delayed Feedback in Display Advertising>

模型介绍

阿里借鉴了多任务学习(迁移学习)的思想,引入两个辅助任务,分别拟合pCTR和pCTCVR,把pCVR当做一个中间变量,从而减弱上述两个传统弊端。模型结构如下:

《精读&解析 Entire Space Multi-Task Model(ESMM) 阿里2018年CVR预测》

左边CVR,右边CTR模型。都是基于一个相似的BASE Model构建的网络。两个子网络的输出结果相乘之后即得到pCTCVR,并作为整个任务的输出。上图的左侧就是Base model,是Embedding&MLP的网络结构(由于最近基于DL的CVR模型都是使用这种类似的网络结构,阿里在论文中为了简单起见,也用了这个结构,但是实际应用中肯定不止这么简单,可以借鉴)。

ESMM模型的亮点,区别于其他模型的地方

  • 在整个样本空间建模

【公式1】可以转化为【公式2】:

《精读&解析 Entire Space Multi-Task Model(ESMM) 阿里2018年CVR预测》

可以看到pCVR 可以在先估计出pCTR 和pCTCVR之后推导出来。从原理上来说,相当于分别单独训练两个模型拟合出pCTR 和pCTCVR,再通过pCTCVR 除以pCTR 得到最终的拟合目标pCVR 。实际操作中,由于pCTR通常很小,pCTCVR除这个很小的数,容易溢出。故ESMM采用了乘法的形式,避免了除法。且能够使pCVR的值在[0,1]区间。pCTR pCTCVR ESMM模型需要估计的两个主要因子,而且是在整个样本空间上建模得到的,pCVR 只是一个中间变量。由此可见,ESMM模型是在整个样本空间建模,而不像传统CVR预估模型那样只在点击样本空间建模。

损失函数如下:由两个子任务的loss function组成:

《精读&解析 Entire Space Multi-Task Model(ESMM) 阿里2018年CVR预测》

使用交叉熵损失函数。CTR任务中,有点击行为的曝光事件标记为正样本,没有点击行为发生的曝光事件标记为负样本;在CTCVR任务中,同时有点击和购买行为的曝光事件标记为正样本,否则标记为负样本。

 

  • 共享特征表示

在embedding层,模型将大规模的稀疏input变为低维的向量。并且,在ESMM模型中,CVR网络中的embedding dictionary和CTR网络是共享的(ID对应的整数是共享的),且embedding层的参数占了网络所有参数的一大部分,且需要很多的数据做训练才能学到较好的embedding向量。由于CTR任务中的训练数据要远多于CVR任务,故这种共享特征表示的机制使CVR网络也能够从只曝光没点击的样本中学习特征表示(也就是embedding向量),有利于缓解CVR训练数据稀疏的问题。

重要:ESMM中的子网络可以被一些模型替代,可能会有更好的表现。但是本文限于篇幅,没有介绍,这也是阿里的一个骚操作,说了方法没说具体时候他们用的什么网络,当然也有可能说了其他小公司也用不成,比如最近的bert NLP模型…

实验结果:

为了评估该方法,从淘宝的推荐系统中收集流量日志(traffic logs),并发布整个数据集的1%随机抽样版本,Public Dataset,将整个数据集称为Product Dataset(生产数据)。

在Public Dataset数据集上的不同算法AUC效果对比情况如表2所示:

《精读&解析 Entire Space Multi-Task Model(ESMM) 阿里2018年CVR预测》

在两个数据集上的效果都有提升,这里只说一下对比模型有哪些,可以借鉴

其中BASE模型是ESMM模型中左边的子神经网络模型,由于其只在点击样本空间训练,会遭遇样本选择偏差和数据稀疏的问题,因为效果也是较差的。DIVISION模型是先分别训练出拟合CTR和CTCVR的模型,再拿CTCVR模型的预测结果除以CTR模型的预测结果得到对CVR模型的预估。ESMM-NS模型是ESMM模型的一个变种模型,其在ESMM模型的基础上去掉了特征表示共享的机制。

比较了模型的两个方面:(1)在点击曝光空间里预估CVR (2)在完整的曝光空间预估CTCVR,观察模型在有偏环境下的表现。pCTCVR = pCTR * pCVR ,两个因子分别建模计算。把Public Dataset按照时间分为两等份,AUC评测,重复十次取平均(网络训练存在随机性,多次训练取平均是常用的方式)。

结论:ESMM模型通过对用户行为模式建模,并且通过transfer mechanism策略充分利用了未点击的数据,效果最好。

总结

综上所述,ESMM模型是一个新颖的CVR预估方法,其首创了利用用户行为的序列特性在完整样本空间建模,避免了传统CVR模型经常遭遇的样本选择偏差和训练数据稀疏的问题,取得了显著的效果。同时,ESMM模型中的子网络可以替换为任意的学习模型,因此ESMM的框架可以非常容易地和其他学习模型集成,从而吸收其他学习模型的优势,进一步提升学习效果。此外,ESMM建模的思想也比较容易被泛化到电商中多阶段行为的全链路预估场景,如 排序→展现→点击→转化 的行为链路预估,想象空间巨大。

个人思考,有什么可以借鉴的?

除了文中说的样本选择偏差和稀疏问题以外。

可以看到DIVISION模型是在完整空间通过base model分别计算CTR CTCVR进而得到CVR的,效果也优于传统的模型,是一个思路;

在实际建模中,也可以尝试把base model替换,只要构造一个新的loss fuction就可以,简单实用的模型可能也比存在bias 问题的数据进行传统CVR建模效果好;

Embedding时候为了提高效率,可以共享embedding dict,怎么实现?之后通过tf尝试一下,有时间在po到博客上来。

这些工程类的文章真的值得用心去读,之前读的DNN4youtube之后有时间也放上来,对于刚进公司的我这种菜鸟,除了多看代码,也要多看工程文章,结合业务才能把工作做好。即时暂时实现不了,多积攒一些小的trick也是极大的帮助。

 

遗留问题:

在base model中,pooling层看图是sum-pooling,是把user field中的同一维度相加,那这个同一维度是什么意思?是把同一个用户id embedding后的vector相加么?也就是说这个user field指的是什么?是用户ID特征?这个不太理解。

 

 

点赞