简介
想象一下,你试着教计算机认识这个世界。你可能会告诉它“史蒂夫·乔布斯创立了苹果公司”。在数据库中,这被存储为一个三元组: (Steve Jobs, founded, Apple Inc.)。这种结构化的数据网络就是我们所说的知识图谱 (Knowledge Graph, KG) 。 然而,这些图谱很少是完美的。它们经常缺少连接。例如,图谱可能知道史蒂夫·乔布斯创立了苹果公司,但可能缺少 (Apple Inc., headquarters location, Cupertino) (苹果公司,总部地点,库比蒂诺) 这样的链接。
寻找这些缺失链接的任务被称为知识图谱补全 (Knowledge Graph Completion, KGC) 。
从历史上看,研究人员将此视为一个几何问题,试图将实体映射到空间中的点。最近,BERT 等预训练语言模型 (PLM) 的兴起将重点转移到了理解这些实体的文本描述上。如果模型读到“Apple is a technology company based in California” (苹果是一家位于加利福尼亚的科技公司) ,它可以推断出很多信息。
但这里有个问题。PLM 擅长处理文本,但它们往往忽略了图的结构——即节点之间的实际连接。相反,旧的基于图的方法喜欢结构,但忽略了丰富的文本信息。
我们要如何两全其美呢?
在这篇文章中,我们将深入探讨 MoCoKGC , 这是由桂林电子科技大学的研究人员提出的一个新颖框架。MoCoKGC 利用一种称为动量对比学习 (Momentum Contrastive Learning) 的技术,优雅地将文本语义与图结构融合在一起。读完本文,你将了解该模型如何利用“邻域提示 (Neighborhood Prompts) ”和动态“实体队列 (Entity Queue) ”在海量数据集上取得最先进的结果。
背景: 问题背景
要欣赏 MoCoKGC,我们需要了解它所处的环境。
两大流派
- 基于结构的方法 (嵌入) : 像 TransE or RotatE 这样的经典方法将实体视为向量。它们根据几何距离计算分数。它们速度快且擅长捕捉图的拓扑结构,但当图很稀疏或实体具有丰富的文本描述 (这些描述未反映在链接中) 时,这些方法就会失效。
- 基于 PLM 的方法: 像 KG-BERT 或 SimKGC 这样的模型将实体的文本描述输入到 Transformer 中。它们在语义理解方面非常出色。然而,它们的计算成本通常很高,而且关键在于,它们往往忽略了实体的邻域。它们将“Apple”仅仅视为一个文本字符串,而忽略了“Apple”在图中与“iPhone”和“MacBook”相连的事实。
对比学习的瓶颈
最近的顶尖模型都使用了对比学习 。 这个想法很简单: 对于给定的查询 (Steve Jobs, founded, ?),模型应该拉近正确答案 (Apple) ,并推开错误答案 (Microsoft、Banana、Car) 。
对比学习的有效性很大程度上取决于模型看到的“负样本” (错误答案) 的数量。可以比较的负样本越多,模型的区分能力就越强。然而,标准方法受到 GPU 显存 (Batch Size/批次大小) 的限制。在一个训练步骤中,你能放入的样本是有限的。
MoCoKGC 通过引入“记忆队列”和“动量编码器”解决了这个问题,使其能够在不撑爆 GPU 显存的情况下与成千上万个负样本进行比较。
MoCoKGC 方法论
MoCoKGC 的核心创新在于其架构,它将图结构集成到文本编码器中,并将负样本的生成与批次大小解耦。
让我们来看看整体架构:

如上图 1 所示,该模型由三个主要编码器组成:
- 实体-关系编码器 (左) : 对头实体和关系进行编码。
- 实体编码器 (右,上) : 对尾实体 (候选答案) 进行编码。
- 动量实体编码器 (右,下) : 一个更新缓慢的实体编码器版本,用于维护表示队列。
让我们一步步来拆解。
1. 注入结构: 邻域提示
在将文本传入 BERT 之前,MoCoKGC 使用邻域提示 (Neighborhood Prompts) 丰富了输入。其直觉是,一个实体的定义不仅取决于它的描述,还取决于它的朋友 (邻居) 。
实体 \(e\) 的邻域是与之直接相连的所有实体和关系的集合:

由于实体的邻居数量不同 (有些很热门,有些很孤立) ,模型会采样固定数量的邻居,记为 \(\sigma\)。如果一个实体的邻居太多,它会随机选取 \(\sigma\) 个。如果太少,它会使用填充标记 (padding tokens) 。
然后,这些邻居通过多层感知机 (MLP) 进行处理,以创建一个“邻域提示”向量:

这个向量 \(p_{N(e)}\) 充当了实体在图中位置的摘要。它被添加到文本输入的前面,有效地告诉语言模型: “这是实体的文本描述,这是它在图中连接关系的摘要。”
2. 实体-关系编码器 (查询)
KGC 的目标是在给定头实体 \(h\) 和关系 \(r\) 的情况下预测尾实体 \(t\)。 实体-关系编码器创建查询 \((h, r)\) 的向量表示。
它接受四个输入:
- \(\boldsymbol{d}(h)\): 头实体的文本描述。
- \(\boldsymbol{d}(r)\): 关系的文本描述。
- \(\boldsymbol{p}_{N(h)}\): 头实体的邻域提示 (结构信息) 。
- \(\boldsymbol{p}_{r}\): 关系的“深度提示” (注入到 Transformer 层中的学习参数) 。

这产生了一个代表“问题”的向量 \(\boldsymbol{h}_r\)。
3. 实体编码器 (候选)
在另一端,我们需要对候选答案 (尾实体) 进行编码。 实体编码器使用尾实体的文本描述及其邻域提示来完成此操作。重要的是,它看不到关系。它需要创建候选实体的通用表示。

这产生了 \(\bar{\boldsymbol{t}}\),即当前批次中尾实体的编码。
4. 动量实体编码器 (记忆库)
这是这篇论文的“核心秘诀”。
在标准训练中,你只能将正确答案与同一批次中的其他答案进行比较。如果你的批次大小是 64,你就只有 1 个正样本和 63 个负样本。这不足以学习到稳健的区分能力。
MoCoKGC 维护着一个巨大的实体队列 (Entity Queue) (例如,16,000+ 个实体) 。此队列存储预先计算好的实体编码,作为负样本。
但是,如果我们每一步都通过反向传播更新编码器,队列中的编码相较于当前模型参数会很快变得“陈旧” (过时) 。
为了解决这个问题,作者使用了动量实体编码器 。 这个编码器不通过反向传播进行更新。相反,它的参数 \(\theta_{ME}\) 使用主实体编码器参数 \(\theta_{E}\) 的指数移动平均 (EMA) 进行更新。

这里,\(m\) 是动量系数 (例如 0.999) 。这意味着动量编码器的变化非常缓慢和平滑。这种稳定性允许模型使用存储在队列中的编码 (由这个缓慢移动的编码器生成) 作为有效的负样本,即使它们是几步之前生成的。
动量编码器生成向量 \(\boldsymbol{t}\):

5. 训练目标
该模型使用对比学习 (具体为 InfoNCE 损失) 进行训练。目标是最大化查询 \(\boldsymbol{h}_r\) 与正确尾实体 \(\boldsymbol{t}\) 之间的相似度,同时最小化与队列中所有负样本的相似度。

在这个公式中:
- \(\tau\) 是温度 (控制分布的锐度) 。
- \(\gamma\) 是边界 (确保正样本得分高出一定数量) 。
- 分母中的求和涵盖了队列中的所有负样本 \(|\mathcal{N}|\)。
最终损失结合了来自当前批次的损失 (使用标准实体编码器) 和来自队列的损失 (使用动量编码器) :

实验与结果
这个复杂的架构真的有效吗?研究人员在三个标准基准数据集上测试了 MoCoKGC: WN18RR、FB15k-237 和海量的 Wikidata5M 。

