Módulo 5: Distance Metrics Deep Dive
Cosine Similarity: La Métrica Estándar
Por qué Cosine es estándar
Cosine similarity mide el ángulo entre vectores, no su magnitud. Esto es ideal para embeddings donde la semántica está en la dirección, no en la longitud del vector.
Fórmula:
cos_sim(A, B) = (A · B) / (||A|| × ||B||)
Implementación numpy:
import numpy as np
def cosine_similarity(a, b):
"""Cosine similarity entre 2 vectores"""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# Ejemplo
a = np.array([1, 2, 3])
b = np.array([2, 4, 6])
sim = cosine_similarity(a, b)
print(f"Cosine: {sim:.4f}") # 1.0 (misma dirección)
Propiedades
-
Range: [-1, 1]
- 1.0 = Idénticos
- 0.0 = Ortogonales
- -1.0 = Opuestos
-
Invariante a escala:
a = [1, 2, 3]
b = [10, 20, 30] # 10x más grande
cosine_similarity(a, b) # 1.0 (misma dirección)
- Normalización automática:
# No importa si embeddings tienen magnitudes diferentes
# Cosine solo considera dirección
Batch cosine similarity
from sklearn.metrics.pairwise import cosine_similarity
# Múltiples vectores
X = np.array([[1, 2, 3], [4, 5, 6]])
Y = np.array([[1, 2, 3], [7, 8, 9]])
# Matriz de similarities
sims = cosine_similarity(X, Y)
print(sims)
# [[1.0, 0.96],
# [0.99, 1.0]]
Resumen
- ✅ Estándar para embeddings
- ✅ Invariante a escala
- ✅ Range: [-1, 1]
- ✅ Uso: Semantic search (default)
Módulo 5 - Cápsula 02