大家好!今天给大家分享一篇论文,题目是《Multi-modal Knowledge Graphs for Recommender Systems》,主要针对多模态知识图谱在推荐系统中的应用进行研究。它号称是第一个把多模态知识图谱引入推荐系统的论文。这篇论文发表在CIKM 2020。(数据库领域著名国际会议 信息检索领域顶会)。
论文翻译参见:论文翻译
首先讲一下背景,
为什么要将多模态的知识图谱引入到推荐系统中?
什么是推荐系统:没有明确需求的用户访问了服务,且服务的物品对用户构成了信息过载,系统通过一定的规则对物品进行过排序,并将排在前面的物品展示给用户,这就是推荐系统。从程序员的角度来说,要关注的是用户user和物品item之间的关系。
现有的推荐系统主要分为两个方法,协同过滤和基于内容的推荐。
基于内容的方法是针对user-item的历史交互信息进行推荐;协同过滤利用user-item群体的行为交互数据进行推荐。
而冷启动和数据稀疏,主要是协同过滤中存在的问题。
冷启动是指新user或新item缺乏交互数据时,无法进行推荐;
数据稀疏是指,如果user和item量非常庞大,即便他们之间有一些交集,得到的矩阵也是非常稀疏的。
可以利用基于内容的方法来解决这两个问题。通过引入外部知识,既可以丰富内容本身,也可以丰富一些行为数据。因此,近几年的研究已经将知识图谱引入了推荐系统。
引入知识图谱可以——
提供高阶的特征。可能两个实体特征的特征相同。
丰富一些隐藏的连接。
增强推荐系统的可解释性。
现有的基于知识图谱的推荐系统仅仅利用了知识图谱的结构化数据,关注于图谱节点和节点关系,忽略了多模态知识图谱信息(图像,文本,视频等)。
那么多模态信息有什么作用呢?例如在电影推荐中,用户通常会观看其海报或者预告片、影评等等,决定是否观看此影片。我们可以根据相似的海报风格,或相关联的影评,来进行推荐。因此,将多模态信息加入知识图谱中,利用知识图谱进行推荐是有必要的。
接下来,作者对多模态知识图谱的方法总结了一下。从多模态信息如何使用的角度,前人的工作分为两类,基于特征的方法和基于实体的方法。
基于特征的方法是把多模态信息当作实体的外部特征。意思就是,将多模态的信息进行bedding,提取特征,直接拼接到原来知识图谱的实体上。这要求每个实体都有多模态信息。然而在真实推荐场景中,某些实体不包含多模式信息,所以本文采用第二种方法,基于实体的方法。
基于实体的方法把多模态的信息作为单独的实体,加入到原来的知识图谱中,这样可以很好地回避上述问题。
这个图是基于实体的多模态知识图谱例子。这是玩具总动员的例子,黑色部分是原来知识图谱的信息,蓝色的部分是新增的多模态信息,作为实体加入到知识图谱中,中间用一个relation进行连接。
为了把多模态知识图谱引入到推荐系统中,作者提出了协同知识图谱。
协同多模态知识图谱是混合用户物品二部图和多模态知识图谱而形成的一个新的异质信息网络。
推荐系统中有一个很重要的结构:user-item交互图。(可以理解为,用户对物品的一个打分矩阵转化而来的),例如,如果用户点击了它,它们之间就有一条边。这样我们就可以得到一个图。Item本身有多模态的知识图谱,这两个图可以通过item把它们连接在一起。这也是多模态知识图谱和推荐系统连接的第一步。图3为协同多模态知识图谱的一个样例,图中使用不同颜色的节点表示不同的实体类型,使用不同的线条表示不同的关系类型。
纵观本文整个任务:输入是一个协同知识图谱,输出是一个预测函数,预测用户点击率,也可以理解为在协同知识图谱里user对item的打分。
那么如何在知识图谱中聚合多模态的信息呢?
作者提出了一个模型,也是本文的核心,称为Multimodal Knowledge Graph Attention Network 多模态知识图谱注意力网络,简称MKGAT。
上图展示了这个模型的整个结构。可见模型图分为左右两部分,两部分分别代表本文提出模型的两个模块:多模态知识图谱嵌入模块和推荐系统模块,而且两个模块共享同一个刚才介绍的协同多模态知识图谱作为输入。
左边是知识图谱embedding部分,主要目的是利用协同知识图谱的下半部分,也就是MKG多模态知识图谱的部分。既利用知识图谱的语义信息,也利用多模态的信息和实体本身的信息,进行信息融合,形成一个embedding。
右边是推荐系统模块。刚才已利用知识图谱里的信息对item进行了特征提取,现在要对user和user-item交互信息进行提取。最后才能进行打分。它对于每一个实体和关系嵌入,使用的是左边这个多模态知识图谱嵌入模块更新过后的嵌入向量。
左右两个模块都有两个重要元素,是多模态知识图谱实体编码器(MKG Entity Encoder)和多模态知识图谱注意力层(MKG Attention Layer),这两个组件是多模态知识图谱嵌入模块和推荐系统模块的基本组成部分。
多模态知识图谱实体编码器根据输入数据类型的不同,使用不同的最新深度学习技术,去编码相应模态的数据,以便于获得各个模态数据的语义信息,供下游多模态知识图谱注意力层使用。
多模态知识图谱实体编码器整体框架如右图所示,可以看出,该组件使用不同的编码器将每种特定的数据类型表示为嵌入向量(Embedding)。
对于一个三元组,常规的实体直接经过一个embedding层,再训练。
其他的利用深度学习中的隐语义向量,例如
图片通过ResNet预训练模型提取特征
文本通过SIF 预训练提取特征
最后通过一个全连接层统一一下他们的维度。
接下来是attention层。想要聚合某个item周围所有实体的多模态信息,一个简单的思路是把周围所有的实体的嵌入向量都拼起来拼到item上,但这样会引入很大的噪声,因为有些信息是不必要的。一个解决的办法是,先学会一个全局的attention矩阵,这样可以让神经网络学会每个节点周围的实体都占多大的比重,以此来缓解噪声。Attention层就是基于上述思想,引入了GATs模型的注意力机制。
Attention层通过递归传播的方式使高阶的邻域信息聚合到目标节点上。右图是一个含有两跳传播的多模态知识图谱attention层,它通过递归的思想,例如要获得中心节点的聚合信息,先找到最外层,然后逐步向内聚合节点的信息。
每单个Attention层又包含一个传播层和一个聚合层,下面通过公式来看一下它的具体实现过程。首先,本文使用TransE模型去学习实体的结构化表示。这个Eagg代表汇总所有邻域实体和关系信息的嵌入向量,它是目标实体的所有邻居实体的三元组线性组合。
e是每一个三元组 (h, r, t) 的嵌入表示,π是每一个三元组的注意力分数。从注意力机制的角度分析,π控制了从邻域三元组集合 e中有多少信息可以被传播到目标实体。
先通过执行头实体,关系实体,尾实体的三个嵌入向量的拼接,然后再将拼接过后的向量输入到全连接层来得到最后的三元组 e(h, r, t) 的嵌入向量。
Pai通过注意力机制实现,用一个全局矩阵乘上三元组实体,再经过一个激活函数。最后用softmax进行归一化。
在聚合层中,目标实体的邻接实体的信息通过信息传播层将邻接实体信息传播到目标实体上,为了防止邻接实体的信息在传播过程中覆盖了目标实体的信息,需要加入聚合层来对邻接实体的信息和目标实体的信息进行一次聚合。本文提出两种方式,简单来说就是加到一起或者拼到一起。
最后就是一个知识图谱嵌入,就是图中最上面的部分,尽可能让头实体+关系实体等于尾实体,然后是一个loss函数,让正样本的分数尽可能高,负样本的分数尽可能低。
接下来是总图右侧的推荐模块。推荐模块其实和刚才讲的模块类似,只不过刚才得到的是item的嵌入向量,推荐模块需要利用user和item的交互信息,继续将刚才得到的item信息和初始化但未训练的user的embedding信息输入到MKG实体编码层,再进入attention层,User向量和item向量生成一个表示,最后进行打分。
刚才说的attention层是以递归的形式计算的,推荐系统模块有一点不同,它会保存每一跳的计算信息,并且拼接到一起。这样做既实现了通过邻域传播来增强目标实体的嵌入信息,又可以通过改变图神经网络的层数来控制传播的跳数,即控制聚合强度。
然后,本文把向量做内积作为打分。
最后是一个损失函数,λ 是推荐系统模块损失函数的 L2 正则化参数,目的是为了防止模型过拟合。
第一个数据集MovieLens是推荐系统中较为常见的典型数据集,但这个数据集中没有多模态信息和知识图谱,因此作者使用微软的Satori来构建该数据集item的知识图谱;由于电影的海报、影评等信息也比较好找,因此多模态的图片信息作者从Youtube上爬下来,文本信息从点评网站上爬下来。
第二个数据集是美团点评中餐厅点评的数据集。这篇文章是和美团点评合作的,因此他们就直接用美团的数据集,知识图谱是从美团大脑而来,图像实体是对应餐厅的菜,文本实体是对应的评价。
下面的表就是数据集的数据量的展示。
本文采用了两个评价指标,第一个是召回率。
第二个指标是NDCG,这个指标考虑了推荐次序的问题,也就是说用户最喜欢的东西系统应该给出最高打分,也就是说考虑了推荐的精准度的问题。
这里列出了对比模型。
NFM:是一个经典的深度学习模型。
CKE:这个模型考虑到了知识图谱和多模态信息,但是没有将多模态信息引入知识图谱中。它还是孤立的去看待这些多模态信息,最后是依靠协同过滤的方法来进行推荐。
KGAT:和本文的模型比较类似。使用协同知识图谱来进行编码,同时引入attention机制。以此来丰富user和item的交互信息,但是没有考虑将多模态信息引入知识图谱。
MMGCN:是最新的基于多模态的推荐系统模型。使用GCN图卷积进行embedding。它为每一个模态都建立了交互图。
首先是在两个数据集上列出两种评价指标的结果,可以看到这两种指标都有提升,提升的百分比也比较多。
那么怎么说明这个提升是因为引入了多模态信息导致的呢?
下面这个实验可以证明这一点。用KGAT模型做对照,他是一个原本没有多模态知识图谱的模型。在无多模态信息的情况下,这两个模型的性能差别不大;如果加入了多模态信息,两个模型的性能都会提高,但本文模型提高更大。也就是说,相比于其他基于知识图谱的方法,本文的方法在引入多模态信息后会有更大的改善。其背后的原因是,当我们训练知识图谱嵌入时,本文的模型可以更好地将图像等模态实体的信息聚合到item实体中。
这两个消融实验,一个是论证了模型层数与推荐效果的关系,可以看到模型不是越深越好的,有可能是层数越多噪声越多或者存在过拟合的问题;第二个是论证刚才讲到的那个聚合层是采用拼接的方式比较好还是加和的方式比较好。
最后一个实验是找了一个案例。这些圆圈代表不同的实体,中间的数字是代表id,边是代表一个实体对另一个实体的重要性,可以看到这个紫色的多模态信息的0.002比绿色的传统信息多了十倍左右,说明多模态信息在推荐系统确实起到了较大的作用。
本文提出了一种基于知识图谱的推荐模型,叫做多模态知识图谱注意网络MKGAT,它创新性地将多模态知识图谱引入到推荐系统中。MKGAT模型通过学习实体之间的推理关系,并将每个实体的相邻实体信息聚合到自身,可以更好地利用多模态实体信息。在两个真实数据集上的大量实验证明了本文提出的MKGAT模型的合理性和有效性。