Pular para o conteúdo

FastEmbed - Cheatsheet de Embeddings Local Leve

FastEmbed - Cheatsheet de Embeddings Local Leve

FastEmbed (por Qdrant) é uma biblioteca rápida e leve para gerar embeddings de texto localmente. Executa modelos via ONNX Runtime (sem dependência pesada de PyTorch), o que o torna pequeno, rápido de instalar e eficiente em CPU. Além de embeddings densos, suporta esparsos (BM25, SPLADE), de interação tardia (ColBERT) e modelos de reranking — tudo que você precisa para construir busca híbrida densa+esparsa para RAG. Integra-se fortemente com o banco de dados de vetor Qdrant.

Instalação

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

Embeddings Densos

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)
ChamadaDescrição
TextEmbedding(model_name)Carregar um modelo de embedding denso
.embed(list)Embeddings de documentos (em lote, preguiçosos)
.query_embed(str)Embeddings de uma consulta (alguns modelos diferem q/d)
.passage_embed(list)Embeddings de passagens
TextEmbedding.list_supported_models()Ver modelos disponíveis

Tipos de Modelo

TipoClasseUso
DenseTextEmbeddingSimilaridade semântica
Sparse (BM25/SPLADE)SparseTextEmbeddingCorrespondência de termos de palavra-chave/exato
Late interaction (ColBERT)LateInteractionTextEmbeddingReranking de recuperação de alta precisão
RerankingTextCrossEncoderReordenar candidatos
ImageImageEmbeddingEmbeddings multimodais

Embeddings Esparsos (para Busca Híbrida)

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

Vetores esparsos capturam termos exatos (identificadores, números) que embeddings densos suavizam — a chave para busca híbrida 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."])

Busca Híbrida com 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")
PassoFerramenta
Dense vectorsTextEmbedding
Sparse vectorsSparseTextEmbedding (BM25)
Store + fuseConsulta híbrida nativa Qdrant
Optional rerankTextCrossEncoder

Por que FastEmbed (Design)

PropriedadeBenefício
ONNX RuntimeSem PyTorch; instalação pequena, rápida em CPU
Quantized modelsMemória/latência mais baixas
Lazy generatorsFluxo de embeddings, memória baixa
LocalSem chamadas de API; dados ficam privados

Fluxos de Trabalho Comuns

# 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 Alternativas

AspectoFastEmbedsentence-transformersOpenAI embeddings API
RuntimeONNX (sem torch)PyTorchAPI hospedada
Sparse/ColBERTIntegradoLibs extrasNão
Local/privateSimSimNão
Melhor paraLeve local + híbridoEcossistema torch completoSimplidade gerenciada

Recursos