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étricaVelocidadCuándo usar
Dot Product⚡ RápidaEmbeddings normalizados
Manhattan⚡ RápidaAlta dimensionalidad
Hamming⚡ RápidaVectores binarios

Módulo 5 - Cápsula 04