├── ESM2.pdf ├── ESMM.pdf ├── README.md └── img ├── 1.jpg ├── 10.jpg ├── 11.jpg ├── 12.jpg ├── 13.jpg ├── 14.jpg ├── 15.jpg ├── 16.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── 5.jpg ├── 6.jpg ├── 7.jpg ├── 8.jpg └── 9.jpg /ESM2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/ESM2.pdf -------------------------------------------------------------------------------- /ESMM.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/ESMM.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | 阿里巴巴ESMM模型系列解读 4 | ============ 5 | 6 | # ESMM模型 7 | 8 | ## 背景 9 | 10 | > 在推荐系统领域(尤其是电商),准确估计点击后的转化率(CVR)对items进行排名至关重要,CTR预估聚焦于点击率的预估(广告系统的目标),而电商领域user点击之后下单消费才是终极目标(用户的行为遵循一个序列模式:曝光->点击->转化)。请注意,这里的预测目标是假设商品被点击之后的转化率,即pCVR=p(conversion|click, impression),而不是转化率。二者是有区别的:一个商品的点击率很低,但是一旦被点击之后,用户购买的概率可能非常高。常规的CVR模型采用深度学习方法进行建模,取得了非常好的效果。但是在实践中也遇到几个问题,这使CVR建模具有挑战性。主要问题如下: 11 | 12 | - **Sample Selection Bias,SSB** 13 | 14 | > 样本选择偏差问题。传统CVR的预估模型是在曝光和click的数据上训练,在inference的时候使用了整个样本空间,如图所示。训练样本和实际数据不服从同一分布,不符合机器学习中训练数据和测试数据独立同分布的假设。直观的说,会产生转化的用户不一定都是进行了点击操作的用户,如果只使用点击后的样本来训练,会导致CVR学习产生偏置。如图所示: 15 | 16 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/1.jpg) 17 | 18 | - **Data Sparsity,DS** 19 | 20 | > 数据稀疏问题。点击样本在整个样本空间中只占了很小一部分,而转化样本更少,高度稀疏的训练数据使得模型的学习变得相当困难。Table1显示了这个问题。 21 | 22 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/2.jpg) 23 | 24 | ## 解决方法 25 | 26 | > 针对以上两个问题,目前也有了一些解决方案如下: 27 | 28 | - Estimating conversion rate in display advertising from past erformance data. 29 | 30 | > 建立了基于不同特征的分层估计器,并将其与逻辑回归模型相结合来解决DS问题。 但是,它依靠先验知识来构造层次结构,这很难在具有数千万用户和项目的推荐系统中应用。 31 | 32 | - Oversampling method 33 | 34 | > 通过复制稀缺类的样本来缓解DS问题,但对采样率敏感。 35 | 36 | - AMAN 37 | 38 | > 应用随机抽样策略来选择未点击的展现作为负样本,通过引入未知样本,可以在某种程度上消除SSB问题,但会导致模型低估。 39 | 40 | - Unbiased method 41 | 42 | > 通过剔除抽样来拟合观测值的真实基础分布,但是,通过拒绝概率的除法对样本加权时,可能会遇到数值不稳定性。 43 | 44 | **总之,CVR建模场景下存在的SSB问题或DS问题均没有得到有效解决,并且上述方法均没有用到序列行为信息。** 45 | 46 | ## ESMM模型 47 | 48 | > 为了能够解决SSB和DS的问题,并且分利用用户行为的序列模式,阿里提出了ESMM模型。在ESMM中,引入CTR和CTCVR两个辅助任务。与直接在点击后的展现样本上训练CVR模型不同,ESMM把 pCVR作为一个中间变量,即 pCTCVR=pCVR*pCTR。pCTCVR和pCTR都在整个展现样本空间上进行预估,使得pCVR也在整个空间上进行预估。此时,消除了SSB问题。另外,CVR网络的特征表征参数与CTR网络共享。由于CTR网络使用更丰富的样本进行训练,这种参数迁移学习有助于明显缓解DS问题。具体如下: 49 | 50 | - CTR、CVR和CTCVR的关系 51 | 52 | > CTR表示点击率、CVR表示假设商品被点击后的转化率、CTCVR表示商品被点击并且成功转化。三者的关系如下: 53 | 54 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/4.jpg) 55 | 56 | > 其中分别表示conversion和click。 57 | > 58 | > 注意到,在全部样本空间中,CTR对应的label为click,而CTCVR对应的label为click & conversion,**这两个任务是都可以使用全部样本进行预估**。**所以ESMM通过这学习两个任务,再根据上式隐式地学习CVR**,具体结构如下: 59 | 60 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/3.jpg) 61 | 62 | > ESMM模型分为两个子模型,pCTR和pCVR:两者共享特征的embedding层,从concatenate之后各自学习参数;pCVR仅仅是网络中的一个variable,没有监督信号,只有pCTR和pCTCVR才有监督信号进行学习。ESMM的loss函数定义如下: 63 | 64 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/5.jpg) 65 | 66 | > 即采用CTR和CTCVR的监督信息来训练网络,隐地学习CVR。直观理解就是,只要ctr预估准确了,并且pCTCVR也预估准确了,因为pCTCVR = pCTR * pCVR,所以pCVR的预估也一定是准确的。 67 | 68 | > 此外,ESMM的结构是基于“乘”的关系设计,是不是也可以通过“除”的关系得到pCVR,即 pCVR = pCTCVR / pCTR ?例如分别训练一个CTCVR和CTR模型,然后相除得到pCVR。其实也是可以的,但这有个明显的缺点:真实场景预测出来的pCTR、pCTCVR值都比较小,“除”的方式容易造成数值上的不稳定。具体的实验结果在下面介绍。 69 | 70 | ## 实验设置和比较 71 | 72 | ### 数据 73 | 74 | > 由于没有公开的数据,作者从淘宝日志中抽取整理了一个数据集Product,并开源了从Product中随机抽样1%构造的数据集[Public](https://tianchi.aliyun.com/datalab/dataSet.html?dataId=408)(约38G)。 75 | 76 | ### 实验设置 77 | 78 | #### 模型对比 79 | 80 | - Base 81 | 82 | ESMM模型图左侧的CVR结构,训练集为点击 83 | 84 | - AMAN 85 | 86 | 采用负采样策略,采样比例设置为10%,20%,50%和100% 87 | 88 | - OVERSAMPLING 89 | 90 | 复制正样本来减少训练数据的稀疏性 91 | 92 | - UNBIAS 93 | 94 | rejection sampleing,pCTR作为rejection probability 95 | 96 | - DIVISION 97 | 98 | 预测pCTR和pCTCVR,然后相除得到CVR 99 | 100 | - ESMM-NS 101 | 102 | CVR与CTR部分不share embedding。 103 | 104 | - ESMM 105 | 106 | #### ESMM模型参数 107 | 108 | > ESMM模型和Base模型采用相同的网络结构和超参数,1) ReLU激活函数;2) embedding维度设置为18;3) MLP网络结构设置为 360x200x80x2;4) 使用adam优化方法 109 | 110 | #### 评价指标 111 | 112 | - CVR预估 113 | 114 | 在数据集的点击样本上,计算CVR的AUC; 115 | 116 | - CTCVR预估 117 | 118 | 每个模型训练预测得到pCVR,同时,单独训练一个和BASE一样结构的CTR模型。除了ESMM类模型,其他对比方法均以pCTR*pCVR计算pCTCVR,在全部样本上计算CTCVR的AUC。 119 | 120 | #### 训练集和测试集 121 | 122 | > 按时间分割,1/2数据训练,其余测试 123 | 124 | ### 实验结果 125 | 126 | > ESMM模型表现出了最优的效果,其充分解决了SSB和DS的问题。在Product数据集上,各模型在不同抽样率上的AUC曲线如图所示,ESMM显示的稳定的优越性,曲线走势也说明了Data Sparsity的影响还是挺大的。 127 | 128 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/6.jpg) 129 | 130 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/7.jpg) 131 | 132 | ## 讨论 133 | 134 | - ESMM 根据用户行为序列,显示引入CTR和CTCVR作为辅助任务,“隐式” 学习CVR,从而在完整样本空间下进行模型的训练和预测,解决了CVR预估中的2个难题。 135 | - 可以把 ESMM 看成一个**新颖的 MTL 框架**,其中子任务的网络结构是可替换的,当中有很大的想象空间。 136 | 137 | ## 代码 138 | 139 | https://github.com/qiaoguan/deep-ctr-prediction 140 | 141 | # ESM2模型 142 | 143 | ## 背景 144 | 145 | > 虽然ESMM模型一定程度的消除了样本选择偏差,但对于CVR预估来说,ESMM模型仍面临一定的样本稀疏问题,因为click到buy的样本非常少。但其实一个用户在购买某个商品之前往往会有一些其他的行为,比如将商品加入购物车或者心愿单。如下所示: 146 | 147 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/8.jpg) 148 | 149 | > 加入心愿单/购物车的数据相较购买数据还是比较多的,因此可以基于这部分数据,通过多任务学习模型来求解CVR模型。文中把加入购物车或者心愿单此类行为称作Deterministic Action (DAction) ,而其他对购买相关性不是很大的行为称作Other Action(OAction) 。此时原来的Impression→Click→Buy过程变成了更加丰富的Impression→Click→DAction/OAction→Buy过程。 150 | 151 | ## 模型 152 | 153 | ### 模型结构 154 | 155 | > ESM2模型结构如图所示,共有3层,SEM、DPM、SCM。 156 | > 157 | > - SEM是embedding共享层,主要将user、item以及user和item交互的sparse ID features和dense features进行embedding; 158 | > - DPM是全连接层,各个子任务分别训练 159 | > - SCM是最终的loss函数输出,预测对应的概率 160 | 161 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/9.jpg) 162 | 163 | > 图中共有4个任务Y1~Y4,意义如下: 164 | > 165 | > - Y1: 点击率 166 | > - Y2: 点击到 DAction 的概率 167 | > - Y3: DAction 到购买的概率 168 | > - Y4: OAction 到购买的概率 169 | > 170 | > 由于DAction和OAction是对立事件,所以从点击到OAction的概率和点击到 DAction 的概率求和为1。 171 | 172 | ### 损失函数 173 | 174 | > 模型有3个loss函数,采用logloss,分别定义如下: 175 | > 176 | > - **pCTR** 177 | > 178 | > Impression→Click的概率是第一个网络的输出。 179 | > 180 | > - **pCTAVR** 181 | > 182 | > Impression→Click→DAction的概率,pCTAVR = Y1 * Y2,由前两个网络的输出结果相乘得到。 183 | > 184 | > - **pCTCVR**: 185 | > Impression→Click→DAction/OAction→Buy的概率, 186 | > 187 | > pCTCVR = CTR * CVR = Y1 * [(1 - Y2) * Y4 + Y2 * Y3],由四个网络的输出共同得到。其中CVR=(1 - Y2) * Y4 + Y2 * Y3,因为从点击到DAction和点击到OAction是对立事件。 188 | 189 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/10.jpg) 190 | 191 | > 最终的损失函数由3部分加权得到: 192 | 193 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/11.jpg) 194 | 195 | > 在预测时,只需要经过后三个网络,便可以计算对应的CVR。 196 | 197 | ## 实验设置 198 | 199 | > 文章对比了几个模型在CVR预估上的效果: 200 | > 201 | > - GBDT 202 | > 203 | > - DNN 204 | > 205 | > 使用Click→Buy的样本来训练CVR模型,使用Impression→Click的样本来训练CTR模型 206 | > 207 | > - DNN-OS 208 | > 209 | > 对Click→Buy的样本进行过采样,其他同DNN 210 | > 211 | > - ESMM 212 | > 213 | > - ESM2 214 | 215 | > 评估指标包括AUC和GAUC,GAUC是对每个用户的AUC进行加权的结果。结果表明:ESM2的表现最好。 216 | 217 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/12.jpg) 218 | 219 | ## Ablation studies 220 | 221 | > 此外,作者还在ESM2上做了Ablation studies,如下: 222 | 223 | - Hyper-parameters of deep neural network 224 | 225 | 主要包含dropout ratio,hidden layers数量,embeddings的dimension 226 | 227 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/13.jpg) 228 | 229 | - Effectiveness of embedding dense numerical features 230 | 231 | 对于numerical features,通常的做法是离散化成one-hot特征,然后embedding。作者尝试了另外一种方式,先将feature归一化,然后采用Tanh来做embedding,最终得到了0.004的AUC收益。 232 | 233 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/14.jpg) 234 | 235 | - Effectiveness of decomposing post-click behaviors 236 | 237 | 文中作者将post-click behaviors分为Scart和Wish,分别对比了only Scart、only Wish和both SCart and Wish的表现,the combination of both SCart and Wish achieves the best AUC scores. 238 | 239 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/15.jpg) 240 | 241 | ## Performance analysis of user behaviors 242 | 243 | 为了对比ESM2模型和ESSM模型的表现差异,作者根据user的购买次数将测试集划分为4组,[0, 10], [11, 20], [21, 50], [50, +)。对比来看,购买行为丰富的user组里,ESM2的AUC提升较大,主要原因在于,购买行为丰富的user,其post-click behaviors(Scart,Wish)也更加丰富。 244 | 245 | ![image](https://github.com/ShaoQiBNU/ESMM/blob/master/img/16.jpg) 246 | -------------------------------------------------------------------------------- /img/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/1.jpg -------------------------------------------------------------------------------- /img/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/10.jpg -------------------------------------------------------------------------------- /img/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/11.jpg -------------------------------------------------------------------------------- /img/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/12.jpg -------------------------------------------------------------------------------- /img/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/13.jpg -------------------------------------------------------------------------------- /img/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/14.jpg -------------------------------------------------------------------------------- /img/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/15.jpg -------------------------------------------------------------------------------- /img/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/16.jpg -------------------------------------------------------------------------------- /img/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/2.jpg -------------------------------------------------------------------------------- /img/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/3.jpg -------------------------------------------------------------------------------- /img/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/4.jpg -------------------------------------------------------------------------------- /img/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/5.jpg -------------------------------------------------------------------------------- /img/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/6.jpg -------------------------------------------------------------------------------- /img/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/7.jpg -------------------------------------------------------------------------------- /img/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/8.jpg -------------------------------------------------------------------------------- /img/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShaoQiBNU/ESMM/f4fd2260bad491578c8236871fd0479c2b9b86a2/img/9.jpg --------------------------------------------------------------------------------