ESMM

                                                                    来一张狗头镇楼,镇压我代码万古岁月~~~~~~


交叉熵损失函数

开篇之前,记录以下关键名词:

impression:用户观察到曝光的产品

click:用户对曝光产品的点击

conversion:用户点击后对物品的购买行为

CTR:点击产品的次数 / 曝光产品

CVR:购买 / 点击次数

CTCVR:购买 / 曝光产品

pCTR:p(click=1 | impression)

pCVR:p(conversion=1 | click=1,impression)

pCTCVR:p(conversion=1,click=1 | impression)  = p(click=1 | impression) * p(conversion=1 | click=1,impression)


上图当中,整体空间中,impression(白色大圆)为曝光的产品定义为X,click(灰色部分)为用户点击的产品,定义为Xc,conversion(黑色部分)为用户购买的产品。传统的的推荐系统仅用Xc作为训练样本来训练CVR预估模型。

首先用户会impression一部分商品,然后选择感兴趣的进行click操作,再从click生成的集合中选择一些感兴趣的进行conversion操作,也就是购买。之前的baseline在解决该问题的时候,直接把CTR预估模型套用在CVR场景,特别是在构建训练数据集的时候,原来的构造方法正样本选取的是click=1&&conversion=1的,但是负样本选取的是 click=1 && conversion = 0,这样显然构造的样本肯定是全部都是click操作之后的,这样子选练出来的模型如果放在真实的实战场景中很难取得比较好的效果。毕竟真实场景来自impression中的数据,而训练出来的模型却是click中的样本,这种现象就是论文中的“sample selection bias”(SSB)。同时,click中的数量远远小于impression范围内的样本量,这样就会导致更加严重的“data sparsity”.

样本选择偏差(sample selection bias,SSB):传统的的推荐系统仅用Xc作为训练样本来训练CVR预估模型。但是训练好的模型是从整个样本空间X去做推断的。点击事件相对于整个产品空间只是占很小的一部分,只是他的一个子集,从子集上提取特征相对于从整个样本空间提取特征是有偏的,甚至很不相同。这种方法构建的训练子集相当于从一个与真实分布不一致的分布中采样得到的,在一定程度上违背了机器学习中的独立同分布假设。这种训练样本从整体样本空间的一个较小子集中提取,而训练得到的模型却要对整个样本空间进行推断预测的行为现象,叫做样本选择偏差。样本选择偏差会降低模型的泛化能力。

数据稀疏问题(data sparsity,DS):推荐系统推荐给用户的商品远远大于用户点击的商品,有过点击行为的用户仅仅占所有用户的很少的一部分。所以,有过点击行为的样本占整个样本空间很小,通常来说,要少1~3个数量级。如上表所示,在淘宝公开的数据集上,Xc只占整个样本空间X的4%,这就是训练数据集稀疏的问题,高度稀疏的数据集使得模型学习比较困难。

所以,为了解决上述两个问题,阿里妈妈提出了完整空间多任务模型ESSM。

来,吹模型:

ESSM模型:

阿里妈妈提出的模型

整个网络的架构如上,可以看出整个模型用到了multi_task的思想。整体来看,左手CVR,右手CTR,最终这两个预测结果的概率相乘就得到了CTCVR,即Pctcvr = Pctr * Pcvr ,仔细一看这两个网络结构几乎一模一样,同时这两部分网络共享Embedding Layer .在训练的时候,左边CVR模型利用click数据进行训练,右边的CTR模型则利用impression data数据进行训练。整体来看,Embeddinglayer占据了大部分的模型参数,这样这样在CTR子模型训练的时候,用到了更多的训练数据 ,这两个模块联合的训练损失函数如下:

 其中yi标识一个样本是否被点击了(click),yi and zi标识一个样本是否被点击(click)以及是否被购买(conversion)。

然后上代码,下节吧,这节还没整。

猜你喜欢

转载自blog.csdn.net/qq_41853536/article/details/85040315