ESMM基于CVR建模的多任务联合学习训练方法
2018年,阿里妈妈广告算法团队在SIGIR上发布了一篇关于CVR预估的经典论文——《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》,简称ESMM。该论文提
2018年,阿里妈妈广告算法团队在SIGIR上发布了一篇关于CVR预估的经典论文——《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》,简称ESMM。该论文提出的方法至今仍在业界被广泛引用与借鉴,成为点击后转化率建模的重要里程碑。
传统的CVR建模长期面临两大核心挑战:样本选择偏差(Sample Selection Bias, SSB)和数据稀疏(Data Sparsity, DS)。这两个难题导致模型训练困难重重,极大限制了预估精度。而ESMM通过多任务联合训练,从全新角度重新定义了CVR建模方法,在淘宝推荐系统的真实数据上取得了显著优于其他算法的表现。
读到此处,自然会产生两个关键问题:CVR预估任务中的样本选择偏差究竟是什么?ESMM又是如何通过多任务训练有效克服这些难题的?接下来我们深入探讨。
Introduction
post-click conversion rate,直译为“点击后转化率”——该指标建立在用户已点击的前提之上。论文作者将用户行为简化为三个步骤:曝光→点击→转化,三者之间的区别如下图所示。

在传统CVR任务中,工程师通常将点击但未购买的样本标记为负样本,点击并购买的样本标记为正样本,用这类数据训练模型并部署上线。然而问题在于:线上曝光的大部分样本用户并未点击,而模型训练仅使用了点击后的样本——这就引发了样本选择偏差(SSB)。
雪上加霜的是,点击行为本身极为稀疏,通过这种方式构建的训练集样本量十分有限,进一步加剧了数据稀疏(DS)问题。SSB直接削弱模型的泛化能力,DS则使模型难以充分拟合数据分布。
此前已有不少尝试来缓解这两个问题:例如构建基于不同特征的分层估计器,并融合LR模型以应对DS;或者对未曝光未点击的样本进行采样来缓解SSB。这些方法虽然在一定程度上有所改善,但均不够优雅,本质上未能攻克CVR建模的核心矛盾。
以往策略的一大局限在于忽略了CTR与CVR之间的顺序动作信息。阿里妈妈的团队另辟蹊径,充分利用用户操作链条的天然顺序性,提出了ESMM算法,同时化解了SSB与DS两大难题。
ESMM引入了两个辅助任务:CTR与点击后转化率CTCVR。它并未直接使用曝光样本训练CVR,而是借助pCTCVR = pCTR × pCVR这一关系——CTCVR和CTR均可通过曝光样本进行训练,而CVR作为中间变量,由CTR和CTCVR间接估算得到。这样一来,计算出的pCVR适用于整个样本空间(与线上分布一致),SSB问题自然迎刃而解。此外,CVR与CTR共享网络表征,CTR任务拥有更丰富的训练样本,从而显著缓解了数据稀疏带来的影响。
ESMM
接下来我们具体分析ESMM的实现细节。
将上述关系式具体化:对于给定的曝光样本x,CTCVR的概率可表示为:
p(CTCVR=1|x) = p(CTR=1|x) × p(CVR=1|CTR=1,x)
基于这一关系,论文设计了联合Embedding与MLP网络的ESMM架构。

ESMM借鉴多任务学习思想,模型分为左右两个模块:左侧是所需的CVR模块,右侧是CTR与CTCVR辅助训练模块。这种设计巧妙融入了用户操作的顺序性,同时消除了CVR建模的两大核心问题。
值得注意的是,CVR与CTR任务采用相同的特征输入,并共享Embedding Layer。CTR任务因训练样本充足,能够对模型进行充分训练;这种参数共享机制有效降低了数据稀疏带来的不良影响。
另外,pCVR仅是一个中间变量,受上述公式约束,pCTR与pCTCVR才是ESMM中实际参与训练的主目标。可以这样理解:CVR模型本身没有直接监督信号,而CTR和CTCVR都具备明确的监督信号,最终通过公式约束间接得到CVR模型。
可能有同学会问:为什么不直接通过pCTCVR / pCTR来计算pCVR?论文作者也尝试了这一实验,效果并不理想——主要因为pCTR通常非常小,除以一个很小的数容易导致数值不稳定。因此ESMM采用了乘法约束,而非除法。
来看ESMM的损失函数,它由两个有监督的任务组成:CTR与CTCVR。
L = L_CTR + L_CTCVR
其中 L_CTR 和 L_CTCVR 为交叉熵损失,θ_CTR 和 θ_CVR 分别是CTR和CVR网络的参数。
Experiments
接下来聚焦实验部分。
所有数据集均来自淘宝日志整理的生产环境数据集(Product Dataset),并从中随机采样1%作为公共数据集(Public Dataset)对外开放。两个数据集的信息如下。

下图为不同模型在公共数据集上的表现。

其中ESMM-NS是ESMM的精简版本,去掉了Embedding Layer的参数共享。可以看出,两个版本的ESMM在不同任务上的效果均达到了当前最优(SOTA)。
再看生产数据集上的表现。

