【论文精读】Multi-modal Knowledge Graphs for Recommender Systems

【论文精读】Multi-modal Knowledge Graphs for Recommender Systems

论文链接:Multi-modal knowledge graphs for recommender systems

年份:2020

引用数:270+

影响:首次将知识图谱用于多模态推荐

1. 什么是知识图谱

  • 知识图谱(Knowledge Graph,KG)

    一个知识图谱, \(G=(V, E)\) ,是一个有向图,其中 \(V\) 表示节点集, E 表示边集。每条边以(头节点,关系,尾节点)的形式表示(记为 \((h, r, t)\) ,其中 \(h, t \in V, r \in R\)\(R\)是所有关系的集合) ,表明从头节点 \(h\) 到尾节点\(t\) 的关系 \(r\)

    例如,电影Toy Story(玩具总动员)的导演,演员,制片人分别是John Lasseter,Tom Hanks,Walt Disney。如果把Toy Story,John Lasseter,Tom Hanks,Walt Disney看作四个节点,那么这四个节点就可以构成一个知识图谱,如下图。

    其中,连接Toy Story和John Lasseter的边可以记作\(\text { (Toy Story, DirectorOf, John Lasseter) }\),表示这条边的头节点是Toy Story,尾节点是John Lasseter,头节点和尾节点之间的关系是DirectorOf,即:Toy Story的导演是John Lasseter。其他边的表示也是同理。

image-20241208110603312

  • 多模态知识图谱(Multi-modal Knowledge Graph,MKG)

    多模态知识图谱 也是一种知识图谱。和普通的知识图谱不同,MKG额外引入了多模态信息(文字描述,图像等)。

    以图 1 为例,我们可以用\(\text { (Toy Story, hasImage, a picture of film promotion) }\)来表示Toy Story有一张图像,用\(\text { (Toy Story, hasDescription, description) }\)来表示Toy Story有相应的文字描述。

    image-20241208111841397

  • 协同知识图谱(Collabarative Knowledge Graph,CKG)

    CKG 首先定义一个用户 - 物品二部图,其形式为 \(\left.\left(e_u, y_{u i}, e_i\right) \mid e_u \in U, e_i \in I\right)\) ,其中 \(e_u\)是用户实体, \(y_{u i}\) 表示用户 \(u\) 和物品 \(i\) 之间的交互, \(e_i\) 表示物品实体, u 和 I 分别表示用户集和物品集。当 \(e_u\)\(e_i\) 之间存在交互时, \(y_{u i}=1\) ;否则, \(y_{u i}=0\)

    然后,CKG 将用户 - 物品二部图融入知识图谱,其中每个用户的行为表示为一个三元组\(\left(e_u\right.\), Interact,\(\left.e_i\right)\)。 Interact \(=1\) 表示 \(e_u\)\(e_i\) 之间存在交互关系。将用户-物品二部图与多模态知识图谱结合,可以形成一个新的知识图谱,如下图所示。其中黄色圆点表示用户,蓝色圆点表示物品,绿色圆点表示物品的各种多模态信息,紫色圆点表示物品的其他信息(例如,John Lasseter(Toy Story的导演)对应的节点就是紫色的)。

    image-20241208112705903

2. Method

本文提出了一种名为Multi-modal Knowledge Graph Attention Network (MKGAT)的模型。

模型的输入输出分别是:

  • 输入:数据集的协同知识图谱。
  • 输出:用户向量\(\mathbf{e}_u^*\)和物品向量\(\mathbf{e}_i^*\)。最终,模型预测的用户\(u\)对物品\(i\)的感兴趣程度\(\hat{y}(u, i)\)由公式\(\hat{y}(u, i)=\mathbf{e}_u^{* \mathrm{~T}} \mathbf{e}_i^*\)算出。

模型的大概结构如下图,

image-20241208112354171

