【RS】Collaborative Memory Network for Recommendation Systems - 基于协同记忆网络的推荐系统

【论文标题】Collaborative Memory Network for Recommendation Systems    (SIGIR'18)html

【论文做者】—Travis Ebesu (Santa Clara University)、—Bin Shen (Google)、—Yi Fang (Santa Clara University)web

【论文连接】Paper (10-pages // Double column)数组

【摘要】网络

  在现代网络平台上,推荐系统对于保持用户对个性化内容的关注起着相当重要的做用。深度学习已经完全改变了许多研究领域,最近人们对将其应用于协同过滤(CF)的兴趣大增。然而,现有的方法使用隐含因子模型构建深度学习体系结构,忽略了CF模型、邻域或基于内存( memorybased ?)的方法这一大类。咱们提出了协同记忆网络(CMN)这是一种利用隐含因子模型的全局结构和基于局部邻域结构的非线性方式将两类CF模型统一块儿来的深度架构。在记忆网络成功的激励下,咱们记忆组件和神经注意机制融合为邻域组件记忆模块中与用户和物品记忆的关联寻址方案编码复杂的用户-物品关系,并结合神经注意机制,学习用户-物品特定的邻域。]  最后,输出模块与用户和物品记忆共同利用邻域生成排名分数。将多个记忆模块堆叠在一块儿能够获得更深层的架构,以捕获日益复杂的用户-物品关系。此外,咱们还展现了CMN组件、记忆网络和三类CF模型之间的紧密联系。综合实验结果代表,CMN在三个公共数据集上的有效性优于竞争基线。注意力权重的定性可视化提供了对模型推荐过程的洞察,并建议存在更高阶的交互。架构

【关键词】框架

深度学习、记忆网络、协同过滤。函数

 

 

 

【Reference】post

一、推荐系统赶上深度学习(二十九)--协同记忆网络理论及实践:https://www.jianshu.com/p/3e80d8426f7f性能

二、记忆网络之Memory Networks:https://zhuanlan.zhihu.com/p/29590286学习

三、记忆网络之End-To-End Memory Networks:https://zhuanlan.zhihu.com/p/29679742

1 介绍】

在信息过载的时代,推荐系统显得十分重要。而在推荐系统中,协同过滤是一种很是受欢迎且有效的方法。协同过滤基于用户和物品的过去交互行为,同时认为类似的用户会消费类似的物品,从而进行推荐。

协同过滤是一类推荐方法,大致上能够分为三个分支:

基于邻域的方法。这也是咱们常说的基于物品的协同过滤基于用户的协同过滤方法。咱们首先须要计算用户之间、物品之间的类似度,随后基于计算的类似度进行推荐。这种方法的一个主要缺陷就是只使用了局部的结构,而忽略了不少全局的信息,由于咱们只使用K个类似用户或者类似物品进行相关的推荐。好比KNN

  基于隐向量的方法。(隐含因子模型)这一分支中最具表明性的是矩阵分解及后面的各类改进方法。一般的作法是将每个用户和物品表示成一个n维的向量,经过用户矩阵和物品矩阵的相乘,但愿可以尽量还原评分矩阵。这种作法虽然考虑了全局的信息,可是忽略了一些比较强的局部联系。好比MF矩阵分解

  基于混合模型的方法。因为上述两种方法都有各自的缺陷,所以混合方法开始出现。结合基于邻域的方法和隐含因子模型来强化预测能力。最具表明性的是因子分解机SVD++方法。


也就是说,在使用协同过滤这些方法时,咱们一般须要关注两点:
1
、须要考虑全局的信息,充分利用整个评分矩阵。
2
、须要考虑局部的信息,考虑用户或者物品之间的类似性。类似性高的用户或者物品给予更高的权重。

本文将要介绍的协同记忆网络,即是充分利用了上述两方面的信息。协同过滤咱们已经介绍了,那么什么是记忆网络呢?咱们接下来进行介绍。

2. 记忆网络Memory Network简介

Memory Network是深度学习的一个小分支,从2014年被提出到如今也逐渐发展出了几个成熟的模型。咱们这里只介绍其中两个比较基础的模型。一个是 Basic Memory Network,另外一个是End to End Memory Network

咱们首先要搞清楚的是,为何要有记忆网络?在翻译、问答等领域的任务中,咱们一般使用的是Seq2Seq结构(是一个Encoder-Deocder结构的模型,输入是一个序列,输出也是一个序列。),由两个循环神经网络组成。传统的深度学习模型、循环神经网络(RNN,LSTM,GRU)使用hidden states或者Attention机制做为他们的记忆功能,可是这种方法产生的记忆过小了,没法精确记录一段话中所表达的所有内容,也就是在将输入编码成dense vectors的时候丢失了不少信息。所以,在模型中加入一系列的记忆单元,加强模型的记忆能力,便有了Memory Network

2.1 Basic Memory Network

基本的Memory NetworkFacebook2014年的“Memory Networks”一文中提出。该模型主要包含一系列的记忆单元m能够当作是一个数组,每一个元素保存一句话的记忆)和IGOR四个模块。主要由一个记忆数组mIGOR四个模块。结构图以下所示:

