Aller au contenu

FastEmbed - Embeddings légers locaux

FastEmbed - Embeddings légers locaux

FastEmbed (par Qdrant) est une bibliothèque rapide et légère pour générer des embeddings de texte localement. Elle exécute les modèles via ONNX Runtime (aucune dépendance PyTorch lourde), ce qui la rend petite, rapide à installer et efficace sur CPU. Au-delà des embeddings denses, elle prend en charge les creux (BM25, SPLADE), late-interaction (ColBERT) et les modèles de réorganisation — tout ce dont vous avez besoin pour construire la recherche hybride dense + sparse pour la RAG. Elle s’intègre étroitement avec la base de données vectorielle Qdrant.

Installation

MéthodeCommande
pippip install fastembed
GPU (CUDA)pip install fastembed-gpu
Vérifierpython -c "from fastembed import TextEmbedding; print('ok')"

Embeddings denses

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)
AppelDescription
TextEmbedding(model_name)Charger un modèle d’embedding dense
.embed(list)Intégrer des documents (par lot, lazy)
.query_embed(str)Intégrer une requête (certains modèles diffèrent q/d)
.passage_embed(list)Intégrer des passages
TextEmbedding.list_supported_models()Voir les modèles disponibles

Types de modèles

TypeClasseUtilisation
DensesTextEmbeddingSimilarité sémantique
Creux (BM25/SPLADE)SparseTextEmbeddingCorrespondance de mots-clés/terme exact
Late interaction (ColBERT)LateInteractionTextEmbeddingRécupération de réorganisation haute précision
RéorganisationTextCrossEncoderRéorganiser les candidats
ImageImageEmbeddingEmbeddings multimodaux

Embeddings creux (pour la recherche hybride)

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

Les vecteurs creux capturent les termes exacts (identifiants, nombres) que les embeddings denses lissent — la clé d’une forte recherche hybride.

Réorganisation

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."])

Recherche hybride avec 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")
ÉtapeOutil
Vecteurs densesTextEmbedding
Vecteurs creuxSparseTextEmbedding (BM25)
Stocker + fusionnerRequête hybride native Qdrant
Réorganisation optionnelleTextCrossEncoder

Pourquoi FastEmbed (conception)

PropriétéAvantage
ONNX RuntimePas de PyTorch ; petite installation, rapide sur CPU
Modèles quantifiésMémoire/latence inférieure
Générateurs lazyEmbeds de flux, basse mémoire
LocalPas d’appels API ; les données restent privées

Flux de travail courants

# 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-transformersAPI d’embeddings OpenAI
RuntimeONNX (pas torch)PyTorchAPI hébergée
Creux/ColBERTIntégréLibs supplémentairesNon
Local/privéOuiOuiNon
Meilleur pourHybride local léger +Écosystème torch completSimplicité gérée

Ressources