Zum Inhalt springen

FastEmbed - Lightweight Local Embeddings Cheatsheet

FastEmbed - Lightweight Local Embeddings Cheatsheet

FastEmbed (von Qdrant) ist eine schnelle, leichte Bibliothek zum Generieren von Text-Embeddings lokal. Es führt Modelle über ONNX Runtime aus (keine schwere PyTorch-Abhängigkeit), was es klein, schnell zu installieren und effizient auf CPU macht. Neben Dense Embeddings unterstützt es Sparse (BM25, SPLADE), Late-Interaction (ColBERT) und Reranking Modelle — alles, was du brauchst, um Hybrid Dense+Sparse Search für RAG zu erstellen. Es integriert sich eng mit der Qdrant Vector-Datenbank.

Installation

MethodCommand
pippip install fastembed
GPU (CUDA)pip install fastembed-gpu
Verifypython -c "from fastembed import TextEmbedding; print('ok')"

Dense Embeddings

from fastembed import TextEmbedding

model = TextEmbedding("BAAI/bge-small-en-v1.5")   # downloads once
docs = ["FastEmbed runs on ONNX.", "It is CPU-friendly."]
vectors = list(model.embed(docs))   # generator of numpy arrays
print(len(vectors), vectors[0].shape)
CallBeschreibung
TextEmbedding(model_name)Lade ein Dense-Embedding-Modell
.embed(list)Embedde Dokumente (gebündelt, lazy)
.query_embed(str)Embedde eine Abfrage (einige Modelle unterscheiden q/d)
.passage_embed(list)Embedde Passagen
TextEmbedding.list_supported_models()Sehe verfügbare Modelle

Model Types

TypeClassUse
DenseTextEmbeddingSemantische Ähnlichkeit
Sparse (BM25/SPLADE)SparseTextEmbeddingKeyword/Exact-Term Matching
Late interaction (ColBERT)LateInteractionTextEmbeddingHigh-Precision Reranking Retrieval
RerankingTextCrossEncoderOrdne Kandidaten neu
ImageImageEmbeddingMultimodale Embeddings
from fastembed import SparseTextEmbedding

sparse = SparseTextEmbedding("Qdrant/bm25")
sv = list(sparse.embed(["exact term ABC-123 matters"]))
print(sv[0].indices, sv[0].values)   # sparse: token indices + weights

Sparse Vektoren erfassen exakte Begriffe (Identifikatoren, Zahlen), die Dense Embeddings glätten — der Schlüssel zu starker Hybrid Search.

Reranking

from fastembed.rerank.cross_encoder import TextCrossEncoder

reranker = TextCrossEncoder("Xenova/ms-marco-MiniLM-L-6-v2")
scores = reranker.rerank("what is fastembed?",
                         ["FastEmbed is an embedding lib.", "Unrelated text."])

Hybrid Search with Qdrant

from fastembed import TextEmbedding, SparseTextEmbedding
# Compute both dense and sparse vectors for each chunk, upsert to Qdrant,
# then query with both and let Qdrant fuse (RRF) the results.
dense = TextEmbedding("BAAI/bge-small-en-v1.5")
sparse = SparseTextEmbedding("Qdrant/bm25")
StepTool
Dense vectorsTextEmbedding
Sparse vectorsSparseTextEmbedding (BM25)
Store + fuseQdrant Native Hybrid Query
Optional rerankTextCrossEncoder

Why FastEmbed (Design)

PropertyVorteil
ONNX RuntimeKein PyTorch; kleine Installation, schnell auf CPU
Quantized modelsNiedrigerer Speicher/Latenz
Lazy generatorsStream Embeddings, Niedriger Speicher
LocalKeine API-Aufrufe; Daten bleiben privat

Common Workflows

# Batch-embed a corpus for a vector DB (CPU-friendly)
from fastembed import TextEmbedding
model = TextEmbedding("BAAI/bge-base-en-v1.5")
embeddings = list(model.embed(corpus, batch_size=64))

# Build hybrid retrieval: dense + BM25 sparse, fused in Qdrant

FastEmbed vs Alternatives

AspectFastEmbedsentence-transformersOpenAI embeddings API
RuntimeONNX (no torch)PyTorchHosted API
Sparse/ColBERTBuilt-inExtra libsNo
Local/privateYesYesNo
Best forLightweight local + hybridFull torch ecosystemManaged simplicity

Resources