KGE-HAKE
利用向量模长与相位双分量建模知识图谱语义层级关系,显著提升链接预测准确率
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
利用向量模长与相位双分量建模知识图谱语义层级关系,显著提升链接预测准确率
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你在查族谱,想知道「曾祖父的爷爷」和「高祖父」之间是什么关系——普通人会觉得绕,但其实只要知道「高」比「曾」辈分更高,这个关系一目了然。
然而,早期的知识图谱嵌入模型(如 TransE、DistMult)有一个根本性缺陷:它们把所有实体和关系都映射到同一个向量空间,无法区分不同层级的语义层次。结果就是,当模型尝试预测「张三的曾祖父是谁」时,它可能把答案指向了「张三的高祖父」,因为在向量空间中,这两个实体的位置几乎相同。
这就是知识图谱链接预测(Link Prediction)任务中一个经典难题:如何让模型理解实体之间的层级关系(Hierarchy)。
HAKE(Hierarchy-Aware Knowledge Graph Embedding) 是由中国科学技术大学 MIRALab 实验室提出的一种知识图谱嵌入方法,发表在 AAAI 2020 会议上。作者来自中国科学技术大学(USTC),团队专注于知识图谱和表示学习领域。
HAKE 的核心洞察是:实体的层级关系天然具有两重性——有些实体在语义上处于不同层级(如「动物」→「猫」),有些实体虽然在语义上同属一层级,但与层级结构的位置关系不同(如「父亲」与「母亲」,都在family关系的同一层,但位置相对)。
基于这一观察,HAKE 创新性地将实体嵌入拆分为两个正交分量:
这两个分量共同作用,使 HAKE 能够在统一的向量空间中同时建模层级关系和同层关系。相比之下,早期的 TransE 等模型只能处理平移关系,无法捕捉这种层次结构。
HAKE 在数学上基于 RotatE 模型进行扩展。RotatE 将关系建模为复数空间中从头实体到尾实体的旋转操作(rotation),而 HAKE 在此基础上引入了模长约束,让实体嵌入的模长本身携带层级信息。
具体而言,HAKE 的评分函数设计如下:
两者通过加权组合形成最终评分: $$ ext{Score} = ||h_m \odot r_m - t_m|| + lpha \cdot ||h_p + r_p - t_p||$$
其中 $\alpha$ 是模长权重,控制两部分贡献的相对重要性。训练时采用自对抗负采样(self-adversarial negative sampling)策略,提升模型区分真假三元组的能力。
本仓库代码结构简洁,共 3 个核心 Python 模块:
| 文件 | 职责 | 关键类/函数 |
|---|---|---|
data.py | 数据加载与批处理 | DataReader、TrainDataset、BidirectionalOneShotIterator |
models.py | 模型定义 | KGEModel(抽象基类)、ModE、HAKE |
runs.py | 训练/测试主入口 | parse_args()、训练循环、评估逻辑 |
核心模型类 HAKE 继承自 KGEModel,在 models.py 中实现。模型内部维护两套嵌入向量——模长嵌入和相位嵌入,分别用于建模层级深浅和同层位置关系。在前向传播中,根据不同的批处理类型(HEAD_BATCH / TAIL_BATCH / SINGLE)执行不同的张量索引和评分计算。
训练入口 runs.py 通过 argparse 接收丰富的超参数,包括学习率、隐藏维度、负样本大小、模长权重、相位权重等,支持从零训练、验证集评估和测试集评估三种模式。所有参数均可通过 runs.sh 脚本一键传入,实现论文中的完整复现。
HAKE 在三个标准数据集上进行了充分实验,对比基线包括 ModE、TransE、DistMult、ConvE 等主流模型:
| 数据集 | 模型 | MRR | HITS@10 |
|---|---|---|---|
| WN18RR | ModE | 0.472 | 0.564 |
| WN18RR | HAKE | 0.496 | 0.582 |
| FB15k-237 | ModE | 0.341 | 0.534 |
| FB15k-237 | HAKE | 0.346 | 0.542 |
| YAGO3-10 | ModE | 0.510 | 0.660 |
| YAGO3-10 | HAKE | 0.546 | 0.694 |
可以看到,HAKE 在所有数据集上均显著超越 ModE 基线,尤其在 YAGO3-10 上 MRR 提升达 3.6 个百分点(0.510→0.546),说明在长尾关系和复杂语义层次场景下,HAKE 的优势更为突出。
本仓库是一个学术论文复现项目,而非生产级工具。它在可用性方面存在以下局限:
requirements.txt 或 pyproject.toml,仅在 README 中列出依赖项。用户需要手动安装 PyTorch 1.0+ 和 NumPy,没有版本锁定。data/ 目录下,没有自动化下载脚本。runs.sh 复现命令,但超参数组合繁多(15个参数),普通用户难以在不阅读代码的情况下调整。需要指出的是,HAKE 的创新点是将层级信息编码进嵌入向量的模长,这是一种优雅且有效的设计,但并非万能解。对于没有明显层级结构的关系(如「朋友」「同事」),HAKE 的优势可能不明显。此外,HAKE 目前仅支持链接预测任务,不支持知识图谱补全中的关系分类或实体分类任务。
尽管是学术代码,HAKE 的技术思路对工业界有重要参考价值。在知识图谱驱动的应用(如问答系统、推荐系统、语义搜索)中,正确建模实体层级关系直接影响下游任务的准确率。例如,在医疗知识图谱中,「症状」→「疾病」→「科室」的层级关系如果嵌入得当,可以显著提升疾病诊断的召回率。
HAKE 的核心思想——用向量模长编码层级深度,用相位编码同层位置——实际上是一种将结构先验注入表示学习的范式,这种思路已被后续工作(如 HAKE-ConvE、StAR 等)进一步扩展。
从学术影响力看,该论文被引用次数已超过 500 次(Google Scholar),是知识图谱嵌入领域的重要参考文献,对于研究表示学习和图神经网络的开发者具有较高的学习和参考价值。
# 克隆仓库
git clone https://github.com/MIRALab-USTC/KGE-HAKE
cd KGE-HAKE
# 安装依赖
pip install torch numpy
# 下载数据集(WN18RR)到 data/wn18rr/ 目录
# 训练 HAKE 模型(WN18RR)
bash runs.sh train HAKE wn18rr 0 0 512 1024 500 6.0 0.5 0.00005 80000 8 0.5 0.5
# 评估模型
bash runs.sh test HAKE wn18rr 0 0
推荐人群:知识图谱研究方向的硕博生、图嵌入算法工程师、对链接预测任务感兴趣的 AI 开发者。