推荐中的多任务学习-ESMM
本文将介绍阿里发表在 SIGIR’18 的论文ESMM《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》。文章提出使用多任务学习解决CVR(转化率)预估时的样本选择偏差和数据稀疏问题。
- 背景
在推荐系统、在线广告等应用中,CVR预估比CTR预估更加重要,CTR预估聚焦于点击率预估,即预测用户会不会点击,但是用户点击后进行消费才是最终目标。传统的CVR预估任务通常采用类似于CTR预估的技术,然而,这种做法存在两个重大问题:1) 样本选择偏差;2) 训练数据稀疏
1.样本选择偏差
转化是在点击之后发生,传统CVR预估模型在clicked数据上训练,但是在推理时使用了整个样本空间见图。训练样本和实际数据不服从同一分布,不符合机器学习中训练数据和测试数据独立同分布的假设。直观的说,会产生转化的用户不一定都是进行了点击操作的用户,如果只使用点击后的样本来训练,会导致CVR学习产生偏置。具体的实验结果可以见原论文[1]

2.训练数据稀疏
训练数据稀疏问题很明显,点击样本在整个样本空间中只占了很小一部分,而转化样本更少,高度稀疏的训练数据使得模型的学习变得相当困难。
- ESMM
首先明确CTR、CVR、CTCVR。CTR表示点击率、CVR表示假设用户点击后的转化率、CTCVR表示用户点击并且成功转化。
如何解决上述问题?ESMM 引入点击率(CTR)和点击转化率(CTCVR)作为辅助任务,将CVR作为一个中间变量。它们的关系如下
\[
\underbrace{p(y=1, z=1 | x)}_{p C T C V R}=\underbrace{p(y=1 | x)}_{p C T R} \times \underbrace{p(z=1 | y=1, x)}_{p C V R}
\]
可以看出,\(pCTR\)和\(pCTCVR\)是在整个样本空间上进行学习得到的,只是label不同,\(pCVR\)是中间变量,这样就解决了样本选择偏差问题。模型架构如下

可以看出在 ESMM 中,CVR 与 CTR 任务共享Embedding 参数。这种参数共享机制使 ESMM 中的 CVR 网络可以从未点击的样本中学习,在一定程度缓解了数据稀疏性问题。
至此,两个问题已经被解决了,下面看下ESMM如何学习,模型的损失函数如下:
\[
\begin{aligned}L\left(\theta_{c v r}, \theta_{c t r}\right) &=\sum_{i=1}^{N} l\left(y_{i}, f\left(x_{i} ; \theta_{c t r}\right)\right)+\sum_{i=1}^{N} l\left(y_{i} \& z_{i}, f\left(x_{i} ; \theta_{c t r}\right) \times f\left(x_{i} ; \theta_{c v r}\right)\right)\end{aligned}
\]
第一项是CTR预估的损失,点击label为1否则为0;第二项是CTCVR预估的损失,点击且转化的label为1,否则为0。
这里还有一个问题,既然\(pCTCVR\)可以由\(pCTR\)和\(pCVR\)相乘得到,那么从理论上说,转化为除法也可以,即
\[
p(z=1 | y=1, x)=\frac{p(y=1, z=1 | x)}{p(y=1 | x)}
\]
这样可以分别训练两个模型,CTR和CVCTR,最终也可以得到CVR。论文对这种情况做了实验分析,发现实际上\(pCTR\)的值较小,会引起数值不稳定。
- discussion
- 巧妙的引入了两个辅助任务解决CVR预估,解决了样本选择偏置问题,共享参数可以缓解数据稀疏
- 多任务学习在其他领域已经有很多应用,但在推荐中,更应该结合具体的数据和任务设计。例如,在跨领域任务中,不同领域的环境样本是不一样的,但用户信息可能有重复,那么针对这种场景怎么设计多任务学习,样本信息的利用需要更多得考虑。
references:
[1] Xiao Ma, Liqin Zhao, Guan Huang, Zhi Wang, Zelin Hu, Xiaoqiang Zhu, and Kun Gai. 2018. Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate. SIGIR (2018).
推荐中的多任务学习-ESMM的更多相关文章
- 推荐中的多任务学习-YouTube视频推荐
本文将介绍Google发表在RecSys'19 的论文<Recommending What Video to Watch Next: A Multitask Ranking System> ...
- 多任务学习(MTL)在转化率预估上的应用
今天主要和大家聊聊多任务学习在转化率预估上的应用. 多任务学习(Multi-task learning,MTL)是机器学习中的一个重要领域,其目标是利用多个学习任务中所包含的有用信息来帮助每个任务学习 ...
- [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习
机器学习策略-多任务学习 Learninig from multiple tasks 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.7 迁移学习 Transfer Learninig 神 ...
- 【论文笔记】多任务学习(Multi-Task Learning)
1. 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...
- 多任务学习Multi-task-learning MTL
https://blog.csdn.net/chanbo8205/article/details/84170813 多任务学习(Multitask learning)是迁移学习算法的一种,迁移学习可理 ...
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)
译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...
- 牛亚男:基于多Domain多任务学习框架和Transformer,搭建快精排模型
导读: 本文主要介绍了快手的精排模型实践,包括快手的推荐系统,以及结合快手业务展开的各种模型实战和探索,全文围绕以下几大方面展开: 快手推荐系统 CTR模型--PPNet 多domain多任务学习框架 ...
- ios7中的多任务
转自:http://onevcat.com/2013/08/ios7-background-multitask/ WWDC 2013 Session笔记 - iOS7中的多任务 iOS7的后台多任务特 ...
- [ios-必看] WWDC 2013 Session笔记 - iOS7中的多任务【转】
感谢:http://onevcat.com/2013/08/ios7-background-multitask/ http://www.objc.io/issue-5/multitasking.htm ...
随机推荐
- pytorch adam 源码 关于优化函数的调整 optimizer 调参 重点
关于优化函数的调整拆下包:https://ptorch.com/docs/1/optim class torch.optim.Optimizer(params, defaults)所有优化的基类. 参 ...
- [C#] 用ServiceStack读写redis的性能问题
ServiceStack.Redis有个方法叫 AddRangeToList,这个方法是有性能问题的.这个方法的实现代码如下: public void AddRangeToList(string li ...
- HDU1686 Oulipo 题解 KMP算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目大意:给你一个子串t和一个母串s,求s中有多少个子串t. 题目分析:KMP模板题. cal_ ...
- Java Annotation详解(二): 反射和Annotation
前面一篇文<Java Annotation详解(一): 理解和使用Annotation>中,我们或许会觉得,Annotation注释其实并没有多大的作用,除了几个内建的Annotation ...
- 精选Pycharm里6大神器插件
http://www.sohu.com/a/306693644_752099 上次写了一篇关于Sublime的精品插件推荐,有小伙伴提议再来一篇Pycharm的主题.相比Sublime,Pycharm ...
- H3C PPP MP配置示例二
- Python--day28--面试题
- java final域
public final class ThreeStooges { /* * stooges是Set<String>类型的引用,final限定该引用成员属性stooges被赋初值后,就不能 ...
- joinColumns和inverseJoinColumns的用法
最近在工作中使用springside,里面用到了hibernate的多对多 一开始我在配置department(部门表)和menu(栏目表)的时候,这样写的. Department实体类中的getMe ...
- 查看laravel版本
方法1: 使用php artisan --version ,只要能看懂这个命令的人一定已经具有初步的Laravel知识.再介绍一种不需要命令,直接去文件中去查看的方法. 方法2: 在项目文件中找ven ...