推荐系统论文阅读(四十二)-阿里:融合Match和Rank的DM
论文:
论文题目:《Deep Match to Rank Model for Personalized Click-Through Rate Prediction》
论文地址:https://ojs.aaai.org//index.php/AAAI/article/view/5346
我们之前介绍了很多的文章,发现很多文章都是针对match或者rank去做的,很少有一个模型可以去同时完成这两个工作,从事推荐算法工作的人都知道,召回模型的负样本跟排序模型的负样本会有很大的差异,这个我在之前的文章已经说过了很多次,所以说,如果同时使用rank的label或者使用match的label就会让另一个模型难以优化,也就是我们一直说的样本选择偏差问题。
下面我们就来介绍一下,阿里是怎么讲两个任务用一个统一的模型进行建模。
一 、背景
开始讲DMR之前,我们先来回忆一下airbnb那篇经典的文章,通过item2vec建模出item的embedding后,后面其实还讲了如何使用训练到的embedding信息以及user跟itme的相关性分数去训练排序模型,DMR其实在这里也借鉴了这个思想,把相关性分数当作特征输入到后面的排序模型了,但是这个相关性分数是伴随着整个模型一起额外训练出来的。
先来介绍几个概念,
User-to-Item(U2I):这种模型一般是通过建模出user的向量和item的向量,然后用内积的方式来表示user和item之间的相似度。(YoutubeDNN)
Item-to-Item(I2I):这种模型一般是讲用户的点击序列进行建模,建模得到item之间的相似度,然后通过item之间的相似度来计算user跟itme之间的相似度。(airbnb)
在DMR模型中,我们用这两种经典的召回模型来构建底层的特征提取结构,而u2i的子模块又可以将产出的向量当作后面我们在召回使用的结果。
二 、DMR模型结构
模型的整体结构如上图所示,除了我们之前说的u2i和i2i以外,整个模型跟我们之前看到的所有的阿里的模型都非常相似,特征都是四部分组成,用户特征,上下文特征,序列特征,还有目标item的特征,这是ctr预估任务中一般的几类特征,我们先来看看文章里出现的符号吧。
:用户的画像特征
:用户的序列行为特征
:目标item的特征
:上下文特征
这四部分的特征都是离散特征,都会经过embedding层得到对应的embedding向量。
2.1 Based Model
based model是不含u2i和i2i结构的,其实就是DNN结构,除了behaviors特征以外,其他的特征全部concat在一起,behaviors特征通过sum pooling的后也跟之前得到了向量concat到一起,得到所有的特征向量后,直接在后面接上Prelu+MLP+sigmoid就可以进行分类了,损失函数为:
2.2 The structure of Deep Match to Rank
2.2.1 User-to-Item Network
如上图所示,整个U2I的结构长这样,这里也就是我们DMR模型中Match任务的重点了,因为这里可以直接产出优质的item embedding存储下来,然后利用这个U2I结构去在线生成user embedding去做向量召回了,user向量总体的计算如下:
这部分结构其实跟DIN中对于用户点击序列的处理方式是一样的,都是对用户的序列进行attention+pooling的方法,不同的地方在于这里没用候选item去计算相似度,文中使用的是偏置向量P,这里其实我们可以从两个角度去理解为什么要用这个时间偏序向量来计算attention score:
1.由于我们的match阶段是向量化召回的方式(faiss),所以这里肯定不能用候选item来计算user 向量。
2.时间偏序信息在用户的序列行为中可以带来重要的信息,可能会对用户在当前的偏好建模非常有用。
文中没有直接使用下面的公式来建模user跟item之间的相似度:
其中v是候选item的向量,这里模型采用的是跟之前item embedding table不一样的table,就跟youtube dnn那篇文章中使用另一套参数的方法一样,事实上也证明了多了一套参数的情况下会给模型的优化带来较好的收益,其实这里我个人的理解是这样,共现关系的建模和序列行为中item行为的建模可能是彼此矛盾的,所以优化起来不是很容易,正如zgr在CAN文章所说的原因。
不直接使用这个r的原因是:
1.直接建模这个相似度难以优化,因为用排序模型中的label无法很好的去优化match任务,正如我们前面所说的原因一样,在召回模型中,负样本是很有讲究的
2.v的学习通常只跟r相关,所以根本不需要用最后排序中的label来优化
文章对这里的改进是这样,用每一个时间步的item去作为item,其他item随机负采样作为负样本来优化这个u2i召回模型,正如我们在召回任务中负采样的方式一样,如果只让这个u2i去学习rank中的label,那么这个u2i就会一叶障目不见泰山了。
pj是在T时刻点击T这个时刻,用T-1计算出的user 向量跟T时刻点击的物品j计算得到的点击概率,这里是个多分类问题,肯定不能直接用softmax直接去优化了,所以这时候负采样+交叉熵就派上用场了:
2.2.2 Item-to-Item Network
这部分结构跟DIN中对于序列的出来就差不多了,直接看公式吧:
除了sum pooling这部分以外,模型还把候选item的向量直接送到后面的mlp中了,此外还多了一个r,r是归一化之前计算得到的score的和,至于为什么要将r也输入到后面的mlp中呢,前面也说过了相关性分数对于整个排序模型会带来很大的提升,如果整个模型是树模型的话,往往r的特征重要性就会很大。
2.2.3 模型的输出和训练
模型进入分类之前的input为:
总的损失函数为:
三 、实验结果
其实文章通篇的思路都是围绕着如何把match结果提取到的信息接入到排序中,也就是不管是u2i还是i2i都只是作为排序模型特征抽取的部分,我有个比较好奇的地方是,如果引入了这两种结构,会不会对其他路召回的结果带来排序上的偏差,毕竟模型肯定能学习到这两种召回模型的结果。