preview

简单来讲,就是输入的文本通过Input模块编码成向量,而后将其做为Generalization模块的输入,该模块根据输入的向量对memory进行读写操做,即对记忆进行更新。而后Output模块会根据Question(也会通过Input模块进行编码)对memory的内容进行权重处理,将记忆按照与Question的相关程度进行组合获得输出向量,最终Response模块根据输出向量编码生成一个天然语言的答案出来。

各模块做用以下:

preview

basic model的实现细节以下:

1) basic modelI模块就是一个简单的embedding lookup操做,也就是将原始文本转化为词向量的形式;

2G模块则是直接将输入的向量存储在memory数组的下一个位置,不作其余操做,也就是直接写入新的记忆,对老的记忆不作修改。

主要的工做在OR两个模块进行。

3O模块根据输入的问题向量在全部的记忆中选择出top-K相关的记忆,具体选择方式为,先选记忆中最相关的memory
  

接下来根据选择出的o1和输入x一块儿选择与他们两个最相关的记忆o2

(对于上面这个等式,若是xo1采用的都是线性的向量表示(BOW等),则能够拆分红下面加和的方式,不然不能够。

就这样选择出于Question最相关的top-Kmemory slot便可。将其做为

4R模块的输入,用于生成最终的答案。

其实这里也很简单就是使用与上面相同的评分函数计算全部候选词与R输入的相关性,得分最高的词语就做为正确答案输出便可:

而上面屡次用到的评分函数知足下面的形式便可:

最终模型选择margin ranking loss做为损失函数,即要求正确答案的得分比错误答案的得分高至少一个margin r。公式以下:

preview

这里的错误答案都是随机从样本中采样而来,而不是计算全部错误样本。下面咱们举一个简单的例子来讲明上述过程:

对于第一个问题:where is the milk now?输出模块会对全部的memory(其实就是输入的句子)进行评分,获得“Joe left the milk。”得分最高,也就是与问题最相关,而后再对剩下的记忆进行评分,找出与where is the milk now?和Joe left the milk最相关的memory。咱们发现是“Joe travelled to the office”。这样咱们就找到了最相关的记忆,接下来使用R模块对全部的单词进行评分找到得分最高的单词做为答案便可。

(这篇论文的重点在于他提出了一种普适性的模型架构(Memory Network),可是不少部分并无作得很完善,论文后面也对输入是词、memory比较大、新词等问题进行了专门的阐述,不过我以为看后面别人在此基础上发的论文更有借鉴意义。因此这里再也不进行详细的介绍。)

 

2.2 End to End Memory Network

End to End Memory NetworkMemory Network的一个改进版本,能够进行端对端的学习。原文中介绍的网络模型应用于QA任务。

这是Facebook AIMemory networks以后提出的一个更加完善的模型,前文中咱们已经说到,IG模块并未进行复杂操做,只是将原始文本进行向量化并保存,没有对输入文本进行适当的修改就直接保存为memory。而OR模块承担了主要的任务可是从最终的目标函数能够看出,在OR部分都须要监督,也就是咱们须要知道O选择的相关记忆是否正确,R生成的答案是否正确。这就限制了模型的推广,太多的地方须要监督,不太容易使用反向传播进行训练。所以,本文提出了一种end-to-end的模型,能够视为一种continuous formMemory Network,并且须要更少的监督数据即可以进行训练。论文中提出了单层和多层两种架构多层其实就是将单层网络进行stack

们先来看一下单层模型的架构:

单层 Memory Networks

单层网络的结构以下图所示,主要包括下面几个模块:

preview

模型主要的参数包括A,B,C,W四个矩阵,其中A,B,C三个矩阵就是embedding矩阵,主要是将输入文本和Question编码成词向量,W是最终的输出矩阵。从上图能够看出,对于输入的句子s分别会使用AC进行编码获得InputOutput的记忆模块,Input用来跟Question编码获得的向量相乘获得每句话跟q的相关性,Output则与该相关性进行加权求和获得输出向量。而后再加上q并传入最终的输出层。接下来详细介绍一下各个模块的原理和实现(这里跟论文中的叙述方式不一样,按照本身的理解进行介绍)。

输入模块

首先是输入模块(对应于Memory Networks那篇论文的IG两个组件),这部分的主要做用是将输入的文本转化成向量并保存在memory中,本文中的方法是将每句话压缩成一个向量对应到memory中的一个slot(上图中的蓝色或者黄色竖条)。其实就是根据一句话中各单词的词向量获得句向量。论文中提出了两种编码方式,BoW和位置编码

BoW就是直接将一个句子中全部单词的词向量求和表示成一个向量的形式,这种方法的缺点就是将丢失一句话中的词序关系,进而丢失语义信息;

位置编码的方法,不一样位置的单词的权重是不同的,而后对各个单词的词向量按照不一样位置权重进行加权求和获得句子表示。位置编码公式以下:lj就是位置信息向量(这部分能够参考咱们后面的代码理解)。

此外,为了编码时序信息,好比Sam is in the bedroom after he is in the kitchen。咱们须要在上面获得mi的基础上再加上个矩阵对应每句话出现的顺序,不过这里是按反序进行索引。将该时序信息编码在TaTc两个矩阵里面,因此最终每句话对应的记忆mi的表达式以下所示:

输出模块

上面的输入模块能够将输入文本编码为向量的形式并保存在memory中,这里分为InputOutput两个模块,一个用于跟Question相互做用获得各个memory slot与问题的相关程度,另外一个则使用该信息产生输出。

 

首先看第一部分,将Question通过输入模块编码成一个向量u,与mi维度相同,而后将其与每一个mi点积获得两个向量的类似度,在经过一个softmax函数进行归一化:

pi就是qmi的相关性指标。而后对Output中各个记忆ci按照pi进行加权求和便可获得模型的输出向量o

Response模块

输出模块根据Question产生了各个memory slot的加权求和,也就是记忆中有关Question的相关知识,Response模块主要是根据这些信息产生最终的答案。其结合oq两个向量的和与W相乘再通过一个softmax函数产生各个单词是答案的几率,值最高的单词就是答案。而且使用交叉熵损失函数作为目标函数进行训练。

 

多层 Memory Networks

多层记忆网络模型,其实就是将多个单层模型进行stack在一块。这里成为hop。其结构图以下所示:

 

首先来说,上面几层的输入就是下层ou的和。至于各层的参数选择,论文中提出了两种方法(主要是为了减小参数量,若是每层参数都不一样的话会致使参数不少难以训练)。

1. Adjacent:这种方法让相邻层之间的A=C。也就是说Ak+1=Ck,此外W等于顶层的CB等于底层的A,这样就减小了一半的参数量。

2. Layer-wiseRNN-like):与RNN类似,采用彻底共享参数的方法,即各层之间参数均相等。Ak=...=A2=A1,Ck=...=C2=C1。因为这样会大大的减小参数量致使模型效果变差,因此提出一种改进方法,即令uk+1=Huk+ok,也就是在每一层之间加一个线性映射矩阵H