如表 1 所示,Wikidata5M 尤其具有挑战性,因为它包含超过 400 万个实体。处理这种规模需要高效的负采样,这正是 MoCoKGC 所提供的。
与最先进技术的比较
下表 2 展示的结果表明,MoCoKGC 在各项指标上均优于现有方法。

结果的关键要点:
- WN18RR: MoCoKGC 实现了 0.742 的 MRR (平均倒数排名) ,比之前的最佳模型 SimKGC 提高了 7.1%。
- Wikidata5M: 相比之前的模型有着巨大的 11% 的提升 。 这凸显了在处理数百万个实体时队列机制的强大威力。
- FB15k-237: 这个数据集要稠密得多 (每个实体的连接更多) 。以前基于 PLM 的方法 (如 SimKGC) 在这里表现挣扎,因为它们忽略了结构。MoCoKGC 凭借其邻域提示,在这里也取得了最先进的结果,击败了基于图和基于文本的竞争对手。
分析性能的一致性
论文中一个引人入胜的见解是 MoCoKGC 如何弥合不同类型数据集之间的差距。

在图 2 中,请看蓝色圆圈 (基于 PLM 的方法) 。像 SimKGC 这样的模型在 Y 轴 (WN18RR) 上表现出色,但在 X 轴 (FB15k-237) 上表现不佳。这就是“不一致性”问题。
现在看看蓝星 (MoCoKGC) 。 它位于右上角。这证明通过 (利用提示) 将结构信息注入基于文本的模型,你可以在稀疏图 (WN18RR) 和稠密图 (FB15k-237) 上都获得高性能。
队列大小的影响
MoCoKGC 的核心假设是“负样本越多 = 学习效果越好”。作者通过改变实体队列的大小验证了这一点。


图 3 和图 4 讲述了一个清晰的故事: 大小很关键。 随着队列大小的增加 (在 X 轴上向右移动) ,模型的准确性 (MRR) 持续攀升。这证实了动量编码器维护大量负样本历史记录的能力是模型成功的关键驱动力。
数据效率
最后,MoCoKGC 需要多少数据?

图 5 展示了一些非凡的结果。即使仅使用 20% 的训练数据 (第一组柱状图) ,MoCoKGC 的 MRR也能达到大约 0.460。这个分数已经高于 SimKGC 等竞争对手在 100% 数据上训练的最终性能 (由虚线橙色线表示) 。
这表明 MoCoKGC 学习到了极其高效的表征,只需更少的数据即可达到高性能。
消融实验: 到底什么在起作用?
为了确保这些改进不仅仅是运气,作者进行了消融实验,移除了特定组件以观察其影响。

查看表 3 (WN18RR 结果) ,我们可以看到:
- w/o (不含) 动量实体编码器: 性能从 0.742 降至 0.727。平滑更新至关重要。
- w/o (不含) 邻域提示: 性能显着下降至 0.696。这证明了解邻居对于稀疏图至关重要。
- w/o (不含) 关系提示: 大幅下降至 0.597。关系的深度提示对于模型理解实体如何连接必不可少。
结论与启示
MoCoKGC 代表了知识图谱补全领域向前迈出的重要一步。它通过以下方式成功解决了先前方法的局限性:
- 统一文本与结构: 使用邻域提示将图的拓扑结构馈送给语言模型。
- 扩展负采样: 使用动量对比 (MoCo) 将负样本数量与 GPU 批次大小限制解耦。
- 平滑更新: 使用 EMA 创建稳定、鲁棒的目标表征。
其结果是一个不仅更准确,而且在不同类型的知识图谱上数据效率更高、一致性更好的模型。对于 AI 领域的学生和研究人员来说,MoCoKGC 提供了一个完美的范例,展示了如何结合计算机视觉 (动量对比) 、自然语言处理 (Transformer) 和图论 (邻域) 的架构模式,从而在复杂的推理任务中取得突破。
随着知识图谱继续支撑搜索引擎、推荐系统和问答机器人,像 MoCoKGC 这样的技术对于使这些系统更智能、更完善将变得至关重要。
](https://deep-paper.org/en/paper/file-3391/images/cover.png)