Coseno de similitud

Midiendo la orientación entre vectores (no su tamaño)

El coseno de similitud es una medida que indica qué tan similares son dos vectores en función del ángulo entre ellos, ignorando su magnitud. Es una de las métricas más utilizadas en machine learning moderno, especialmente en embeddings, NLP y modelos tipo Transformer.

👉 A diferencia de la distancia, el coseno de similitud mide dirección, no tamaño.

Definición corta

El coseno de similitud mide la similitud entre dos vectores calculando el coseno del ángulo entre ellos.

Definición detallada

Dados dos vectores:x,yRnx, y \in \mathbb{R}^n

El coseno de similitud se define como:sim(x,y)=xyxy\text{sim}(x, y) = \frac{x \cdot y}{||x|| \, ||y||}

👉 Donde:

  • xyx \cdot yx⋅y = producto escalar
  • x||x||∣∣x∣∣, y||y||∣∣y∣∣ = normas (L2)

Rango de valores

1sim(x,y)1-1 \leq \text{sim}(x, y) \leq 1

ValorSignificado
1Mismos vectores (máxima similitud)
0Ortogonales (sin relación)
-1Opuestos

Intuición

El coseno de similitud responde a:

👉 “¿Apuntan estos vectores en la misma dirección?”

Ejemplo

x=[1,1],y=[2,2]x = [1, 1], \quad y = [2, 2]

👉 Aunque yyy es más grande, ambos apuntan igual:sim=1\text{sim} = 1

Interpretación geométrica

sim(x,y)=cos(θ)\text{sim}(x, y) = \cos(\theta)

👉 Donde:

  • θ\theta = ángulo entre los vectores

Visualmente

  • Ángulo pequeño → alta similitud
  • Ángulo 90° → sin relación
  • Ángulo 180° → opuestos

Comparación con distancia

MétricaQué mide
EuclidianaDistancia absoluta
ManhattanDiferencia por ejes
CosenoDirección

👉 El coseno es ideal cuando importa la forma del vector, no su escala.

Coseno en redes neuronales

🔹 1. Embeddings

Muy usado en:

  • NLP (palabras, frases)
  • Imágenes
  • Recomendadores

🔹 2. Transformers

El mecanismo de atención usa:QKTQ \cdot K^TQ⋅KT

👉 Luego se normaliza → similar al coseno.

🔹 3. Búsqueda semántica

Encuentra vectores más cercanos en dirección.

🔹 4. Sistemas de recomendación

Usuarios similares → vectores alineados.

Ejemplo paso a paso

x=[1,2]x = [1, 2]y=[2,3]y = [2, 3]

Producto escalar

xy=1×2+2×3=8x \cdot y = 1×2 + 2×3 = 8

Normas

x=5,y=13||x|| = \sqrt{5}, \quad ||y|| = \sqrt{13}

Coseno

85130.99\frac{8}{\sqrt{5} \cdot \sqrt{13}} \approx 0.99

👉 Muy similares.

Relación con otros conceptos

  • Producto escalar
  • Norma (L2)
  • Distancia
  • Embeddings
  • Atención

Ejemplo en Python

# Coseno manual
import math
x = [1, 2]
y = [2, 3]
dot = sum(x[i]*y[i] for i in range(len(x)))
norm_x = math.sqrt(sum(v**2 for v in x))
norm_y = math.sqrt(sum(v**2 for v in y))
cos_sim = dot / (norm_x * norm_y)
print("Coseno de similitud:", cos_sim)

Ejemplo en NumPy

import numpy as np
x = np.array([1, 2])
y = np.array([2, 3])
cos_sim = np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
print("Coseno:", cos_sim)

Ejemplo en PyTorch

import torch
import torch.nn.functional as F
x = torch.tensor([1.0, 2.0])
y = torch.tensor([2.0, 3.0])
cos_sim = F.cosine_similarity(x, y, dim=0)
print("Coseno:", cos_sim.item())

Ejemplo en búsqueda semántica

import torch
import torch.nn.functional as F
query = torch.tensor([0.3, 0.6, 0.1])
doc1 = torch.tensor([0.2, 0.5, 0.3])
doc2 = torch.tensor([0.9, 0.1, 0.0])
sim1 = F.cosine_similarity(query, doc1, dim=0)
sim2 = F.cosine_similarity(query, doc2, dim=0)
print("Doc1:", sim1.item())
print("Doc2:", sim2.item())

Qué muestra este ejemplo

  • Compara vectores por dirección
  • Ignora escala
  • Selecciona el más similar

👉 Base de sistemas modernos de búsqueda.

Errores comunes

No normalizar vectores

Puede distorsionar resultados.

Confundir con distancia

Coseno ≠ distancia.

Usar en datos donde la magnitud importa

No siempre es adecuado.

Conclusión

El coseno de similitud es una herramienta esencial para medir relaciones entre vectores cuando la dirección es más importante que la magnitud. Es clave en embeddings, transformers y sistemas de recomendación.

👉 Entenderlo es entender cómo las máquinas comparan significado.

Related Concepts

  • Producto escalar
  • Norma (L2)
  • Distancia
  • Embeddings
  • Atención