可以看出,主要包含两个子模块:

  • knowledge graph embedding:主要是利用协同知识图谱的下半部分,也就是多模态知识图谱(MKG)来更新物品向量。
  • recommendation:主要利用用户和物品的交互信息,来更新用户向量和物品向量,最后进行打分。

在讨论这些子模块之前,我们首先介绍两个关键组件:MKG Entity Encoder与MKG Attention Layer,这两个组件在两个子模块中都有用到。

2.1 MKG Entity Encoder组件

  • ID信息:使用Embedding Layer进行编码。
  • 图像:使用ResNet进行编码。
  • 文本:使用SIF Embedding进行编码。

整体过程如下图所示,对头节点,关系,和尾节点分别使用相应的技术进行编码,最后通过全连接层,形成三个维度相同的向量,分别表示头节点,关系,以及尾节点。

image-20241208124657906

2.2 MKG Attention Layer组件

\[\mathbf{e}_{a g g}=\sum_{(h, r, t) \in \mathcal{N}_h} \pi(h, r, t) \mathbf{e}(h, r, t), \]

$ \mathbf{e}(h, r, t)$可通过如下公式得到, \(e_h\)\(e_t\) 是实体嵌入, \(e_r\) 是关系嵌入。

\[\mathbf{e}(h, r, t)=\mathbf{W}_1\left(\mathbf{e}_h\left\|\mathbf{e}_r\right\| \mathbf{e}_t\right) . \]

注意力系数$\pi(h, r, t) $可通过下面的公式得到:首先经过线性变化与LeakyReLU激活函数,然后经过softmax进行归一化。

\[\pi(h, r, t)=\operatorname{LeakyReLU}\left(\mathbf{W}_2 \mathbf{e}(h, r, t)\right)\\ \pi(h, r, t)=\frac{\exp (\pi(h, r, t))}{\sum_{\left(h, r^{\prime}, t^{\prime}\right) \in \mathcal{N}_h} \exp \left(\pi\left(h, r^{\prime}, t^{\prime}\right)\right)} . \]

得到表示邻居的向量\(\mathbf{e}_{a g g}\)后,可以通过加法聚合或者拼接聚合将\(e_h\)\(e_{a g g}\)拼接起来

\[\text{加法聚合方法:}f_{\text {add }}=\mathbf{W}_3 \mathbf{e}_h+\mathbf{e}_{a g g}, \]

\[\text{拼接聚合方法:}f_{\text {concat }}=\mathbf{W}_4\left(\mathbf{e}_h \| \mathbf{e}_{\text {agg }}\right), \]

当然,通过堆叠多个attention层,可以聚合到高阶邻居的特征。

2.3 knowledge graph embedding模块

  • 流程:

    首先是总图左侧的知识图谱嵌入模块,在这个模块中,先不管用户和物品的交互信息,仅仅利用物品的多模态知识图谱,来更新物品表示。

    将多模态知识图谱作为输入,经过MKG Entity Encoder和\(L\)个MKG Attention Layer后,对于多模态知识图谱中的每个节点,会得到: \(e_h\)\(e_t\)\(e_r\) ,其中 \(e_h\)\(e_t\) 表示头节点和尾节点经过Encoder层和Attention层后的输出,\(e_r\) 是关系向量经过Encoder层后的输出。

  • 损失函数:

    使用知识图谱中常用的translational scoring function作为损失函数。 尽可能让 \(e_h+e_r\)\(e_t\)更接近,使用MSE来评估\(e_t\)\(e_h+e_r\)的距离。

    \[\operatorname{score}(h, r, t)=\left\|e_h+e_r-e_t\right\|_2^2 \]

    让正样本的距离尽可能小,负样本的距离尽可能大:

    \[\mathcal{L}_{K G}=\sum_{\left(h, r, t, t^{\prime}\right) \in \mathcal{T}}-\ln \sigma\left(\operatorname{score}\left(h, r, t^{\prime}\right)-\operatorname{score}(h, r, t)\right) \]

    其中\(\mathcal{T}=\left\{\left(h, r, t, t^{\prime}\right) \mid(h, r, t) \in G,\left(h, r, t^{\prime}\right) \notin G\right\}\) ,并且 \(\left(h, r, t^{\prime}\right)\) 是通过随机替换有效三元组中的一个实体而构建的无效三元组。 \(\sigma(\cdot)\) 是 sigmoid 函数。

