Embeddings
Los embeddings mapean el texto a un espacio donde la distancia se vuelve semántica: 'perro' y 'mascota' quedan cerca, 'perro' y 'satélite' quedan lejos. Es el motor de la búsqueda por similitud del RAG.
Qué es
Un embedding es un vector denso de números reales (típicamente entre 300 y 3072) que representa un fragmento de texto. La propiedad útil es geométrica: dos textos con significado parecido quedan a poca distancia en el espacio, y dos textos sin relación quedan lejos. La 'distancia' se mide por coseno, producto interno o euclidiana.
El vector lo genera un modelo entrenado con pares de texto (original y traducción, pregunta y respuesta, o títulos parecidos). Después del entrenamiento, el modelo aprendió a colocar palabras y frases cerca de palabras similares y lejos de otras. No hay una regla simbólica. El arreglo es puramente estadístico.
Modelos y dimensiones
Tres familias dominan. Los modelos de uso general, como text-embedding-3-small de OpenAI o embed-multilingual-v3 de Cohere, devuelven vectores de 384 a 3072 y funcionan razonablemente bien en cualquier dominio. Los modelos ajustados por dominio (jurídico, biomédico, código) ganan precisión cuando el corpus es técnico, y la pierden cuando salen de él. Los modelos locales vía sentence-transformers corren sin llamada externa, cuestan más CPU y son útiles cuando el dato no puede salir de la infraestructura.
Más dimensiones cuestan más almacenamiento, más memoria y más tiempo de búsqueda. Para un corpus pequeño, 384 dimensiones son suficientes; para un millón de documentos, conviene medir si la ganancia de subir a 1024 cubre el costo.
Similitud en la práctica
La mide el ángulo entre dos vectores e ignora la magnitud, así que dos textos largos y dos cortos pueden tener el mismo valor de similitud por contenido. La fórmula es la del producto interno dividido por la norma de cada vector.
type Vec = number[];
export function dot(a: Vec, b: Vec): number {
let s = 0;
for (let i = 0; i < a.length; i++) s += a[i] * b[i];
return s;
}
export function norm(a: Vec): number {
return Math.sqrt(dot(a, a));
}
export function cosine(a: Vec, b: Vec): number {
const denom = norm(a) * norm(b);
if (denom === 0) return 0;
return dot(a, b) / denom;
}
// uso
const doc: Vec = await embedder.embed("rag combina búsqueda y generación");
const query: Vec = await embedder.embed("¿cómo funciona rag?");
const score = cosine(doc, query);
console.log(score.toFixed(3));Eligiendo el modelo
Cuatro preguntas determinan la elección. Primera: ¿el dominio es general o técnico? Un modelo multilingüe ayuda en PT-BR; un modelo de código ayuda en bases de código. Segunda: ¿necesita correr offline o puede llamar a una API? Offline obliga a usar sentence-transformers o BGE local. Tercera: ¿cuál es el presupuesto de almacenamiento? Vectores de 3072 dimensiones para 10 millones de documentos son 120 GB solo de embeddings. Cuarta: ¿necesita consistencia semántica a lo largo del tiempo? Cambiar el modelo de embedding después de indexar obliga a reindexar todo.
La regla que evita más arrepentimientos: define el modelo antes de indexar y congela esa decisión. La reindexación es cara, y alternar entre modelos a mitad del proyecto degrada la calidad del retrieval sin aviso.
Puntos fuertes
- comprensión semántica aproximada sin reglas: frases distintas con el mismo sentido quedan cerca, sin necesidad de sinónimos hardcodeados
- modelos listos de calidad: open weights (BGE, E5, mE5) y APIs administradas cubren la mayoría de los casos sin entrenamiento
- costo bajo por llamada: los embeddings son típicamente órdenes de magnitud más baratos que la generación del LLM
Limitaciones
- ceguera léxica: 'lechuga' y 'verdura' quedan cerca, pero 'lechuga' y 'Lechuga S.A.' (empresa) también, y el retrieval no sabe distinguirlas
- modelo desactualizado: el modelo vio datos hasta la fecha del entrenamiento; los términos nuevos no tienen buena posición en el espacio
- sin garantía de alineación entre idiomas: los modelos multilingües aproximan, pero las traducciones literales salen adelante de las paráfrasis
- costo de cambiar: cambiar el modelo de embedding es una reindexación completa, así que la decisión inicial pesa
conexiones en el mapa
actualizado el 14/10/2026 · fuentes para profundizar · reportar un error
Estudia antes
Desbloquea
pon a prueba lo que entendiste
Cargando preguntas…