第33回 图上的推理——知识图谱嵌入
路标不只写在纸,还可刻进几何中。
点与边若能成坐标,走到哪都算得通。
第32回我们在图上走路:k-hop、路径、子图。
可图一大,光靠走路会遇到两类难题:
- 图太大:走路要扩得很远才碰到答案
- 图太稀:你要找的边根本没写出来,但“按常识”它应该存在
于是江湖里出现一门武功:把图压进向量空间。
这就是知识图谱嵌入(Knowledge Graph Embedding, KGE)。
一句话说透:
让实体与关系都变成向量(或复数/旋转),用“几何打分”判断三元组像不像真的。
KGE 的系统性综述从“表示空间”角度总结了各种套路:空间选得不同,能表达的关系结构也不同。1
一、为什么要嵌入:为了“泛化”与“可计算”
图谱是离散的:有边就有,没有就没有。
可现实知识永远不完备。
嵌入的目标有两条:
- 链接预测(补边):猜测(h, r, t)是否可能成立
- 相似度与聚类:找相近实体、相近关系
你可以把它理解为“从死记硬背”走向“举一反三”。
二、TransE:最朴素的几何直觉——关系像“平移”
TransE 的想法像初中几何:
- 实体是点:向量 h、t
- 关系是箭头:向量 r
- 如果(h, r, t)是真的,就希望:h + r ≈ t
所以它用一个距离来打分:
- 距离越小,越像真三元组
- 距离越大,越像假三元组
这门功夫简单、直觉强,但也有短板:
它对“一对多、多对一、复杂对称/反对称关系”不够灵活。
三、RotatE / ComplEx:关系不只会平移,还会“旋转”
为了解决复杂关系结构,后来的方法把表示空间升级:
- ComplEx:把实体与关系放在复数空间,用复数乘法表达更丰富的匹配模式
- RotatE:把关系理解为“在复数平面上旋转”,对对称、反对称、组合关系更自然
你不需要现在就会复数乘法推导,
只要抓住直觉:
换一种空间,就换一套几何规则;规则更丰富,能表达的关系也更丰富。
四、极简可跑代码:用 TransE 打分“像不像真”
下面代码是一个最小的 TransE 演示:
- 每个实体、关系都是一个小向量
- 对一个三元组算 score(距离)
- score 小表示更可信
import random
import math
def l2(a, b):
return math.sqrt(sum((x - y) ** 2 for x, y in zip(a, b)))
def add(a, b):
return [x + y for x, y in zip(a, b)]
def rand_vec(d, seed):
rnd = random.Random(seed)
return [rnd.uniform(-1.0, 1.0) for _ in range(d)]
def transe_score(h, r, t):
return l2(add(h, r), t)
if __name__ == "__main__":
d = 4
ent = {
"张三": rand_vec(d, 1),
"清华": rand_vec(d, 2),
"北京": rand_vec(d, 3),
}
rel = {
"就读于": rand_vec(d, 10),
"位于": rand_vec(d, 11),
}
triples = [
("张三", "就读于", "清华"),
("清华", "位于", "北京"),
]
for h, r, t in triples:
s = transe_score(ent[h], rel[r], ent[t])
print((h, r, t), "score=", round(s, 4))
这段代码没有训练,只是示意“打分函数”长什么样。
真训练时要做的事是:
- 让真三元组 score 变小
- 让假三元组 score 变大
你会发现它与第二篇强化学习的味道很像:
都是在用一个目标,把系统推向“更像真的”那一边。
五、嵌入与 GraphRAG 的关系:一手走路,一手算相似
GraphRAG 有两种检索味道:
- 走路:BFS、路径、社区发现
- 算相似:在嵌入空间找近邻、做重排、做补边
当图很大、关系很稀时,嵌入能帮你:
- 先用嵌入找一小片“可能相关的子图”
- 再在子图上做走路与证据链构造
这就是“几何与结构”的双刀合璧。
六、小结:把图压进空间,是为了让推理会“泛化”
你现在有两套推理工具:
- 离散推理:沿边走路,路径可解释(第30、32回)
- 连续推理:在空间里算相似,能补边泛化(第33回)
下一回(第34回)我们更进一步:
不只给每个点一个向量,还让点之间“传话”,一层层聚合邻居信息——
图神经网络登场。
欲知后事如何,且听下回分解。
幻觉核查
- KGE 的“表示空间视角”分类:可核对综述对不同空间与模型家族的总结。1
- 本回对 TransE/ComplEx/RotatE 的直觉描述为教学化抽象,细节以原论文与综述为准。
- 本回代码仅示意 TransE 的打分函数形态,不包含训练与负采样等关键工程细节。
逻辑审计
- 与第32回衔接:第32回强调“沿图取证”,第33回强调“在空间里找可能的边与邻居”,两者互补。
- 与导读一致:导读主线是“慢思考=搜索”,嵌入提供的是“搜索的启发式”(先猜哪里更像)。
- 为第34回铺路:KGE 给每个点一个静态向量,GNN 则让向量随邻居信息更新,适合更复杂的图任务。
引用与溯源
Footnotes
-
Cao, J., et al. Knowledge Graph Embedding: A Survey from the Perspective of Representation Spaces arXiv:2211.03536 (v2: 2023-10-15; published as ACM Computing Surveys 2024) https://arxiv.org/abs/2211.03536 ↩ ↩2