まとめ
- La similitud coseno mide la cercanía entre vectores a través del ángulo que forman.
- Calcula similitud/distancia coseno en Python para embeddings o vectores TF-IDF dispersos.
- Revisa aspectos prácticos como normalización y el tratamiento de vectores nulos.
1. Definición e intuición #
Para \(\mathbf{a}, \mathbf{b}\):
$$ \cos(\theta) = \frac{\mathbf{a} \cdot \mathbf{b}}{|\mathbf{a}| , |\mathbf{b}|} $$
- Cercano a 1: apuntan en la misma dirección (alta similitud).
- Cerca de 0: ortogonales (sin relación).
- Cercano a –1: direcciones opuestas.
- Como distancia: \(d = 1 - \cos(\theta)\).
Al normalizar la magnitud, el coseno se centra en la dirección del vector.
2. Ejemplo en Python #
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, cosine_distances
embeddings = np.array(
[
[0.1, 0.4, 0.5],
[0.2, 0.2, 0.6],
[0.6, 0.3, 0.1],
]
)
sim_matrix = cosine_similarity(embeddings)
dist_matrix = cosine_distances(embeddings)
print(sim_matrix.round(3))
print(dist_matrix.round(3))
Para un par de vectores usa scipy.spatial.distance.cosine. Las matrices dispersas funcionan bien con la similitud coseno en scikit-learn.
3. Características clave #
- Invariante a la escala: ideal para TF-IDF o embeddings con magnitudes distintas.
- Apto para datos dispersos: se mantiene estable aunque la mayoría de entradas sean cero.
- Valores negativos: interpreta con cuidado; puede requerir centrado o normalización.
4. Aplicaciones #
- Búsqueda y recomendación: rankear ítems según similitud coseno con una consulta o perfil.
- Clustering temático: usar distancia coseno en k-means (o spherical k-means) para agrupar textos.
- Evaluación de embeddings: comparar distribuciones de similitud para pares positivos/negativos.
5. Notas prácticas #
- La similitud coseno no está definida para vectores nulos; elimínalos o añade un epsilon.
- La distancia coseno no siempre cumple la desigualdad triangular; verifica los requisitos del algoritmo posterior.
- Combínala con estandarización o reducción de dimensión cuando las orientaciones sean sensibles a la escala.
La similitud coseno es una métrica sencilla pero potente para comparar direcciones; cuida los vectores nulos y las asunciones métricas al integrarla en tu pipeline.