【本文主要贡献】

1) 基于记忆网络的成功经验,咱们提出了一种解决隐式协同过滤问题的协同记忆网络(CMN)CMN加强了外部记忆和神经注意力机制。记忆模块的关联寻址方案做为识别类似用户的最近邻模型。该注意力机制根据特定的用户和物品学习用户邻域的自适应非线性加权。输出模块利用自适应邻域状态与用户、物品记忆之间的非线性相互做用,推导出推荐值。

2)咱们揭示了CMN与两类重要的协同过滤模型之间的联系:隐含因子模型和基于邻域的类似度模型。进一步,咱们揭示了非线性积分融合两种模型的优势,获得了一个混合模型。

3在三个公共数据集上的综合实验证实了CMN在七个对比基线上的有效性。多个实验配置证明了记忆模块的额外好处。

4)注意力权重的定性可视化提供了对记忆组件的深刻了解,为更深层次的体系结构捕获更高阶的复杂交互提供了支持证据。

 

 

 

2 相关工做】

2.1 推荐系统中的深度学习】

最近,将深度学习应用于推荐系统的兴趣激增。在早期的做品中,Salakhutdinov等人经过应用两层限制玻尔兹曼机模型的电影分级表来解决协同过滤问题。自动编码器Autoencoders)一直是推荐系统深度学习体系结构的一种流行选择[20,28,333,37,41]

