KGAT Knowledge Graph Attention Network for Recommendation

Wang X., He X., Cao Y., Liu M. and Chua T. KGAT: Knowledge graph attention network for recommendation. KDD, 2019.

知识图谱 for 推荐系统.

符号说明

  • \(\mathcal{G}_1 = \{(u, y_{ui}, i)| u \in \mathcal{U}, i \in \mathcal{I}\}\), \(y_{ui} = 1\) 表示 \(u\) 曾经交互过 \(i\), \(y_{ui} = 0\) 则代表 \(u\) 未曾交互过 \(i\);

  • \(\mathcal{G}_2 = \{(h, r, t)| h, t \in \mathcal{E}, r \in \mathcal{R}\}\), knowledge graph, \(\mathcal{E}\) 表示 knowledge graph 中的 entities, \(\mathcal{R}\) 表示各种关系;

  • \(\mathcal{G} = \{(h, r, t)| h, t \in \mathcal{E}', r \in \mathcal{R}'\}\), collaborative knowledge graph, \(\mathcal{E}' = \mathcal{E} \cup \mathcal{U}\), \(\mathcal{R}' = \mathcal{R} \cup \{\text{Interact}\}\).

KGAT

KGAT 分为两个步骤, 一个是普通的知识图谱的 embedding 建模, 另外一个是协同过滤的任务.

Embedding Layer

  • 对于知识图谱的 embedding 建模, 作者遵循的是 TransR 的方法, 对于关系三元组 \((h, r, t)\), 对应的 embedding 为 \((\mathbf{e}_h, \mathbf{e}_r, \mathbf{e}_t) \in \mathbb{R}^{d \times d}\), TransR 度量三元组的关系

    \[g(h, r, t) = \|\mathbf{W}_r \mathbf{e}_h + \mathbf{e}_r - \mathbf{W}_r \mathbf{e}_t \|_2^2, \]

    这里 \(\mathbf{W}_r \in \mathbb{R}^{k \times d}\) 是将 \(\mathbf{e}_h, \mathbf{e}_r\) 映射到和 \(\mathbf{e}_r\) 一样的隐空间中.

  • 然后通过如下损失进行训练

    \[\mathcal{L}_{\text{KG}} =\sum_{(h, r, t, t') \in \mathcal{T}} -\ln \sigma \bigg( g(h, r, t') - g(h, r, t) \bigg). \]

    其中 \((h, r, t)\) 表示真实存在的三元组, \((h, r, t')\) 则是负样本.

Attentive Embedding Propagation Layers

  • 接下来, KGAT 通过图网络进行信息传播, 对于 entity \(h\), 它和它周围的邻居按照如下方式进行更新:

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

    其中 \(\pi(h, r, t)\) 为 knowledge-aware attention, 按照如下方式计算:

    \[ \pi(h, r, t) = \frac{ \exp( \pi(h, r, t)) }{ \sum_{(h, r', t') \in \mathcal{N}_h} \exp(\pi(h, r', t')) }, \\ \hat{\pi}(h, r, t) = (\mathbf{W}_r \mathbf{e}_t)^T \tanh \big( (\mathbf{W}_r \mathbf{e}_h + \mathbf{e}_r) \big). \]

  • 然后按照如下三种方式之一进行节点更新:

    1. GCN:

      \[ f_{\text{GCN}} = \text{LeakyReLU}\big( \mathbf{W}(\mathbf{e}_h + \mathbf{e}_{\mathcal{N}_h}) \big); \]

    2. GraphSage:

      \[ f_{\text{GraphSage}} = \text{LeakyReLU}\big( \mathbf{W}(\mathbf{e}_h \| \mathbf{e}_{\mathcal{N}_h}) \big); \]

    3. Bi-Interaction:

      \[ f_{\text{Bi-Interaction}} = \text{LeakyReLU}\big( \mathbf{W}_1(\mathbf{e}_h + \mathbf{e}_{\mathcal{N}_h}) \big) + \text{LeakyReLU}\big( \mathbf{W}_1(\mathbf{e}_h \odot \mathbf{e}_{\mathcal{N}_h}) \big). \]

  • 按照类似的方式, 不断迭代更新, 得到多层的节点表示:

    \[ \{ \mathbf{e}_u^{(1)}, \cdots, \mathbf{e}_u^{(L)} \}. \]

  • 最后 user/item 的节点表示为:

    \[\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)}. \]

  • 然后评分预测为:

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

  • 协同过滤的损失为:

    \[ \mathcal{L}_{\text{CF}} = \sum_{(u, i, j) \in \mathcal{O}} -\ln \sigma \big( \hat{y}(u, i) - \hat{y}(u, j) \big). \]

  • 最终的损失为:

    \[ \mathcal{L}_{\text{KGAT}} = \mathcal{L}_{\text{KG}} + \mathcal{L}_{\text{CF}} + \lambda \|\Theta\|_2^2. \]

代码

[official]

posted @ 2024-03-15 20:58  馒头and花卷  阅读(96)  评论(0编辑  收藏  举报