2、TransE模型基本思想与数学原理
聊到知识图谱嵌入,TransE 绝对是个绕不开的模型。它简单、高效,很多后来的模型都是在它的基础上缝缝补补。
说白了,TransE 的核心思想特别直观:把知识图谱里的实体和关系,都映射到一个低维的向量空间里。然后,用向量之间的平移操作,来捕捉它们之间的语义联系。
你想想看,这就像玩坐标系里的点。每个实体是一个点,每个关系是一次移动。一个三元组 (头实体, 关系, 尾实体) 变成了:
头实体向量 + 关系向量 ≈ 尾实体向量
这公式干净利落。我第一次看到它时,心里就一个感觉:简单到极致,但力量惊人。
2.1 核心假设:头加关系约等于尾
TransE 最核心的假设就是 h + r ≈ t。我个人习惯把这个式子当作模型的“灵魂公式”。
用一个具体例子讲清楚:
- 三元组:(阿司匹林, 治疗, 头痛)
- 向量操作:阿司匹林 + 治疗 ≈ 头痛
如果在向量空间里,阿司匹林 这个点的位置,沿着 治疗 这个方向平移一段距离后,恰好落在 头痛 这个点的附近。
这就说明模型学对了。反之,如果是 阿司匹林 + 治疗 ≈ 发烧,那这个三元组就“有问题”,模型会给它一个很低的分数。
嗯,这里要注意,模型根本不理解“阿司匹林”是什么药。它只是在向量空间里,通过这种平移关系,学到了实体和关系的数值表示。
核心解读:这其实是在用几何的「平移」去模拟语义的「关联」。关系向量 r 充当了从 h 到 t 的翻译器。
2.2 得分函数:三元组对不对?算一个分数
怎么判断一个三元组是真是假?TransE 用一个 得分函数 (Score Function) 来衡量。
公式长这样:
f(h, r, t) = || h + r - t ||
看到这个竖线符号了吗?这是 L1 或 L2 范数。说白了,就是计算向量 h + r 和向量 t 之间的“距离”。
距离越小,说明这个三元组越“合理”。
距离越大,说明这个三元组越“荒谬”。
举个例子:
假设真实三元组 (阿司匹林, 治疗, 头痛) 的得分是 0.3。那么一个随机拼凑的三元组 (阿司匹林, 治疗, 咳嗽) 的得分可能是 3.5。
模型的目标就是:让正确三元组的得分尽可能低,让错误三元组的得分尽可能高。
避坑指南:选择L1还是L2范数?我曾经在某个数据量不大的项目里试过L2,结果模型训练特别慢。后来换回L1,收敛快多了。建议默认先试L1,计算简单,效果也不差。
2.3 损失函数:模型如何优化
光有得分函数还不够,模型还得知道怎么“学习”。这就要靠 损失函数 (Loss Function) 了。
TransE 最常用的损失函数是 基于最大间隔的排序损失 (Margin-based Ranking Loss)。
它的逻辑是:
- 取出一个正确的三元组 (正样本)。
- 构造一个错误的三元组 (负样本),比如把实体或关系随机替换掉。
- 正样本的得分要远低于负样本的得分。
损失函数公式如下:
L = Σ max(0, γ + f(h, r, t) - f(h', r, t'))
这里面有几个关键参数:
| 参数 | 含义 | 项目经验 |
|---|---|---|
| γ (gamma) | 间隔超参数 | 我项目里多用 1.0 或 2.0,太小会导致错误三元组被误判。 |
| f(h,r,t) | 正三元组得分 | 当然越低越好。 |
| f(h',r,t') | 负三元组得分 | 希望能比正样本高出一截。 |
为什么会这样?
通俗解释:正样本得分是 0.5,负样本得分是 1.2,γ 设为 1.0。
代入公式算一下:
损失 = max(0, 1.0 + 0.5 - 1.2) = max(0, 0.3) = 0.3
模型还在“不满意”,因为差距不够大。它会继续调整向量,直到正负样本分数拉开。
注意:γ 值设置不当会严重影响训练质量。我踩过一个坑:把 γ 设成 10,结果模型训了三天,损失死活降不下去。后来发现间隔太大,模型根本达不到。
2.4 模型框架图
下面这张图,把 TransE 的核心逻辑串起来了。建议配合上面讲的内容一起看。
2.5 为什么 TransE 在药物领域特别火
我个人总结了三点原因:
- 简单至上:只需要维护实体和关系两种向量,训练速度快,调参成本低。我在做 PK/PD 知识图谱时,数据量不大,跑 TransE 几个小时就能收敛。
- 符合直觉:药物-靶点-疾病的关系,很多天然就带有“转移”语义。比如“阿司匹林抑制COX-2”,如果把“抑制”视为一个关系向量,那么整个逻辑链就很清晰。
- 可解释性强:你能直接观察向量空间中实体的位置,理解药物之间的相似性、关系之间的平移差。
我的建议:刚入门知识图谱嵌入,第一件事就是把手写 TransE 的伪代码写熟。理解它的得分函数和损失函数,后面学 DistMult、ComplEx 会轻松很多。
最后说一句,TransE 最大的优点也是最大的缺点。它只能处理 一对一 的关系。
当遇到“一对多”、“多对一”或者“多对多”的情况,它的表现会明显下降。但那是后面章节要讲的话题了。