链接 | https://zhuanlan.zhihu.com/p/151640509编辑 | 肉眼品世界
摘要
当下的推荐系统技术大都离不开对成段文本信息的处理,如电商平台上的用户评论、新闻推荐软件上新闻的文本内容等。如何利用文本信息来为用户更好的推荐内容一直是推荐系统的研究热点。近年来,注意力机制在自然语言处理领域大行其道,在许多任务都取得了优秀的成绩,也出现了许多利用注意力机制来构建高效的推荐系统的研究工作。本文对这一领域进行综述,介绍了近年来运用注意力机制增强推荐模型效果的主要工作。
1 引言
推荐系统是深度学习技术在商业社会的一项成功应用。通过从海量的数据中筛选出对用户最有价值的数据,提高整个商业流程的效率。大多数推荐模型都要涉及到对成段文本信息的处理,比如电商平台时用户的评论内容、新闻推荐中的新闻内容等。而注意力机制(attention)可以高效的提取文本中的重点,近几年在NLP领域任务中取得了令人侧目的效果,并涌现出了一大批利用attention提高推荐系统性能的研究工作。将attention运用在推荐系统,大多数是从文本数据的处理出发,利用attention提取文本中的重点进行下游任务,如阿里巴巴的DIN[1],少数是利用了attention能够自动的发现输入特征的重点的这一特性,来优化传统的推荐模型,典型的工作比如注意力分解机(AFM)[2]。
本文首先介绍了所需的背景知识,然后对近年来结合attention的推荐模型进行了综述。根据现有工作的启发,本文还提出了如何利用attention来优化微软新闻推荐模型DRN[3]。最后,我们对现有的工作进行了总结,并讨论了结合attention的推荐模型的可行的研究方向。
2 背景知识
2.1 Attention
处理长文本的时候,使用RNN模型容易遗失掉长程信息。因为RNN模型有一个从前到后或者从后到前的信息传播顺序,信息在传播过程中容易遗漏。而attention[4]可以通过提取文本中的重点,来克服这一问题。最简单的attention模型结构可以表示为图1所示,图中的Key, Query, Value在不同的情境下有不同的含义。
比如说给你一段只有四个字的用户的评论作为 Value , Query 是在评论中找到最能影响其他用户购买行为的部分,而 Key 和 Value 是一样的。具体以图一为例, 代表一段评论中的四个单词,Value与Key含义相同。在第一阶段,我们计算Key与Query的相似度,对输出值进行SoftMax归一化,得到一个attention权重就代表了这一段评论中每个单词的重要程度。将重要性权重与原Value进行加权平均,就得到了Attention Value。上述结算过程可以写为(1)式:
![](https://i-blog.csdnimg.cn/blog_migrate/ad590e1d75a691f88504b3f62ef73a1d.png)
其中,除以 (K的维度)是为了让SoftMax内的数值不至于过大而进入SoftMax函数的饱和区,从而带来较小的梯度,影响优化速度。不同的attention模型计算相似度的方式不同,即通过Query和Key计算得到相似度的方法,常见的如乘法、加法,或是计算余弦相似度。Self-attention指的是Query, Key, Value三者均相同,即把自己作为问题,求自己对自己的attention value。Multi-head attention指的是在做普通attention之前,先将原始的Value,Key,Query做一个线性映射,然后做attention。具体的,通过使用N组不同的线性映射参数,并行的执行N组线性映射然后attention的过程,再将最后得到的N组attention value进行简单的拼接,再通过一次线性映射得到最终的模型输出,图2展示了基本的Multi-head attention结构。
2.2 分解机
传统的线性回归模型,给定一个输入的特征向量 ,线性模型表达式为(2)式:
可以看到输入数据的每一位特征都是被分开考虑的,都有各自的参数。而现实中特征之间可能存在相关性,这种相关性也包含着一定的输入特征的信息,对这部分信息进行建模可以提升模型的表达能力。抱着这种想法,(2)式就可以修改为(3)式:
![](https://i-blog.csdnimg.cn/blog_migrate/7ae5b9b95fdf179142c092f0648c7850.png)
(3)式的问题在于时间复杂度太高,而且更糟糕的,如果我们的数据集是稀疏的,那么两个样本之间非常可能没有交互。比如 代表用户i和电影j,如果数据集中没有二者的交互数据,比如用户i对电影j的评分,那么对应的参数
就是0。
而分解机的想法是,把 这个参数矩阵进行分解[5],来解决稀疏问题,降低计算复杂度。具体的,将
表示为向量的点乘,如(4)式所示:
![](https://i-blog.csdnimg.cn/blog_migrate/fd152c5be86f4fcbb8937e7639f856e7.png)
此时的 对应的参数矩阵
可看作是一种矩阵分解的形式。
其中每一个 的维度是k,通过使用较小的k值,我们就可以提高模型的泛化能力,(为什么可以提高泛化能力说实话我还是不够理解,应该就是用了更少的参数的意思)。通过对新的这种分解形式的参数矩阵
下的式子进行变换,可以将时间复杂度从
降低到
,如(5)式所示:
3 Attention在推荐系统中的应用
3.1 阿里深度兴趣网络
阿里巴巴的DIN[1]通过用户的行为序列来建模用户的兴趣表示。传统的办法通常是把用户的行为序列的每一项的embedding通过求和,求平均等方式转化为一个固定的embedding,我们记为emb2。但是这种办法非常粗糙,因为最终得到的emb2是一个固定维度的向量,将用户的历史行为中交互过的不同物品同等考虑,实际上用户对不同的物品的兴趣应该用不同的方式建模,因此emb2也就无法有效的表示用户兴趣的多样性。DIN通过对用户的历史行为序列进行注意力加权,来解决了这个问题。同时,DIN在实现中用到了诸多工程技巧,使得模型效果更进一步,这里我们主要讨论DIN建模用户兴趣表示的部分。
如图4所示,待推荐的物品 的表示在SUM Pooling之前经过了Activation Unit得到了一个权重。图4的右上方展示了Activation Unit的结构,Activation Unit把用户与广告的embedding作为输入,先进行一个外积操作然后将得到的结果与原embedding拼接,作为最终的权重,用该权重代表用户的兴趣强度。
![](https://i-blog.csdnimg.cn/blog_migrate/0271012e281eb9c4de9e93e3f02bf829.png)
DIN模型的attention部分可以表示为(6)式:
![](https://i-blog.csdnimg.cn/blog_migrate/f973d65b8da6f32336bc80f03f5d6018.png)
其中 表示对用户整体兴趣的embedding,
表示候选广告的embedding,
表示用户第
次行为的embedding,也即用户在第
次交互时所点击的商品或者店铺。
就代表这里的注意力权重的计算,在文中即为ActivationUnit。
3.2 注意力分解机
利用分解机模型可以充分考虑用户与item之间的交互,来预测用户对item的兴趣。在前面已经介绍了分解机(FM)的原理:通过不同的特征向量之间各自做一次乘积操作来进行特征之间的交互。但是随着需要交互的特征数线性增加,或是考虑更高阶的三个特征同时交互的情况时,这种方法的效率就显的很低,不能够很好的推广到更高级的特征交叉的情况。因此人们提出了NFM[6],将(4)式中的最后一项用神经网络来代替。具体的,先将输入的特征向量输入embedding层,然后经过一个特征交叉池化层,最后再通过几层全连接神经网络来输出最终值。这里输入为 ,embedding的输出可看作(4)式中的
。其中特征交叉池化层的操作可写作(7)式:
![](https://i-blog.csdnimg.cn/blog_migrate/bb7f33f4c297c9eb217b0196d5bbb78e.png)
这里要介绍的AFM[7]可以看作是对NFM的扩展,我们可以使用AFM来构建优于原始FM与NFM的推荐系统,其模型示意图如图5所示:
![](https://i-blog.csdnimg.cn/blog_migrate/855f11316f7df78a0e144a072e4136bb.png)
具体的,将特征交叉池化层和最终的输出层之间加入了attention操作。在特征交叉层也采用了元素积操作,求出交叉特征之后输入一层全连接网络进行激活,再将输出值进行SoftMax归一化操作,作为最终的注意力权重,将交叉特征进行注意力加权平均就得到了最终的输出结果(注意力分数)。其中注意力权重的计算可以表示为(8)式:
3.3 神经注意力评分回归
考虑评论信息可以构建更高效的推荐系统,NARRE[8]考虑的是不但要考虑评论信息,还要考虑评论信息的质量,也就是给每一个评论加上一个重要性权重,因此attention的思想很自然的就出现了。
NARRE的模型如图6所示,模型主要包含User Modeling部分、Item Modeling和输出部分。
![](https://i-blog.csdnimg.cn/blog_migrate/0eb8047e3748d877e0880eec4c6710f3.png)
其中,User Modeling和Item Modeling分别处理user的评论与item收到的的评论。两个模型的结构相同,这里我们以Item Modeling为例来介绍。首先将item的评论转换为一个词向量矩阵 。图6中的
代表
的第1条评论的词向量矩阵。
代表写下
的第一条评论的用户的id的embedding。最终目的是得到这k个用户所写的评论的注意力权重,具体的做法如(9)式所示:
![](https://i-blog.csdnimg.cn/blog_migrate/016122976b4a088ac871ce8a018b7c2f.png)
对 做一个SoftMax归一化即可得到最终的注意力权重:
![](https://i-blog.csdnimg.cn/blog_migrate/84150c50808460ecf94aa0c0dad9420c.png)
最终输出一个注意力加权的评论特征,在经过一层不激活的全连接来得到输出。本模型最终的目的是给出用户u对 的评分,最终的输出部分采用了潜因子模型,这里不是本文讨论的重点,因此不做过多阐述。值得注意的是,(9)式中的user id embedding和图6中的user id embedding是不同的,因为后者表示的是用户的偏好,所以不能和(9)式中的embedding采用一样的形式,文中认为这样做会损失模型的表达能力。
另外值得一提的是,本文发表于WWW 2018,在同年的WWW上又一篇论文与本文类似,主要不同在于评论的embedding部分采用了双向的GRU[9]。
3.4 多头协同注意力推荐网络
MPCN[10]的出发点也是希望对评论加上一个重要性权重,因此用到了attention的思想,但是在attention的权重计算方式上和[8][9]截然不同,是通过相似度矩阵来计算attention权重的。MPCN的模型结构如图7所示,核心即为两个相似度矩阵,以及review pointer模块。
![](https://i-blog.csdnimg.cn/blog_migrate/39abf39b434c177b8013b8167bf68346.png)
输入的是用户的评论列表与item的评论列表,具体如何embedding文中表述不清晰,上下文有冲突。这里我以下文的描述中推测出embedding是把每一个评论中的每一个单词映射为d维向量,然后每个评论的embedding就是对其中每个单词的embedding求和,最终输入的评论列表 被映射为
的矩阵。这种描述可能与原文的上文有冲突,但是与后文都契合,希望大家帮助指正。
拿到embedding之后,先经过一个门控层来控制每一条评论对后续操作的影响程度,这一点在模型结构图中没有表现,具体的计算方式是:
![](https://i-blog.csdnimg.cn/blog_migrate/cbafa4725c3209b06ef77bedf49e8bc4.png)
其中除 外,其他都是网络的参数。要注意,上述操作用分别对用户评论
,和item评论
进行。
下面计算 与
之间的相似度矩阵
:
![](https://i-blog.csdnimg.cn/blog_migrate/2ba03cc9d5f45d72ea09ffbfefb57e2a.png)
其中 表示
的参数矩阵,
代表一个前向神经网络,值得注意的是,我们对
和
用的是同一个网络。
如何从相似度矩阵中提取attention权重呢?常用的办法是对行或列进行求和,或者求平均,或者求最大值,因为这里我们得到attention权重之后还有review pointer模块,其目的是找到诸多评论中最有用的一条,因此我们这里对相似度矩阵在行列上求最大值,希望找到注意力权重最大的的评论,具体的计算方式如下式所示:
![](https://i-blog.csdnimg.cn/blog_migrate/6a0564fe405e9d808d4befe5efe3d26b.png)
其中的 代表Gumbel-SoftMax操作,通过Gumbel-softMax得到one-hot向量,指出最有价值的用户评论与item评论的位置,将这两个评论单独拿出来出来。随后,这两个评论进行词级的协同注意力,也就是对这两个评论计算相似度矩阵,然后求注意力权重。具体的计算方式与上文中的评论级协同注意力的计算类似,不过对相似度矩阵操作时采用了平均池化。
到此,本文标题中的"Multi-Pointer Co-Attention Networks"也就不难实现了:我们只要让review pointer模块多输出几个评论就好了,而不是只输出一个。
对review-pointer提取出的用户与item评论求相似度矩阵,然后在行列进行平均池化求出注意力权重,拿这个权重对review-pointer模块的输入评论的embedding进行加权:
![](https://i-blog.csdnimg.cn/blog_migrate/987f311ad2dccf695aff4cbe986df598.png)
最后为了得到用户对item的评分,结果输出层采用了最原始的分解机,计算方式即为(4)式,输入值为注意力加权后的 和
,输出值即为用户与物品的交互的强度,也可看作用户对物品评分的预测。
4 讨论与总结
4.1 如何将attention机制用在微软的新闻推荐系统?
我们现在通过讨论“如何将attention机制用在微软的新闻推荐系统?”这一问题,来总结推荐系统中利用attention机制的方式。微软新闻推荐系统DRN[3]通过深度动作价值网络来预测用户对新闻的兴趣,网络模型如图8所示:
![](https://i-blog.csdnimg.cn/blog_migrate/9dd7240be9162694599a3102c77bb454.png)
其中输入的四个特征都由代表某一类属性是否出现的one hot向量和代表点击次数和时间的向量组成,也就是说四个特征的表示都不是通过embedding得到的。网络中的 表示用户的特征,
表示待选的新闻列表,而求出的
本身,其实就可以看作是用户对新闻的attention,这其实和阿里DIN的attention是类似的,这里的
就是DIN的Activation Unit。同样的,我们也可以用AFM来代替这里的
,这样就是用分解机来代替了单纯的深度模型。
如果考虑对新闻文本的利用,我们可以做用户特征与新闻word级别的embedding来求attention权重;或者像MPCN一样,求出一个用户与新闻的相似度矩阵,通过对矩阵进行行列操作,求出用户与新闻的对应attention权重。
4.2 未来研究方向展望
Attention用于推荐系统可以帮助模型更高效的利用信息,本文所讨论的方法都是从这个角度出发提出了新的模型。未来研究attention在推荐系统的应用,除了对现有方法的排列组合,还应多考虑如何将传统的方法进行“深度化”和“attention化”来提高其性能;以及更加高效的attention的形式,例如在对文本信息进行attention时,本文就展示了两种截然不同的形式,在什么情况下用哪一种形式更好,以及在特殊的推荐领域是否有针对问题的更加高效的利用attention的形式,都是一个值得研究的有趣的问题。
5 参考文献
Deep Interest Network for Click-Through Rate Prediction
Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
DRN: A Deep Reinforcement Learning Framework for News Recommendation
Attention is All you Need
Factorization Machines
Neural Factorization Machines for Sparse Predictive Analytics
Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
Neural Attentional Rating Regression with Review-level Explanations
Coevolutionary Recommendation Model: Mutual Learning
Multi-Pointer Co-Attention Networks for Recommendation
相关阅读:
小红书架构负责人:Flink在推荐系统中的应用,25页ppt
【重磅分享】从零到一搭建推荐系统指南白皮书.pdf(附48页下载链接)
你点的每个“在看”,我都认真当成了喜欢