Salta ai contenuti

FastEmbed - Cheatsheet Embedding Leggeri Locali

FastEmbed - Cheatsheet Embedding Leggeri Locali

FastEmbed (di Qdrant) è una libreria veloce e leggera per generare embedding di testo localmente. Esegue i modelli tramite ONNX Runtime (nessuna pesante dipendenza PyTorch), che la rende piccola, veloce da installare ed efficiente sulla CPU. Oltre agli embedding densi supporta sparse (BM25, SPLADE), late-interaction (ColBERT) e modelli di reranking — tutto ciò che serve per costruire una ricerca ibrida densa+sparse per RAG. Si integra strettamente con il database vettoriale Qdrant.

Installazione

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

Embedding Densi

from fastembed import TextEmbedding

model = TextEmbedding("BAAI/bge-small-en-v1.5")   # scarica una volta
docs = ["FastEmbed runs on ONNX.", "It is CPU-friendly."]
vectors = list(model.embed(docs))   # generatore di array numpy
print(len(vectors), vectors[0].shape)
ChiamataDescrizione
TextEmbedding(model_name)Carica un modello di embedding denso
.embed(list)Embedding di documenti (batch, lazy)
.query_embed(str)Embedding di una query (alcuni modelli differenziano q/d)
.passage_embed(list)Embedding di passaggi
TextEmbedding.list_supported_models()Vedi i modelli disponibili

Tipi di Modello

TipoClasseUsa
DensoTextEmbeddingSomiglianza semantica
Sparse (BM25/SPLADE)SparseTextEmbeddingCorrispondenza di termini/esatti
Late interaction (ColBERT)LateInteractionTextEmbeddingRecupero reranking ad alta precisione
RerankingTextCrossEncoderRiordina i candidati
ImmagineImageEmbeddingEmbedding multimodali

Embedding Sparse (per Ricerca Ibrida)

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: indici token + pesi

Gli embedding sparse catturano i termini esatti (identificatori, numeri) che gli embedding densi liscia — la chiave per una ricerca ibrida forte.

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

Ricerca Ibrida con Qdrant

from fastembed import TextEmbedding, SparseTextEmbedding
# Calcola vettori densi e sparse per ogni chunk, eseguire l''upsert su Qdrant,
# quindi interroga con entrambi e lascia che Qdrant fonda (RRF) i risultati.
dense = TextEmbedding("BAAI/bge-small-en-v1.5")
sparse = SparseTextEmbedding("Qdrant/bm25")
PassaggioStrumento
Vettori densiTextEmbedding
Vettori sparseSparseTextEmbedding (BM25)
Memorizza + fondiQuery ibrida nativa di Qdrant
Reranking opzionaleTextCrossEncoder

Perché FastEmbed (Progettazione)

ProprietàBeneficio
ONNX RuntimeNessun PyTorch; installazione piccola, veloce sulla CPU
Modelli quantizzatiMemoria/latenza inferiore
Generatori lazyStream embedding, bassa memoria
LocaleNessuna chiamata API; i dati rimangono privati

Flussi di Lavoro Comuni

# Batch-embed un corpus per un DB vettoriale (consapevole della CPU)
from fastembed import TextEmbedding
model = TextEmbedding("BAAI/bge-base-en-v1.5")
embeddings = list(model.embed(corpus, batch_size=64))

# Costruisci recupero ibrido: denso + BM25 sparse, fuso in Qdrant

FastEmbed vs Alternative

AspettoFastEmbedsentence-transformersOpenAI embeddings API
RuntimeONNX (nessun torch)PyTorchHosted API
Sparse/ColBERTBuilt-inLibrerie extraNo
Locale/privatoNo
Migliore perLocale leggero + ibridoEcosistema torch completoSemplicità gestita

Risorse