Files
semantica/docs/reference/embeddings.md
T
KaifAhmad1 9113ef3428 docs: premium overhaul of all reference pages and core docs
- Rewrote all 26 reference module pages: removed blockquote taglines and
  horizontal rule separators, added "What You Get" bullet summaries,
  added constructor/method parameter tables, expanded thin files
  (graph_store, triplet_store, visualization, provenance) with full API
  coverage, added backend comparison tables and real-world usage patterns
- Renamed Modules tab from "API Reference" and group from "Context &
  Knowledge" to "Context & Intelligence" in docs.json
- Fixed logo: copied "Semantica Logo.png" to web-safe semantica-logo.png
  and updated all 4 references in docs.json
- Improved core docs (index, modules, concepts, quickstart, installation,
  getting-started) with better fonts, bullet points, and complete module
  listings (mcp_server, evals, core, utils previously missing)
- Rewrote community pages (community, community-projects, contributing-guide,
  use-cases, architecture, faq, learning-more, glossary) with heading
  hierarchy fixes, expanded definitions, and better structure
- Fixed markdown linter warnings: MD036 bold-as-heading, MD001 heading
  skips, MD040 missing code fence language, MD032 blank lines around lists
2026-05-23 13:10:09 +05:30

7.4 KiB
Raw Blame History

title, description, icon
title description icon
Embeddings Module Text and graph embedding generation — Sentence-Transformers, FastEmbed, OpenAI, BGE, LlamaStore, with pooling strategies and graph embedding managers. vector-square

semantica.embeddings converts text and graph structures into dense vectors for semantic search, entity resolution, and GraphRAG retrieval. A single provider-agnostic API abstracts Sentence-Transformers, FastEmbed, OpenAI, BGE, and Ollama.

What You Get

  • EmbeddingGenerator — main entry point, provider-agnostic text embedding with batching
  • TextEmbedder — text-specific embedding with automatic batching and disk caching
  • GraphEmbeddingManager — node and subgraph embeddings for structural similarity
  • VectorEmbeddingManager — full embedding lifecycle for vector store integration
  • Provider storesOpenAIStore, BGEStore, FastEmbedStore, LlamaStore, ProviderStoreFactory
  • Pooling strategies — Mean, Max, CLS, Attention, Hierarchical pooling

EmbeddingGenerator

Main entry point — handles provider selection and batching automatically:

from semantica.embeddings import EmbeddingGenerator

# Sentence-Transformers (default, free, local)
generator = EmbeddingGenerator(model="sentence-transformers")
embeddings = generator.generate(["Text 1", "Text 2"])

# Specific BGE model
generator = EmbeddingGenerator(model="BAAI/bge-large-en-v1.5")
embeddings = generator.generate(texts)

# OpenAI
import os
generator = EmbeddingGenerator(
    model="openai",
    model_name="text-embedding-3-small",
    api_key=os.getenv("OPENAI_API_KEY")
)

# FastEmbed (fast, CPU-optimized)
generator = EmbeddingGenerator(model="fastembed")

Supported Models

Provider Model Dimension Notes
sentence-transformers all-MiniLM-L6-v2 384 Default, fast, free
sentence-transformers all-mpnet-base-v2 768 Higher quality
bge BAAI/bge-large-en-v1.5 1024 State-of-the-art retrieval
fastembed BAAI/bge-small-en-v1.5 384 Fast, CPU-optimized
openai text-embedding-3-small 1536 OpenAI API
openai text-embedding-3-large 3072 OpenAI API, highest quality
llama any Ollama model varies Fully local inference

TextEmbedder

Specialized for text with automatic batching and optional disk cache:

from semantica.embeddings import TextEmbedder

embedder = TextEmbedder(model="sentence-transformers", cache_dir=".emb_cache")

# Single text
embedding = embedder.embed("Hello world")

# Batch — processes automatically in chunks
embeddings = embedder.embed_batch(
    ["Text 1", "Text 2", ..., "Text 10000"],
    batch_size=128,
    show_progress=True
)

Provider Stores

Each provider implements the ProviderStore interface and can be used independently:

from semantica.embeddings import (
    OpenAIStore, BGEStore, FastEmbedStore, LlamaStore,
    ProviderStoreFactory
)

