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:
El coseno de similitud se define como:
👉 Donde:
- x⋅y = producto escalar
- ∣∣x∣∣, ∣∣y∣∣ = normas (L2)
Rango de valores
| Valor | Significado |
|---|---|
| 1 | Mismos vectores (máxima similitud) |
| 0 | Ortogonales (sin relación) |
| -1 | Opuestos |
Intuición
El coseno de similitud responde a:
👉 “¿Apuntan estos vectores en la misma dirección?”
Ejemplo
👉 Aunque y es más grande, ambos apuntan igual:
Interpretación geométrica
👉 Donde:
- = ángulo entre los vectores
Visualmente
- Ángulo pequeño → alta similitud
- Ángulo 90° → sin relación
- Ángulo 180° → opuestos
Comparación con distancia
| Métrica | Qué mide |
|---|---|
| Euclidiana | Distancia absoluta |
| Manhattan | Diferencia por ejes |
| Coseno | Direcció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:Q⋅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
Producto escalar
Normas
Coseno
👉 Muy similares.
Relación con otros conceptos
- Producto escalar
- Norma (L2)
- Distancia
- Embeddings
- Atención
Ejemplo en Python
# Coseno manualimport mathx = [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 npx = 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 torchimport torch.nn.functional as Fx = 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 torchimport torch.nn.functional as Fquery = 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