自动编码器的做用是做为一个非线性分解的评分矩阵取代了传统的线性内积。例如,AutoRec[28]使用AutoEncoder分解评分矩阵,而后进行重构,以直接预测评分,从而在众多基准数据集上得到具备竞争力的结果。协同去噪自编码器(CDAE)[37]经过集成一个特定于用户的偏置到一个自编码器作出top- n推荐,证实了CDAE能够被看做是许多现有协同过滤方法的推广。Li等人采用边缘去噪的自动编码器,下降了与深度学习相关的计算成本。使用两个自动编码器,一个用于物品内容,另外一个用于链接用户和物品隐含因子的用户内容。AutoSVD++[41]扩展了原有的SVD++模型,使用对比式自动编码器捕获辅助的物品信息。一个分层贝叶斯模型[33]桥接矩阵分解与最深层的堆叠去噪自动编码器利用项目内容的过程。

    神经矩阵分解[11]经过学习矩阵分解和前馈神经网络处理隐式反馈。而后在最终输出以前将输出链接起来,以产生隐含因子和非线性因素之间的交互做用。EbesuFang[4]经过对物品内容作紧密耦合深度神经网络(DNN)来解决物品冷启动问题,并经过成对矩阵分解来分解评分。DNN为新物品构建了物品内容和物品隐含因子的健壮表示。Cheng等人联合训练了一个logistic回归和一个DNN来利用深度学习的泛化方面和针对谷歌Play store中移动应用推荐的泛化线性模型的特殊性。

推荐系统中的卷积神经网络(Convolutional neural network, CNN)被用来捕获音乐[31]、文本[16,29]和图像[40]的本地化物品特征表示。以前的方法将文本表示为词袋表示,CNN经过学习权重过滤器来识别文本中最突出的短语,从而克服了这一限制。递归神经网络(RNNs)的序列特性为时间感知的[36]和基于会话的推荐系统[12]提供了理想的特性。例如,循环推荐网络[36]利用用户和项目的长期短时间记忆(LSTM)细胞结合稳定因素捕捉时间方面,从而识别电影受欢迎程度的波动。JannachLudewig[14]用基于会话的RNN[12]插入KNN,显示了进一步的性能改进。然而,插值方案是一个固定权重的超参数,缺少非线性相互做用来捕捉更复杂的关系。Wang等人将生成和判别方法统一在生成对抗网络[7]框架下,用于web搜索、项目推荐和问题回答。

注意力机制最近在推荐系统中获得了探索。龚和张[6]CNN的关注频道上进行话题标签推荐,关注最能提供信息(触发)的单词。可是,必须谨慎地设置超参数,以控制触发单词的阈值,使其具备信息性。Huang等人使用端到端记忆网络[30]处理相同的任务,该网络在单词和句子级别上集成了针对用户以前tweet的分层注意机制。Chen等人的[2]将多媒体内容与表示用户偏好的物品级别注意力和用于隔离物品特定视觉特征的组件级别注意力结合起来。相似地,Seo等人的[29]引入了一种局部和全局的注意力机制来对评论文本进行建模。Xiao等人利用注意机制扩展了因子分解机[24],以了解每一对交互的重要性,而不是对它们进行统一处理。现有的基于神经注意力机制的方法大多依赖于附加的内容或上下文信息,而咱们的任务是研究协同过滤据咱们所知,目前尚未研究使用内存网络结构来处理协同过滤设置中的隐式反馈的工做。

相关文章
相关标签/搜索