2.4 Recommendation模块

  • 流程:

接下来是总图右侧的推荐模块。推荐模块其实和刚才讲的模块类似,只不过刚才得到的是物品的嵌入向量,推荐模块需要利用用户和物品的交互信息,将刚才得到的物品向量和初始化但未训练的用户向量信息输入到MKG Entity Encoder,再进入MKG Attention层,用户向量和物品向量生成一个表示,最后进行打分。

刚才说的Attention层是以递归的形式计算的,推荐系统模块有一点不同,它会保存每一跳的计算信息,并且拼接到一起,即

\[\mathbf{e}_u^*=\mathbf{e}_u^{(0)}\|\cdots\| \mathbf{e}_u^{(L)}, \quad \mathbf{e}_i^*=\mathbf{e}_i^{(0)}\|\cdots\| \mathbf{e}_i^{(L)} \]

其中\(\|\) 表示拼接,\(L\)表示Attention层的个数。

然后,把向量做内积作为模型的预测分数。

\[\hat{y}(u, i)=\mathbf{e}_u^{* \top} \mathbf{e}_i^* \]

  • 损失函数:

    使用推荐系统常用的BPR损失。

    \[\mathcal{L}_{\text {recsys }}=\sum_{(u, i, j) \in O}-\ln \sigma(\hat{y}(u, i)-\hat{y}(u, j))+\lambda\|\Theta\|_2^2 \]

    其中\(O=\left\{(u, i, j) \mid(u, i) \in R^{+},(u, j) \in R^{-}\right\}\)表示训练集, \(R^{+}\)表示用户 u 和项目 i 之间的观察到的交互, \(R^{-}\)是采样的未观察到的交互集, \(\sigma(\cdot)\) 是 sigmoid 函数, \(\Theta\) 是参数集, \(\lambda\) 是 L2 正则化的参数。

两个模块交替优化:先使用translational scoring function优化knowledge graph embedding模块,再使用BPR损失优化Recommendation模块,而后再优化knowledge graph embedding模块...如此交替,直到训练结束。

3. Experiments

  • 和其他baseline相比,达到了sota。

  • 使用多模态信息时,模型表现要比不使用多模态信息时好。(如果单模态的效果比多模态好,那么就会按单模态推荐投论文了)

  • 这两个消融实验,一个是论证了Attention的层数取多少好,结论是:层数取2或者3时,会取得较好的效果。第二个是论证在Attention层中,加法聚合方式和拼接聚合哪个更好,作者做了实验发现,拼接聚合的效果更好。

  • 最后一个实验是找了一个案例。这些圆圈代表不同的实体,中间的数字是代表id,边是代表一个实体对另一个实体的重要性,可以看到这个紫色的多模态信息的0.002比绿色的传统信息多了十倍左右,说明多模态信息在推荐系统确实起到了较大的作用。(结论存疑,因为对于530号物品来说,多模态信息的权重并不大)。

    image-20241208163626266

4. 个人总结

总的来说,MKGAT的架构分为两个部分:第一个部分以知识图谱的形式提取物品的多模态信息,第二个部分关注于用户-物品二部图,用以更新用户和物品向量。

实际上,这和使用LightGCN来提取信息的模型没有本质上的区别,只不过一个是图,一个是知识图谱罢了。

但不管怎么说,本文首次把知识图谱用在了多模态推荐中,并且取得了不错的效果,算是开辟了多模态推荐中的一个新方向。

posted @ 2024-12-08 16:59  Brain404  阅读(700)  评论(0)    收藏  举报