OxiRS Embed - Knowledge Graph Embeddings
Status: v0.3.2 - Released 2026-07-12
✨ Production Release: Production-ready with API stability guarantees. Semantic versioning enforced.
Generate vector embeddings for RDF knowledge graphs enabling semantic similarity search, entity linking, and neural-symbolic AI integration.
Features
Embedding Models
- TransE - Translational distance models for knowledge graphs
- DistMult - Bilinear diagonal models for symmetric relations
- ComplEx - Complex-valued embeddings for asymmetric relations
- RotatE - Rotation-based models in complex space
- HolE - Holographic embeddings using circular correlation (NEW in v0.1.0)
- ConvE - Convolutional 2D neural network embeddings (NEW in v0.1.0)
- TuckER - Tucker decomposition for multi-relational learning
- QuatE - Quaternion embeddings for complex patterns
Advanced Features (NEW in v0.1.0)
- Link Prediction - Predict missing triples (head/tail/relation)
- Filtered ranking to remove known triples
- Batch prediction for efficiency
- Evaluation metrics (MRR, Hits@K, Mean Rank)
- Entity Clustering - Group similar entities
- K-Means with K-Means++ initialization
- Hierarchical (agglomerative) clustering
- DBSCAN (density-based) clustering
- Spectral clustering
- Quality metrics (silhouette score, inertia)
- Community Detection - Find communities in knowledge graphs
- Louvain modularity optimization
- Label propagation
- Girvan-Newman edge betweenness
- Embedding-based detection
- Vector Search - High-performance semantic search (NEW in 0.1.0)
- Exact search with multiple distance metrics
- Cosine similarity, Euclidean, dot product, Manhattan
- Batch search for multiple queries
- Radius-based filtering
- Parallel processing support
- Visualization - t-SNE, PCA, UMAP, Random Projection
- 2D and 3D dimensionality reduction
- Export to CSV/JSON formats
- Cluster-aware visualizations
- Interpretability - Model understanding tools
- Similarity analysis and nearest neighbors
- Feature importance analysis
- Counterfactual explanations
- Embedding space diagnostics
- Mixed Precision Training - FP16/FP32 for faster training
- Model Quantization - Int8/Int4/Binary compression (3-4x size reduction)
Knowledge Graph Embedding
- Entity Embeddings - Generate embeddings for RDF entities
- Relation Embeddings - Embed predicates and relationships
- Graph Embeddings - Whole-graph vector representations
- Contextual Embeddings - Use graph context for better embeddings
Applications
- Semantic Search - Find similar entities by meaning
- Entity Linking - Link mentions to knowledge graph entities
- Relation Prediction - Predict missing relationships
- Clustering - Group similar entities
- Knowledge Graph Completion - Fill missing facts in KGs
- Anomaly Detection - Detect unusual patterns in graphs
Installation
Add to your Cargo.toml:
[]
= "0.3.2"
# Enable optional feature groups (advanced models, GPU acceleration, API server, ...)
= { = "0.3.2", = ["advanced-models", "gpu"] }
Quick Start
Basic Entity Embedding
Free-text embedding uses the domain-specific transformer models in
biomedical_embeddings (SciBERT, CodeBERT, BioBERT,
LegalBERT, FinBERT, ClinicalBERT, ChemBERT):
use ;
async
Knowledge Graph Embedding
Structural knowledge graph embedding trains one of the EmbeddingModel implementations
(TransE, DistMult, ComplEx, RotatE, HolE, ConvE, TuckER, QuatE, ...)
directly on RDF triples:
use ;
async
TransE also implements Default (delegating to ModelConfig::default(), i.e. 100
dimensions, L2 distance, margin 1.0), so TransE::default() works anywhere a plain
M: EmbeddingModel + Default bound is needed — for example in generic benchmark/test
harnesses. Prefer TransE::new(config) when you need a specific dimension or learning
rate.
Semantic Similarity
use cosine_similarity;
// Compare two entity embeddings (both `&[f32]`, e.g. from `Vector::values`)
let score = cosine_similarity;
println!;
For ranked nearest-neighbor search over many entities at once, use the Vector Search index below rather than a single pairwise call.
New Models (v0.1.0)
HolE (Holographic Embeddings)
HolE uses circular correlation to model entity and relation interactions. Effective for capturing symmetric and asymmetric patterns.
use ;
async
ConvE (Convolutional Embeddings)
ConvE uses 2D CNNs for expressive knowledge graph embeddings. Parameter-efficient with shared convolutional filters.
use ;
let config = ConvEConfig ;
let mut model = new;
// Add triples and train as before
model.add_triple?;
model.train.await?;
Link Prediction
Predict missing entities or relations in knowledge graphs.
use ;
// Create predictor
let pred_config = LinkPredictionConfig ;
let predictor = new;
// Predict tail entity (object prediction)
let candidates = vec!;
let predictions = predictor.predict_tail?;
for pred in predictions
// Predict head entity (subject prediction)
let predictions = predictor.predict_head?;
// Predict relation
let relations = vec!;
let predictions = predictor.predict_relation?;
Entity Clustering
Group similar entities based on learned embeddings.
use ;
use HashMap;
// Extract embeddings
let mut embeddings = new;
for entity in model.get_entities
// K-Means clustering
let config = ClusteringConfig ;
let mut clustering = new;
let result = clustering.cluster?;
println!;
println!;
for in result.assignments
Community Detection
Find communities in knowledge graphs using graph structure and embeddings.
use ;
let config = CommunityConfig ;
let mut detector = new;
let result = detector.detect_from_triples?;
println!;
println!;
Vector Search
High-performance semantic search for knowledge graph embeddings.
use ;
// Build search index
let config = SearchConfig ;
let mut index = new;
index.build?;
// Search for similar entities
let query_embedding = embeddings.to_vec;
let results = index.search?;
for result in results
// Batch search
let queries = vec!;
let batch_results = index.batch_search?;
// Radius search (find all within distance)
let radius_results = index.radius_search?;
Visualization
Visualize embeddings in 2D/3D using dimensionality reduction.
use ;
// PCA visualization
let config = VisualizationConfig ;
let mut visualizer = new;
let result = visualizer.visualize?;
// t-SNE visualization (better for discovering clusters)
let tsne_config = VisualizationConfig ;
let mut tsne_viz = new;
let tsne_result = tsne_viz.visualize?;
// Export to CSV for plotting
for in &tsne_result.coordinates
Interpretability
Understand why models make certain predictions.
use ;
// Similarity analysis
let config = InterpretabilityConfig ;
let analyzer = new;
let analysis = analyzer.similarity_analysis?;
println!;
for in &analysis.similar_entities
// Feature importance
let importance_config = InterpretabilityConfig ;
let imp_analyzer = new;
let importance = imp_analyzer.feature_importance?;
// Counterfactual explanations
let counterfactual = analyzer.counterfactual_explanation?;
println!;
Supported Embedding Providers
oxirs-embed ships two families of models rather than a single pluggable "provider"
facade: structural knowledge-graph embedders (trained locally on your triples) and
specialized domain text-embedding models (also local — no network calls).
Structural Knowledge Graph Models
Selected via Cargo features (basic-models is the default):
| Feature | Models |
|---|---|
basic-models (default) |
TransE, ComplEx, DistMult, HoLE |
advanced-models |
RotatE, ConvE, TuckER, QuatE |
Each is a plain struct implementing the EmbeddingModel trait — see
Knowledge Graph Embedding above.
Specialized Domain Text Models
oxirs_embed::biomedical_embeddings::SpecializedTextModel covers seven pretrained
architectures, each with a matching SpecializedTextEmbedding::{name}_config() helper
(scibert_config(), codebert_config(), biobert_config(), ...):
SciBERT- Scientific literature (768 dimensions)CodeBERT- Code and programming languagesBioBERT- Biomedical literatureLegalBERT- Legal documentsFinBERT- Financial textsClinicalBERT- Clinical notesChemBERT- Chemical compounds
use ;
let config = SpecializedTextConfig ;
let mut model = new;
let embedding = model.encode_text.await?;
Advanced Features
Batch Processing
The EmbeddingModel::encode trait method already accepts multiple texts per call —
there is no separate batch-sized entry point:
use EmbeddingModel;
let texts: = vec!;
// One call encodes the whole batch: Vec<Vec<f32>>, one embedding per input text
let embeddings = model.encode.await?;
Contextual Embeddings
ContextualEmbeddingModel adapts embeddings to query/user/task/temporal context.
It is still evolving (its crate-root re-export is currently disabled), so import it
via its module path:
use ;
use Triple;
# async
Entity Linking
use ;
use Array1;
use HashMap;
let linker = new?;
// Link a (pre-embedded) mention to knowledge graph entities — the mention text
// "machine learning expert from Stanford" must already be embedded into the
// same vector space as `entity_embeddings` (e.g. via a text embedding model).
let mention_embedding: = embed_mention;
let candidates = linker.link_entity?;
for result in candidates
Relation Prediction
use ;
let predictor = new;
// Predict relations between two entities
let predictions = predictor.predict_relations?;
for pred in predictions
Integration with OxiRS
With oxirs-vec (Vector Search)
use ;
use ;
// Index every trained entity embedding in an oxirs-vec store
let mut store = new;
for entity in model.get_entities
// Find the entities closest to Alice
let query = model.get_entity_embedding?;
let results = store.search_similar?;
With oxirs-chat (RAG)
oxirs-chat's rag module consumes entity/text embeddings produced by
oxirs-embed as part of its retrieval-augmented generation pipeline. See
oxirs-chat for the current pipeline API.
Performance
Benchmarks
Run the criterion suite for up-to-date numbers on your own hardware:
Optimization Tips
use EmbeddingModel;
// encode() already batches: pass every text in one call instead of looping
let embeddings = model.encode.await?;
// Cache embeddings (fixed-capacity LRU, keyed by content hash + model id)
use ;
let mut cache = new;
let key = new;
if let Some = cache.get else
GPU acceleration (feature gpu, Pure-Rust via scirs2-core/scirs2-linalg) is
provided by oxirs_embed::gpu_acceleration::{GpuAccelerationConfig, GpuAccelerationManager}
— see the crate-level docs for a full example.
Status
Production Release (v0.3.2)
- ✅ Structural KG embedding models: TransE, DistMult, ComplEx, RotatE, HoLE, ConvE, TuckER, QuatE
- ✅ Specialized domain text embeddings: SciBERT, CodeBERT, BioBERT, LegalBERT, FinBERT, ClinicalBERT, ChemBERT
- ✅ Link prediction, entity clustering, community detection, vector search, visualization, interpretability
- ✅ Entity linking and relation prediction (
entity_linkingmodule) - ✅ Fine-tuning (
fine_tuning/fine_tuner) and model ensembling (ensemble) - ✅ Model zoo with SHA256-verified manifests (
model_zoo) - ✅ GPU acceleration behind the optional
gpufeature (Pure-Rust, no CUDA/FFI required) - 🚧 Contextual embeddings (
contextualmodule) – implemented but not yet re-exported at the crate root while the API stabilizes
Contributing
This is an experimental module. Feedback welcome!
License
Apache-2.0
See Also
- oxirs-vec - Vector search engine
- oxirs-chat - AI-powered chat with RAG
- oxirs-core - RDF data model