tranz
Knowledge graph embedding models.
[]
= "0.5"
Dual-licensed under MIT or Apache-2.0.
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 candle.
# Train with 1-N scoring (recommended)
# Train with negative sampling (classic)
# Predict from saved embeddings
Benchmark: WN18RR
| Model | Config | Dim | Epochs | MRR | H@1 | H@10 |
|---|---|---|---|---|---|---|
| ComplEx | Adagrad + N3 + reciprocals | 100 | 100 | 0.438 | 0.400 | 0.512 |
| ComplEx | Adam + reciprocals | 100 | 50 | 0.429 | 0.407 | 0.469 |
| DistMult | Adam + 1-N | 100 | 50 | 0.341 | 0.329 | 0.362 |
Published ComplEx MRR on WN18RR is 0.475 (Lacroix et al. 2018). tranz reaches 92% of published with the same recipe (Adagrad, N3, reciprocals).
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
use ;
// Export to w2v TSV
export_embeddings.unwrap;
// Flat f32 matrix for FAISS/Qdrant
let flat: = flatten_matrix;
Training (requires candle feature)
Two training modes:
1-N scoring (recommended): scores all entities per query via matmul + BCE loss. Faster convergence, no negative sampling noise.
Negative sampling (classic): samples k negatives per positive with self-adversarial weighting (SANS).
use ;
let config = TrainConfig ;
let result = train.unwrap;
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