Definición
Un embedding es la representación de un token, palabra, frase, documento, imagen o cualquier dato en forma de vector denso de números reales dentro de un espacio multidimensional. La propiedad clave: en ese espacio, dos elementos semánticamente similares tienen vectores cercanos (medidos por distancia coseno o euclídea), y dos elementos no relacionados están lejos.
Un embedding típico tiene entre 384 y 4096 dimensiones. Cada dimensión por sí sola no significa nada interpretable; el significado emerge del conjunto y de las relaciones entre vectores.
El ejemplo clásico que ilustra el poder de los embeddings: en un buen espacio vectorial,
vector("rey") - vector("hombre") + vector("mujer") ≈ vector("reina")
Esa álgebra entre palabras solo es posible porque el embedding ha capturado relaciones semánticas como dimensiones implícitas del espacio.
Cómo funciona
Los embeddings nacen de redes neuronales entrenadas con objetivos donde predecir contexto bien obliga al modelo a capturar significado:
- Word2Vec (2013): predecir palabras vecinas a partir de la palabra central (Skip-gram) o viceversa (CBOW).
- GloVe: factorización de matriz de coocurrencia palabra-palabra.
- BERT y derivados: predecir tokens enmascarados con contexto bidireccional.
- Embeddings modernos (text-embedding-3, voyage, cohere): entrenados con contrastive learning, optimizando para que pares positivos (texto similar) queden cerca y negativos (texto distinto) lejos.
En la práctica, hoy se usan embeddings preentrenados de APIs especializadas: OpenAI text-embedding-3-large, Voyage AI, Cohere Embed, NomicEmbed, Jina. Le envías texto y te devuelven un vector listo para usar.
Los embeddings de tokens dentro de un LLM son otra cosa: son los vectores iniciales que cada token recibe antes de pasar por el transformer. Estos sí son específicos del modelo y no se exportan separadamente.
Ejemplo práctico
En antonioecheverria.es queremos construir un buscador semántico del diccionario que entienda intención, no palabras exactas. Si el usuario busca "cómo cobrar más rápido a clientes", debería devolver términos como "Capital circulante" o "Cashflow", aunque esas palabras no aparezcan en la query.
Flujo con embeddings:
-
Indexación (una vez):
- Para cada término del diccionario, generamos embedding del título + definición corta + extracto.
- Guardamos en una base vectorial (Pinecone, Weaviate, Qdrant, pgvector).
-
Búsqueda (cada query):
- Tomamos la consulta del usuario.
- Generamos su embedding con el mismo modelo.
- Buscamos los K vectores más cercanos por similitud coseno.
- Devolvemos esos términos.
Resultado: el usuario que busca "cómo cobrar más rápido" recibe "Capital circulante" porque ambos viven en una región similar del espacio semántico, aunque comparten cero palabras literales. Esa es la magia de los embeddings.
En RAG (Retrieval Augmented Generation), los embeddings son la pieza que permite recuperar el contexto relevante antes de pasarlo al LLM.
Para qué se usan
Casos de uso típicos:
- Búsqueda semántica: que entienda "lavar la ropa" cuando indexaste "limpiar prendas".
- RAG: recuperar fragmentos relevantes de documentos para alimentar a un LLM.
- Recomendación: "elementos similares a X" basado en distancia vectorial.
- Clustering: agrupar documentos por similitud sin etiquetas previas.
- Detección de duplicados: encontrar contenido casi idéntico aunque esté reescrito.
- Clasificación zero-shot: comparar embedding de input contra embedding de cada etiqueta candidata.
- Detección de anomalías: outliers en el espacio vectorial.
- Multimodal: CLIP y derivados embeben texto e imagen en el mismo espacio, permitiendo "buscar imágenes por texto".
Dimensión y trade-offs
- Dimensiones bajas (384-768): más rápido, menos memoria, búsqueda más eficiente. Suficiente para casos simples.
- Dimensiones altas (1024-4096): más expresividad, mejor calidad en casos complejos, más caro de almacenar y buscar.
OpenAI text-embedding-3-large devuelve 3072 dims pero permite truncar a dimensiones inferiores sin retrain (Matryoshka embeddings). Pasar de 3072 a 512 dimensiones suele perder solo 3-5% de calidad y mejorar mucho rendimiento.
Distancia: coseno vs euclídea
- Distancia coseno (más usada): mide el ángulo entre vectores. Ignora magnitud. Apta para embeddings textuales donde lo que importa es la dirección.
- Distancia euclídea: mide distancia "física" en el espacio. Sensible a magnitud. Útil en embeddings de imagen o cuando la norma sí importa.
- Dot product: producto escalar. Equivalente a coseno si los vectores están normalizados.
La mayoría de bases vectoriales usan coseno por defecto y funciona bien.
Errores comunes
- Mezclar embeddings de modelos distintos: los vectores de OpenAI text-embedding-3 no son compatibles con los de Cohere. Cada espacio es independiente.
- No normalizar antes de coseno: si la librería no lo hace, normalizar a magnitud 1 da resultados más estables.
- Usar embeddings genéricos para dominios muy específicos: en medicina o derecho, embeddings especializados (BioBERT, LegalBERT) suelen ganar.
- Indexar sin actualización: si el contenido cambia, los embeddings deben regenerarse. Sin pipeline de actualización, la calidad degrada.
- Trocear sin sentido para RAG: si rompes documentos por carácter en lugar de por unidad semántica (párrafo, sección), los embeddings recuperan fragmentos sin contexto.
- Confundir embedding con feature engineering manual: el embedding aprende automáticamente; tú no eliges qué representa cada dimensión.
Bases vectoriales populares
- Pinecone: SaaS, fácil de empezar, buen rendimiento a escala.
- Weaviate: open source, autohospedable, buen ecosistema.
- Qdrant: open source, Rust, rendimiento alto.
- Chroma: muy simple, ideal para prototipos y desarrollo local.
- pgvector: extensión de PostgreSQL. Si ya usas Postgres, suele ser la elección más práctica.
- Milvus: enterprise grade, a gran escala.
Cuándo usar embeddings
Sí, son la herramienta correcta cuando:
- Necesitas búsqueda que entienda intención y sinónimos.
- Vas a construir un sistema RAG.
- Quieres recomendaciones basadas en contenido.
- Tienes muchos documentos y necesitas clustering o duplicados.
No son adecuados cuando:
- La búsqueda exacta por palabra clave es suficiente (un índice invertido va más rápido y más barato).
- Tu volumen es muy bajo (< 100 documentos): no compensa la infraestructura.
- Necesitas respuestas exactas y deterministas (los embeddings dan similitudes, no respuestas).
Referencias
- Word2Vec paper (Mikolov et al., 2013) — el paper que popularizó los embeddings semánticos
- OpenAI · Embeddings guide — guía oficial de OpenAI sobre embeddings y uso práctico
- Massive Text Embedding Benchmark (MTEB) — leaderboard comparativo de modelos de embeddings