Ir al contenido

FastEmbed - Incrustaciones ligeras locales

FastEmbed - Incrustaciones ligeras locales

FastEmbed (de Qdrant) es una biblioteca rápida y ligera para generar incrustaciones de texto localmente. Ejecuta modelos a través de ONNX Runtime (sin dependencia pesada de PyTorch), lo que lo hace pequeño, rápido de instalar y eficiente en CPU. Más allá de incrustaciones densas, admite disperso (BM25, SPLADE), interacción tardía (ColBERT) y modelos de reranking — todo lo que necesitas para construir búsqueda densa+dispersa híbrida para RAG. Se integra estrechamente con la base de datos de vectores de Qdrant.

Instalación

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

Incrustaciones densas

from fastembed import TextEmbedding

model = TextEmbedding("BAAI/bge-small-en-v1.5")   # descarga una vez
docs = ["FastEmbed runs on ONNX.", "It is CPU-friendly."]
vectors = list(model.embed(docs))   # generador de arrays numpy
print(len(vectors), vectors[0].shape)
LlamadaDescripción
TextEmbedding(model_name)Carga un modelo de incrustación densa
.embed(list)Incrusta documentos (lote, perezoso)
.query_embed(str)Incrusta una consulta (algunos modelos difieren q/d)
.passage_embed(list)Incrusta pasajes
TextEmbedding.list_supported_models()Ver modelos disponibles

Tipos de modelo

TipoClaseUsar
DensaTextEmbeddingSimilitud semántica
Disperso (BM25/SPLADE)SparseTextEmbeddingCoincidencia de palabra clave/término exacto
Interacción tardía (ColBERT)LateInteractionTextEmbeddingRecuperación de reranking de precisión alta
RerankingTextCrossEncoderReordena candidatos
ImagenImageEmbeddingIncrustaciones multimodales

Incrustaciones dispersas (para búsqueda 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)   # disperso: índices de token + pesos

Los vectores dispersos capturan términos exactos (identificadores, números) que las incrustaciones densas suavizan — la clave para una búsqueda híbrida fuerte.

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

Búsqueda híbrida con Qdrant

from fastembed import TextEmbedding, SparseTextEmbedding
# Calcula vectores densos y dispersos para cada fragmento, upsert a Qdrant,
# luego consulta con ambos y deja que Qdrant funda (RRF) los resultados.
dense = TextEmbedding("BAAI/bge-small-en-v1.5")
sparse = SparseTextEmbedding("Qdrant/bm25")
PasoHerramienta
Vectores densosTextEmbedding
Vectores dispersosSparseTextEmbedding (BM25)
Almacena + fundeConsulta híbrida nativa de Qdrant
Reranking opcionalTextCrossEncoder

Por qué FastEmbed (Diseño)

PropiedadBeneficio
ONNX RuntimeSin PyTorch; instalación pequeña, rápida en CPU
Modelos cuantizadosMemoria/latencia inferior
Generadores perezososIncrusta streams, baja memoria
LocalSin llamadas API; los datos permanecen privados

Flujos de trabajo comunes

# Incrusta lote un corpus para una base de datos de vectores (amigable con CPU)
from fastembed import TextEmbedding
model = TextEmbedding("BAAI/bge-base-en-v1.5")
embeddings = list(model.embed(corpus, batch_size=64))

# Construir recuperación híbrida: densa + BM25 dispersa, fusionada en Qdrant

FastEmbed vs alternativas

AspectoFastEmbedsentence-transformersOpenAI embeddings API
RuntimeONNX (sin torch)PyTorchAPI alojada
Disperso/ColBERTIncorporadoLibrerías extraNo
Local/privadoNo
Mejor paraLigero local + híbridoEcosistema torch completoSimplicidad gestionada

Recursos