Módulo 5: Distance Metrics Deep Dive
Dot Product & Other Metrics
Dot Product
Fórmula:
dot(A, B) = Σ(A_i × B_i)
Key insight: Si embeddings normalizados (||A|| = ||B|| = 1), entonces:
dot(A, B) = cosine_similarity(A, B)
Ventaja: 3x más rápido que cosine (no requiere normalización runtime).
Implementación:
import numpy as np
# Normalizar embeddings (hacer una vez)
a = np.array([3, 4])
a_norm = a / np.linalg.norm(a) # [0.6, 0.8]
b = np.array([4, 3])
b_norm = b / np.linalg.norm(b) # [0.8, 0.6]
# Dot product (rápido)
dot = np.dot(a_norm, b_norm)
print(f"Dot: {dot:.4f}") # 0.96
# Equivalente a cosine
cos = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(f"Cosine: {cos:.4f}") # 0.96 (igual)
Manhattan Distance
Fórmula:
manhattan(A, B) = Σ|A_i - B_i|
Cuándo usar:
- Alta dimensionalidad (curse of dimensionality)
- Más rápido que Euclidean (no requiere sqrt)
def manhattan_distance(a, b):
return np.sum(np.abs(a - b))
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
dist = manhattan_distance(a, b)
print(f"Manhattan: {dist}") # 9
Hamming Distance
Para vectores binarios (0/1):
def hamming_distance(a, b):
return np.sum(a != b)
a = np.array([1, 0, 1, 0])
b = np.array([1, 1, 1, 0])
dist = hamming_distance(a, b)
print(f"Hamming: {dist}") # 1 (1 bit diferente)
Resumen
| Métrica | Velocidad | Cuándo usar |
|---|---|---|
| Dot Product | ⚡ Rápida | Embeddings normalizados |
| Manhattan | ⚡ Rápida | Alta dimensionalidad |
| Hamming | ⚡ Rápida | Vectores binarios |
Módulo 5 - Cápsula 04