Definición
La similitud coseno mide el parecido entre dos vectores fijándose en el ángulo que forman, no en lo largos que son. Es la operación que hay debajo de casi toda búsqueda semántica.
Devuelve un número entre −1 y 1:
- 1 — apuntan exactamente en la misma dirección: mismo significado.
- 0 — perpendiculares: no tienen nada que ver.
- −1 — direcciones opuestas.
Con embeddings de texto en la práctica casi nunca bajas de 0: los valores útiles se mueven entre 0,2 y 0,95.
Cómo funciona
La fórmula es el producto escalar de los dos vectores dividido por el producto de sus magnitudes. Esa división es toda la gracia: normaliza, y por eso el resultado no depende del tamaño de los vectores.
Por qué importa eso: un texto largo tiende a producir un vector de mayor magnitud que uno corto. Si midieras con distancia euclídea, un párrafo de tres líneas y una frase que dicen exactamente lo mismo saldrían "lejos" solo por la diferencia de longitud. El coseno ignora eso y compara únicamente hacia dónde apuntan, que es lo que representa el significado.
Un atajo práctico que se usa siempre: si normalizas todos los vectores a magnitud 1 al guardarlos —y la mayoría de modelos ya los devuelven así—, la similitud coseno se reduce a un producto escalar. Una multiplicación y una suma por dimensión, sin divisiones ni raíces. Por eso se puede hacer sobre millones de vectores sin despeinarse.
Ejemplo práctico
El buscador semántico del diccionario de esta web funciona exactamente así, y entero dentro del navegador.
En el momento de compilar la web, un script convierte cada uno de los 85 términos en un vector de 384 dimensiones y los guarda en un JSON de unos 250 KB. Ese fichero se descarga con la página.
Cuando escribes una pregunta —"cómo cobrar más rápido"— pasa esto:
- Tu navegador convierte tu frase en un vector de las mismas 384 dimensiones, con el mismo modelo.
- Calcula la similitud coseno de tu vector contra los 85 guardados. Son 85 productos escalares: en un móvil, tiempo despreciable.
- Ordena de mayor a menor y enseña los que pasan de 0,55.
El resultado devuelve capital circulante, cashflow y churn — términos que no contienen ninguna de las palabras que escribiste. Eso es lo que separa la búsqueda semántica de la búsqueda por palabras: no compara letras, compara significados.
Y no hay servidor detrás ni coste por consulta: el cálculo lo hace tu ordenador.
Qué umbral usar
No hay un valor universal, porque depende del modelo de embeddings. Como orientación con modelos actuales:
- > 0,85 — Prácticamente lo mismo. Útil para detectar duplicados.
- 0,65 – 0,85 — Claramente relacionados. La zona buena para resultados de búsqueda.
- 0,45 – 0,65 — Relación temática floja. Puede valer o puede ser ruido.
- < 0,45 — Normalmente ruido.
La única forma seria de fijarlo: coge treinta consultas reales, mira qué puntuación sacan los resultados que tú consideras buenos y los que consideras malos, y pon el corte donde se separan. Media hora de trabajo que evita meses de resultados regulares.
Errores comunes
- Comparar vectores de modelos distintos. Dos modelos crean espacios distintos. Un vector de uno y otro del otro dan un número sin ningún sentido. Si cambias de modelo de embeddings, hay que reindexarlo todo.
- Interpretar el número como un porcentaje de parecido. Un 0,8 no es "80 % igual". Es una escala relativa, útil para ordenar, no para traducir a lenguaje humano.
- No normalizar y luego usar producto escalar. Si tus vectores no tienen magnitud 1, el atajo deja de ser equivalente y los resultados se sesgan hacia los textos largos.
- Fiarlo todo al coseno. Es un buen primer filtro, no un juez. Para precisión de verdad hace falta reranking.
- Usarlo con textos muy cortos. Con dos o tres palabras el embedding es inestable y las similitudes se vuelven caprichosas.
Cuándo usarla
Siempre que compares embeddings: buscar en documentación, recomendar contenido relacionado, agrupar textos parecidos, detectar duplicados. Es el estándar de hecho y las bases vectoriales están optimizadas para ella.
Las alternativas —distancia euclídea, producto escalar sin normalizar— tienen usos concretos, pero si no tienes un motivo claro para apartarte, el coseno es la respuesta correcta.