# OpenAI
store = OpenAIStore(api_key=os.getenv("OPENAI_API_KEY"), model="text-embedding-3-small")
embedding = store.embed("Hello world")

# BGE (Sentence-Transformers wrapper)
store = BGEStore(model="BAAI/bge-large-en-v1.5")
embedding = store.embed("Hello world")

# FastEmbed
store = FastEmbedStore(model="BAAI/bge-small-en-v1.5")
embedding = store.embed("Hello world")

# LlamaStore (Ollama — fully local)
store = LlamaStore(model="llama3.2", base_url="http://localhost:11434")
embedding = store.embed("Hello world")

# Auto-select from config
store = ProviderStoreFactory.create(provider="openai", model="text-embedding-3-small")

Pooling Strategies

Control how token-level embeddings are aggregated into a single vector:

from semantica.embeddings import (
    MeanPooling, MaxPooling, CLSPooling,
    AttentionPooling, HierarchicalPooling, PoolingStrategyFactory
)

# Mean pooling — default, best for most tasks
pooler = MeanPooling()
pooled = pooler.pool(token_embeddings)

# Max pooling — captures strongest activated features
pooler = MaxPooling()

# CLS token — good for classification tasks
pooler = CLSPooling()

# Attention-weighted pooling
pooler = AttentionPooling()

# Hierarchical: chunk-level → global mean (best for long documents)
pooler = HierarchicalPooling(chunk_size=512)

# Create from config string
pooler = PoolingStrategyFactory.create(strategy="mean")

GraphEmbeddingManager

Embed graph nodes and subgraphs for structural similarity and GraphRAG context:

from semantica.embeddings import GraphEmbeddingManager

manager = GraphEmbeddingManager(
    text_embedder=TextEmbedder(model="sentence-transformers"),
    graph_store=graph_store
)

# Embed all nodes in the graph
node_embeddings = manager.embed_nodes(kg)

# Embed a subgraph centered on a node (for GraphRAG context)
subgraph_embedding = manager.embed_subgraph(
    kg, center_node="Apple Inc.", hops=2
)

# Find semantically similar nodes
similar = manager.find_similar_nodes("apple_inc", top_k=5)

VectorEmbeddingManager

Manages the full embedding lifecycle — from raw text to stored, searchable vectors:

from semantica.embeddings import VectorEmbeddingManager
from semantica.vector_store import VectorStore

vector_store = VectorStore(backend="faiss", dimension=768)

manager = VectorEmbeddingManager(
    embedder=TextEmbedder(model="sentence-transformers"),
    vector_store=vector_store
)

# Embed documents and store in one step
ids = manager.embed_and_store(documents, metadata=metadata_list)

# Search by semantic similarity
results = manager.search("machine learning algorithms", top_k=10)

Similarity Computation

from semantica.embeddings import calculate_similarity

# Cosine similarity (most common)
score = calculate_similarity(embedding_a, embedding_b, method="cosine")
# → 0.0 to 1.0

# Euclidean distance (converted to similarity)
score = calculate_similarity(embedding_a, embedding_b, method="euclidean")

GPU Acceleration

# Use CUDA GPU for faster embedding generation
generator = EmbeddingGenerator(model="sentence-transformers", device="cuda")
# device options: "cpu" | "cuda" | "mps"

Embedding Cache

The embedding cache is used by Distance Intelligence (v0.5.0) to avoid recomputing embeddings for large N×N distance matrix calculations:

embedder = TextEmbedder(
    model="sentence-transformers",
    cache_dir=".embeddings_cache",
    cache_ttl=3600    # seconds before cache entries expire
)

Convenience Functions

from semantica.embeddings import (
    embed_text, generate_embeddings, calculate_similarity,
    pool_embeddings, check_available_providers
)

# Single text
emb = embed_text("Hello world", method="sentence_transformers")

# Batch
embs = generate_embeddings(texts, method="openai")

# Check which providers are installed
providers = check_available_providers()
# → {"sentence_transformers": True, "fastembed": True, "openai": False}
Store and search the generated embeddings. Chunk text before embedding for better retrieval quality. Distance Intelligence uses graph embeddings. Semantic deduplication uses embeddings for entity resolution.