ESMM在不同规模的数据集上均处于领先地位。
Code
附上ESMM的核心代码实现。
#-*- coding: UTF-8 -*-
import tensorflow as tf
from tensorflow.python.estimator.canned import head as head_lib
from tensorflow.python.ops.losses import losses
def build_deep_layers(net, params):
# 构建多个隐藏层
for num_hidden_units in params['hidden_units']:
net = tf.layers.dense(net, units=num_hidden_units, activation=tf.nn.relu,
kernel_initializer=tf.glorot_uniform_initializer())
return net
def esmm_model_fn(features, labels, mode, params):
net = tf.feature_column.input_layer(features, params['feature_columns'])
last_ctr_layer = build_deep_layers(net, params)
last_cvr_layer = build_deep_layers(net, params)
head = head_lib._binary_logistic_or_multi_class_head(
n_classes=2, weight_column=None, label_vocabulary=None,
loss_reduction=losses.Reduction.SUM)
ctr_logits = tf.layers.dense(last_ctr_layer, units=head.logits_dimension,
kernel_initializer=tf.glorot_uniform_initializer())
cvr_logits = tf.layers.dense(last_cvr_layer, units=head.logits_dimension,
kernel_initializer=tf.glorot_uniform_initializer())
# 核心思想体现在这里:
ctr_preds = tf.sigmoid(ctr_logits)
cvr_preds = tf.sigmoid(cvr_logits)
ctcvr_preds = tf.multiply(ctr_preds, cvr_preds)
optimizer = tf.train.AdagradOptimizer(learning_rate=params['learning_rate'])
ctr_label = labels['ctr_label']
cvr_label = labels['cvr_label']
user_id = features['user_id']
click_label = features['label']
conversion_label = features['is_conversion']
if mode == tf.estimator.ModeKeys.PREDICT:
predictions = {
'ctr_preds': ctr_preds,
'cvr_preds': cvr_preds,
'ctcvr_preds': ctcvr_preds,
'user_id': user_id,
'click_label': click_label,
'conversion_label': conversion_label
}
export_outputs = {
'regression': tf.estimator.export.RegressionOutput(predictions['cvr_preds'])
}
return tf.estimator.EstimatorSpec(mode, predictions=predictions, export_outputs=export_outputs)
else:
ctr_loss = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(labels=ctr_label, logits=ctr_logits))
ctcvr_loss = tf.reduce_sum(tf.losses.log_loss(labels=cvr_label, predictions=ctcvr_preds))
loss = ctr_loss + ctcvr_loss # 损失函数支持添加权重参数,可参考多任务损失调优方法
train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)
Conclusion
一句话总结:该论文提出了一种用于CVR建模的多任务联合训练方法——ESMM,充分利用用户点击与转化的顺序关系,借助CTR和CTCVR两个辅助任务来训练模型,并通过三者的关系约束间接得到CVR模型。ESMM完美解决了传统CVR建模中的样本选择偏差与数据稀疏两大难题,在真实数据集上取得了SOTA表现。
此外,ESMM中的子网络可以替换为其他更先进的模型,从而吸收不同模型的优势,进一步提升学习效果。
Reference
Ma X, Zhao L, Huang G, et al. Entire space multi-task model: An effective approach for estimating post-click conversion rate[C]//The 41st International ACM SIGIR Conference on Research & Development in Information Retrieval. 2018: 1137-1140.
github:x-deeplearning
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:ESMM基于CVR建模的多任务联合学习训练方法要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点一加Turbo6X开售,含标准版与Pro版,起售价1499元,国补价1274 15元。搭载天玑7360SUPER和7400SUPER,144Hz屏,7000 8000mAh电池,主打长续航高性价比。
蔚来汽车近日上市了2026款ET5、ET5T和EC6的冠军纪念版车型。新车主打赛道竞速设计风格,提供专属外观内饰与智能座舱主题。最大的亮点在于推出了BaaS电池租用方案,ET5 ET5T租电版起售价20 5万元,EC6租电版起售价26 5万元,大幅降低了购车门槛。车辆在底盘方面进行了针对性调校,提升
微软射击游戏《战争机器:E-Day》公布PC配置要求,将于2026年10月发售。配置清单引人注目地将尚未发布的RTX5050和RX9060显卡列为最低要求,同时兼容多款现有中端显卡。游戏需130GB固态硬盘空间,最低要求12GB内存和六核CPU。官方未明确对应画质与帧数,但推测将依赖超分辨率技术
软科近日发布2026年中国大学专业排名,覆盖1132所高校的3万余个专业点。排名显示,北京大学以93个A+专业位居榜首,清华大学和哈尔滨工业大学分列二、三位。榜单同时引入“A+专业精度”指标,中国人民公安大学以93 8%的精度领先。此外,北京大学、吉林大学、武汉大学在上榜专业总数上位列前三。该排名从
- 日榜
- 周榜
- 月榜
热点快看
