论文下载:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1804.07931.pdf
开源实现:https://github.com/alibaba/x-deeplearning/wiki/%E5%85%A8%E7%A9%BA%E9%97%B4%E5%A4%9A%E4%BB%BB%E5%8A%A1%E6%A8%A1%E5%9E%8B(ESMM)
一、Introduction
这篇文章的目的是预测新顾客的转化率,相比于传统方法直接对pCVR建模,作者提出Entire Space Multi- task Model(ESMM)模型,不直接对pCVR建模,而是利用两个任务,预测pCTCVR和预测pCTR的结果来估计pCVR,从而避免了SSB问题。这篇文章创新的地方在于用的用户的行为序列模式建模,impression->click->conversion,数据集保留用户行为过程顺序。
(即:提出一种新的CVR预估模型——ESMM,有效解决了真实场景中CVR预估面临的数据稀疏以及样本选择偏差这两个关键问题。)
二、Motivation
CVR模型定义:
旨在预估用户在观察到曝光商品进而点击到商品详情页之后购买此商品的概率,即条件概率 pCVR = p(conversion|click, impression)。
传统的CVR方法有下面两个缺陷:
Sample selection bias problem (SSB,样本选择偏差)
传统的CVR训练数据是曝光+点击(clicked impression)的数据,然而预测时又要在整个样本空间(impression)。点击事件(clicked impression)只是整个曝光样本空间的一个子集,在子集中提取的特征在完整集中使用是有偏的,且数据分布也不一致,违背了机器学习算法有效训练的前提(iid),所以会导致训练数据采样空间与模型推测空间不一致,即bias问题,减弱模型的泛化能力。
Data sparsity problem (DS,训练数据稀疏)
CVR的数据远远少于前一步CTR的数据,导致CVR是一个非常稀疏的矩阵。曝光的商品数肯定是远大于被用户点击的商品数,通常大1~3个数量级。正负样本极度不均衡。在淘宝的数据集上,有点击的样本空间仅占整体样本空间的4%,这就是DS问题,高度稀疏的训练数据使得模型的学习变得相当困难。
点击—>转化,本身是两个强相关的连续行为,作者希望在模型结构中显示考虑这种“行为链关系”,从而可以在整个空间上进行训练及预测。这涉及到CTR与CVR两个任务,因此使用多任务学习(MTL)是一个自然的选择,论文的关键亮点正在于“如何搭建”这个MTL。
三、Model
“CVR预估到底要预估什么”?
想象一个场景,一个item,由于某些原因,例如在feeds中的展示头图很丑,它被某个user点击的概率很低,但这个item内容本身完美符合这个user的偏好,若user点击进去,那么此item被user转化的概率极高。CVR预估模型,预估的正是这个转化概率,它与CTR没有绝对的关系,很多人有一个先入为主的认知,即若user对某item的点击概率很低,则user对这个item的转化概率也肯定低,这是不成立的。更准确的说,CVR预估模型的本质,不是预测“item被点击,然后被转化”的概率(CTCVR),而是“假设item被点击,那么它被转化”的概率(CVR)。这就是不能直接使用全部样本训练CVR模型的原因,因为咱们压根不知道这个信息:那些unclicked的item,假设他们被user点击了,它们是否会被转化。如果直接使用0作为它们的label,会很大程度上误导CVR模型的学习。
ESMM(完整空间多任务)模型能够在完整的样本数据空间(即曝光的样本空间,下图最外层圈)同时学习点击率(post-view click-through rate, CTR)和转化率(post-click conversion rate, CVR)。
在CVR预估任务中,x 是高维稀疏的特征向量, 通常是Multi-fields的,如user特征,item特征等。CVR模型的目标是预估条件概率pCVR ,与其相关的两个概率为点击率pCTR 和点击且转换率 pCTCVR ,它们之间的关系如下【公式1】:可以通过条件概率公式消掉p(x,y,z)得到。
其中 y,z分别表示click和conversion, y和 z 的取值为0或1,分别表示是否点击和是否购买。注意到,在全部样本空间中,CTR对应的label为click,而CTCVR对应的label为click & conversion。
当无法直接建模pCVR,可以建模学习pCTCVR和pCTR,反向求pCVR的预测,因此ESMM中两个学习的模型是建模CTR和CTCVR的子模型。
可以看到,ESMM模型由两个子网络组成,左边的子网络用来拟合pCVR,右边的子网络用来拟合pCTR,同时,两个子网络的输出相乘之后可以得到pCTCVR。因此,该网络结构共有三个子任务,分别用于输出pCTR、pCVR和pCTCVR。
观察上图,留意以下几点:
1)共享Embedding ,CVR-task和CTR-task使用相同的特征和特征embedding,即两者从Concatenate之后才学习各自部分独享的参数;
共享特征表示:
ESMM模型借鉴迁移学习的思路,在两个子网络的embedding层共享embedding向量(特征表示)词典。网络的embedding层把大规模稀疏的输入数据映射到低维的表示向量,该层的参数占了整个网络参数的绝大部分,需要大量的训练样本才能充分学习得到。由于CTR任务的训练样本量要大大超过CVR任务的训练样本量,ESMM模型中特征表示共享的机制能够使得CVR子任务也能够从只有展现没有点击的样本中学习,从而能够极大地有利于缓解训练数据稀疏性问题。
2)隐式学习pCVR ,这里pCVR(粉色节点)仅是网络中的一个variable,没有显示的监督信号,可以体现在损失函数中。
模型具体是怎么做的呢?
本文用来训练两个任务的输入x其实是相同的,但是label是不同的。CTR任务预估的是点击y,CTCVR预估的是转化z。因此,我们将(x,y)输入到CTR任务中,得到CTR的预估值,将(x,z)输入到CVR任务中,得到CVR的预估值,CTR和CVR的预估值相乘,便得到了CTCVR的预估值。因此,模型的损失函数可以定义为:
其中,θctr和θcvr分别是CTR网络和CVR网络的参数,l(⋅)是交叉熵损失函数。即利用CTCVR和CTR的监督信息来训练网络,隐式地学习CVR,这正是ESMM的精华所在。
四、Experiment
数据集 目前还没用同时包含点击、转化信息的公开数据集,作者从淘宝日志中抽取整理了一个数据集Product,并开源了从Product中随机抽样1%构造的数据集Public(约38G)。
为了验证ESSM的效果,阿里团队与如下的算法进行了对比:
对比方法:
BASE——神经网络结构左部所示的CVR结构,训练集为点击集;
AMAN——从unclicked样本中随机抽样作为负例加入点击集合;
OVERSAMPLING——对点击集中的正例(转化样本)过采样;
UNBIAS——使用rejection sampling;
DIVISION——分别训练CTR和CVCTR,相除得到pCVR;
ESMM-NS——ESMM结构中CVR与CTR部分不share embedding。
衡量指标 在点击样本上,计算CVR任务的AUC;同时,单独训练一个和BASE一样结构的CTR模型,除了ESMM类模型,其他对比方法均以pCTR*pCVR计算pCTCVR,在全部样本上计算CTCVR任务的AUC。
实验结果
如下表所示,ESMM显示了最优的效果。这里有趣的一点可以提下,ESMM是使用全部样本训练的,而CVR任务只在点击样本上测试性能,因此这个指标对ESMM来说是在biased samples上计算的,但ESMM性能还是很牛啊,说明其有很好的泛化能力。
在Product数据集上,各模型在不同抽样率上的AUC曲线如图2所示,ESMM显示的稳定的优越性,曲线走势也说明了Data Sparsity的影响还是挺大的。
总结
ESMM模型利用用户行为序列数据在完整样本空间建模,避免了传统CVR模型经常遭遇的样本选择偏差和训练数据稀疏的问题,取得了显著的效果。另一方面,ESMM模型首次提出了利用学习CTR和CTCVR的辅助任务迂回学习CVR的思路。ESMM模型中的BASE子网络可以替换为任意的学习模型,因此ESMM的框架可以非常容易地和其他学习模型集成,从而吸收其他学习模型的优势,进一步提升学习效果,想象空间巨大。
拓展:ESM2
对于CVR预估来说,ESMM模型仍面临一定的样本稀疏问题,因为click到buy的样本非常少。但其实一个用户在购买某个商品之前往往会有一些其他的行为,比如将商品加入购物车或者心愿单。如下图所示:
文中把加购物车或者心愿单的行为称作Deterministic Action (DAction) ,表示购买目的很明确的一类行为。而其他对购买相关性不是很大的行为称作Other Action(OAction) 。那原来的 Impression→Click→Buy购物过程就变为Impression→Click→DAction/OAction→Buy过程。
ESM2模型结构:
那么该模型的多个任务分别是:Y1:点击率 Y2:点击到DAction的概率 Y3:DAction到购买的概率 Y4:OAction到购买的概率
并且从上图看出,模型共有3个loss,计算过程分别是:
pCTR:Impression→Click的概率是第一个网络的输出。pCTAVR:Impression→Click→DAction的概率,pCTAVR = Y1 * Y2,由前两个网络的输出结果相乘得到。pCTCVR:Impression→Click→DAction/OAction→Buy的概率,
pCTCVR = CTR * CVR = Y1 * [(1 - Y2) * Y4 + Y2 * Y3],由四个网络的输出共同得到。
其中CVR=(1 -Y2) * Y4 + Y2 * Y3。是因为从点击到DAction和点击到OAction是对立事件。
随后通过三个logloss分别计算三部分的损失:
https://blog.csdn.net/thormas1996/article/details/88942360
https://zhuanlan.zhihu.com/p/55259412
https://www.cnblogs.com/DjangoBlog/articles/11767733.html
https://zhuanlan.zhihu.com/p/57481330
https://zhuanlan.zhihu.com/p/38875880
https://zhuanlan.zhihu.com/p/91285359