tranz
Point-embedding knowledge graph models: TransE, RotatE, ComplEx, and DistMult. GPU training via Burn (wgpu/Metal).
[]
= "0.6"
Dual-licensed under MIT or Apache-2.0.
For context on how point embeddings relate to region-based approaches, see Why Regions, Not Points.
Models
Each model scores a triple (head, relation, tail) differently:
| Model | Scoring function | Intuition | Reference |
|---|---|---|---|
| TransE | $\lVert \mathbf{h} + \mathbf{r} - \mathbf{t} \rVert$ | Translation: tail = head + relation | Bordes et al., 2013 |
| RotatE | $\lVert \mathbf{h} \circ \mathbf{r} - \mathbf{t} \rVert$ | Rotation in complex plane | Sun et al., 2019 |
| ComplEx | $\text{Re}(\langle \mathbf{h}, \mathbf{r}, \bar{\mathbf{t}} \rangle)$ | Asymmetric via complex conjugate | Trouillon et al., 2016 |
| DistMult | $\langle \mathbf{h}, \mathbf{r}, \mathbf{t} \rangle$ | Element-wise product, symmetric | Yang et al., 2015 |
$\mathbf{h}, \mathbf{r}, \mathbf{t}$ are learned embedding vectors for head, relation, and tail. $\lVert \cdot \rVert$ is the L2 norm, $\circ$ is element-wise product, $\langle \cdot \rangle$ is the trilinear dot product, $\bar{\mathbf{t}}$ is the complex conjugate.
Quick start
Install with cargo install tranz --features burn-ndarray (CPU) or
--features burn-wgpu (GPU/Metal). Training uses Burn's 1-N (1vsAll)
cross-entropy with AdamW.
# Train (ComplEx is the strongest recipe with label smoothing + reciprocals)
# Train from a single triple file (auto-split 80/10/10)
# Predict from saved embeddings
Benchmark: WN18RR
Trained with the Burn 1-N (1vsAll) cross-entropy trainer (AdamW), full filtered evaluation on the test split.
| Model | Config | Dim | Epochs | MRR | H@1 | H@10 |
|---|---|---|---|---|---|---|
| ComplEx | 1-N + label smoothing + reciprocals | 100 | 50 | 0.424 | 0.398 | 0.476 |
Published ComplEx MRR on WN18RR is 0.475 (Lacroix et al. 2018, with Adagrad + N3 regularization, which the Burn 1-N trainer does not implement).
Reproduce (about 20 min on Metal: dim 100, 50 epochs over full WN18RR):
The other three models train end to end on WN18RR too; see the
wn18rr_kge_burn example for a four-model relative comparison.
Library usage
use ;
use ;
use evaluate_link_prediction;
// Load dataset (types from lattix::kge)
let ds = load_dataset.unwrap;
let mut interned = ds.into_interned;
interned.add_reciprocals;
// Create model and query
let model = new;
let top10 = model.top_k_tails;
// Evaluate (filtered link prediction)
let filter = from_dataset;
let metrics = evaluate_link_prediction;
Generic triple loading
use ;
let ds = load_flexible.unwrap;
let ds = ds.split; // 80/10/10
let interned = ds.into_interned;
Embedding export
tranz train writes entities.tsv, relations.tsv, and manifest.json.
The manifest records model family, training config, split sizes, SHA-256
digests, byte sizes, and evaluation metrics when --eval is used. With the
artifact-manifest feature, load_embedding_manifest and
verify_embedding_manifest read the manifest back and check the exported files.
use ;
// Export to w2v TSV
export_embeddings.unwrap;
let manifest = load_embedding_manifest.unwrap;
verify_embedding_manifest.unwrap;
// Flat f32 matrix for FAISS/Qdrant
let flat: = flatten_matrix;
Multi-hop query answering
Answers conjunctive, disjunctive, and negation queries by decomposing them into atomic link prediction calls composed with t-norm fuzzy logic (CQD-Beam, Arakelyan et al. 2021). No complex-query training needed.
use ;
use DistMult;
let model = new;
// 2-hop chain: entity 0 -rel 0-> V -rel 1-> ?
let q = anchor.then;
// Intersection: (0 -r0-> ?) AND (1 -r1-> ?)
let q = intersection;
// Intersect-then-project (pi): (0 -r0-> V AND 1 -r1-> V) -r2-> ?
let q = intersection.then;
let top10 = answer_query_topk;
Ensemble scoring
Average scores from multiple models (snapshots, different seeds).
use ;
let models: = vec!;
let ensemble = new;
let top5 = ensemble.top_k_tails;
Training
Training runs on the Burn backend, selected by feature:
| Feature | Backend | GPU | Best for |
|---|---|---|---|
burn-ndarray |
Burn + ndarray | -- | CPU training, all 4 models |
burn-wgpu |
Burn + WGPU | Metal/Vulkan | macOS/GPU training, all 4 models |
All four models train with 1-N (1vsAll) scoring: every entity is scored per query via matmul + softmax cross-entropy, optimized with AdamW. Label smoothing is optional.
use ;
type B = Autodiff;
let device = Cpu;
let config = BurnTrainConfig ;
let result = ;
Examples
See examples/README.md for the full gallery, where each
example states the question it answers, the run command, and real sample output.
Highlights:
wn18rr_kge_burntrains all four models on real WN18RR with the Burn backend (Metal-accelerated) and reports MRR/Hits, the real-data check that the Burn trainers learn.wn18rr_vicinitytrains point embeddings and serves nearest-neighbour queries through a vicinity HNSW index.scoreis the smallest way to use a trained model;bench_wgputimes Metal vs CPU;bench_scoringandbench_f32_vs_f64measure the scoring hot path.
Companion to subsume
subsume embeds entities as geometric regions (boxes, cones) where containment encodes subsumption. tranz embeds entities as points where distance/similarity encodes relational facts.
- subsume: ontology completion, taxonomy expansion, logical query answering
- tranz: link prediction, relation extraction, knowledge base completion