complex
知识图谱链路预测里程碑,ComplEx 复数嵌入模型的开创性实现
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
知识图谱链路预测里程碑,ComplEx 复数嵌入模型的开创性实现
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你在读一本没有索引的百科全书——每翻一页都要手动搜索相关内容。这正是传统知识图谱面临的困境:实体之间的关系("巴黎是法国的首都")以三元组形式存储,但无法捕捉非对称关系。比如「妈妈」和「女儿」看似相同,实则是方向相反的关系。
2016年,Théo Trouillon 等人在 ICML 上提出了 ComplEx(Complex Embeddings)模型,用复数向量(而非实数向量)来表示知识图谱中的实体和关系,一举解决了这一难题。
ComplEx 的核心思想是利用复数的非对称共轭特性。在复数空间中,给定三元组 (s, r, o) 的评分函数为:
Re(⟨e_s, e_r, ē_o⟩)
其中 e_s、e_r、e_o 分别是主语实体、关系、宾语实体的复数向量嵌入,Ē_o 表示 o 的共轭复数。当关系向量取纯虚数时,评分函数天然具有非对称性——「妈妈」的嵌入和「女儿」的嵌入不再相同。
这种设计让 ComplEx 在 FB15K(Freebase 子集)和 WN18(WordNet 子集)两个标准数据集上大幅超越了当时的 SOTA 模型。
该项目代码结构清晰,分为两层:
EFE 模块(efe/):核心计算引擎
models.py:定义了 Abstract_Model 基类 + 9种具体模型实现:
batching.py:小批量梯度下降的数据批次管理器evaluation.py:链路预测评估(MRR、Hit@K)experiment.py:训练循环主控制器实验入口:fb15k_run.py 和 wn18_run.py 分别驱动 Freebase 和 WordNet 数据集上的实验。
每个模型只需实现两个方法:
get_init_params():定义嵌入矩阵形状和初始化方式define_loss():定义评分函数 + 损失函数 + 正则项这种继承式设计让研究者可以快速添加新模型(如 RESCAL、TransE)而无需重复实现训练循环。
| 配置 | 要求 |
|---|---|
| GPU | NVIDIA CUDA(可选,约 5x 加速) |
| 显存 | 推荐 8GB+ |
| 内存 | 8GB+ |
| Python | 2.7 或 3.x |
| 核心依赖 | downhill (Theano-SGD) + scikit-learn |
运行方式极为简洁:
pip install -r requirements.txt
unzip datasets/fb15k.zip -d datasets/
python fb15k_run.py # CPU
THEANO_FLAGS='device=gpu' python fb15k_run.py # GPU
ComplEx 模型的影响远超论文本身:
ttrouill/complex 是知识图谱嵌入领域的开创性工作,ComplEx 模型至今仍是链路预测的标准基线。代码虽然老旧(Theano 时代),但设计思想清晰、模块化程度高,非常适合学习知识图谱嵌入的原理。对于生产环境,建议迁移到 PyTorch Geometric 或 DGL 的现代实现。
推荐指数:⭐⭐⭐⭐(学术价值极高,工程实用性偏低)