现在越来越多的推荐模型开始利用用户的点击序列来发掘用户的兴趣,本文主要是关注用户的如何在序列表征中 去噪 ,并对用户的 长期兴趣 进行发掘建模,从而提出user-aware memory network ( DUMN ).
框架图太大可以放大看,公式太长,建议左右滑动
背景
阿里之前已经提出过很多利用用户历史点击序列来建模进行推荐的模型,比如DIEN,DIEN等等。
- 但是这些方法都没有考虑到序列中的噪声 对表征的影响,
- 并且通常我们使用用户的短序列建模后可以发掘用户的短期兴趣,而如果想要挖掘用户的长期兴趣则需要更长的序列,而这会导致很大的内存和计算消耗,并且从用户序列中发掘的长期兴趣也不一定是合理的。例子:比如一个用户有宠物猫,那他长期兴趣可能是猫粮;这和他近期点了什么无关。因此,长期兴趣更好的方式是从用户本身特征出发,而这可以和用户的点击序列解耦。
- 系统得到的反馈,包括评分、点击与否、喜欢与否等都能反映用户的兴趣,但是不同的反馈形成的偏好是有区别的。
方法
如图所示,DUMN有四个部分组成包括:embedding
layer, FP layer, UMN layer and PAIR layer。
- embedding layer :将用户、ad和click、unclick、like、dislike四个序列作为输入,然后得到embedding
- FP layer :这部分是图中右下部分的多头交互注意力组件(multi-head interaction-attention component)。对隐式和显式反馈进行建模,利用正交映射 (orthogonal mapping)将显式反馈的的表征对隐式反馈去噪。
- UMN :捕获用户细粒度的长期兴趣
- PAIR :将短期兴趣和长期兴趣融合交叉表征 ,最后进行预测。
Embedding Layer
embedding部分主要就是将上述对的6个部分进行转换,用户,item的profile特征以及用户的行为序列特征click:,unclick:作为隐式反馈,dislike:,like:作为显示反馈。其中T是序列最长长度。根据以往的方法embedding后得到。
Feature Purification Layer(FP Layer)
用两个模块来学习用户的短期兴趣,并利用正交映射将显示反馈的表征净化隐式反馈的表征。
Multi-head Interaction-attention Component
利用多投自注意力网络来捕获用户的细粒度偏好表征。 如图1中右下角。以为例,将构造为H头,,表示第h个头对应的。多头自注意力机制计算方式如下:
其中W是可训练参数。将item和user与上面得到的中每个位置j拼接后,经过全连接层得到注意力值。表示第j个位置的item对应经过多头注意力后值,Wc为可学习参数,通过softmax归一化
最后,将计算得到的权重和加权,得到融入item特征的click序列特征
可以用类似方法得到。
Feature Orthogonal Mapping Component
点击与否是隐式反馈,喜欢与否是显式反馈。通过是否喜欢这个特征,我们可以直接得到用户的兴趣,但是点击了某个item不代表用户就是对这个有兴趣,可能是误点,也可能是其他原因。因此这里需要用显式的对隐式的进行净化去躁。构造两个正交映射对<click, dislike>和<unclick, like>,他们对应的表征为<fc,fd>和<fu,fl>。以<fc,fd>为例,为了净化带有噪声的隐式反馈序列的表征,我们将序列表征对的第一个元素 fc 投影到第二个元素 fd 的正交方向上。将原始特征向量 fc 投影到正交特征空间以消除噪声特征。 这里相当于是认为显式的肯定是对的,那么这两个正交映射对中隐式部分都是和显式相反的,那么正交情况下,肯定是完全相反的,因此就可以用正交的方式来矫正隐式反馈的表征。
通过向量相减就可以得到正交向量,相同方案也可以得到
User Memory Network Layer(UMN)
这里结合用户画像来获得用户的长期兴趣,而不是仅采用用户的点击序列。本节在NTM的memory network的基础上进行改进,具体NTM的相关细节可以参考其原文。
- 使用四个memory network()来存储用户的这些喜欢与否,点击与否的短期序列。每个memory含有m个槽,包含Z维的向量。
- controller(这个应该是NTM中memory network固有的组件)的输入为FP得到的用户短期表征和用户画像特征表征。
以为例:
memory read
controller生成,,其中FFN为feed-forward network前馈神经网络,其实就是一个全连接层。然后遍历每一个槽(slot),计算每个槽对应的权重,j是第j个槽
输出可以计算为加权和
Memory write
在新输入到来,进行写入更新新数据时,也会生成权重,用于写入的每个槽的权重。同时还会生成两个key,相加的和用于擦除的,更新公式如下:
叉乘是外积,点乘是内积 相同方法可以得到:四个长期兴趣表征。
Preference-aware Interactive
Representation Component(PAIR)
这部分是将用户的长期兴趣和短期兴趣进行融合
W为维度转换矩阵,使得拼接的两个兴趣表征维度一致。为click的兴趣,其余的也可以用相同的方式得到。拼接后得到最终的表征,然后和user和item的画像特征结合用于预测
Loss Function
损失函数有两部分组成,一方面用于预测概率的部分依旧是结合上述得到的y,采用交叉熵损失函数进行损失计算。另一方面,需要确保写入这4个记忆网络的内容能够真实表达用户长期的点击、不点击、喜欢和不喜欢的偏好。作者利用triplet loss,每次更新memory的时候,从四个序列中随机挑选出一个item,通过embedding后得到。之后组成样本对,<sc, su>,<su, sc>,<sl, sd>,<sd, sl>。以为例得到loss:
是记忆网络中取得的anchor,公式总体含义就是希望点击的
能够尽量和anchor相似,而未点击的尽量不相似。最终的损失函数为
更多内容: