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

  1. Range: [-1, 1]

    • 1.0 = Idénticos
    • 0.0 = Ortogonales
    • -1.0 = Opuestos
  2. Invariante a escala:

a = [1, 2, 3]
b = [10, 20, 30]  # 10x más grande

cosine_similarity(a, b)  # 1.0 (misma dirección)
  1. 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