Resumen

La similitud entre vectores es clave en machine learning: desde sistemas de recomendación hasta búsqueda semántica y modelos de lenguaje. Aquí verás cómo el producto punto y la similitud coseno explican si dos vectores “apuntan” en la misma dirección, cómo implementarlo en NumPy y cómo aplicarlo con vectores de palabras preentrenados.

¿Por qué el producto punto mide similitud en machine learning?

El producto punto captura la alineación entre dos vectores: si representan gustos y una película, un valor alto implica mayor afinidad. En recomendación, un score alto entre tu perfil y una serie significa mejor sugerencia. En búsqueda semántica, mide relevancia de significado, no coincidencia exacta de palabras. En modelos de lenguaje, interviene en la atención para decidir qué palabras ponderar más al generar la siguiente.

¿Qué exige el shape de los vectores?

  • Los vectores deben tener el mismo número de componentes.
  • Verifica siempre el shape antes de calcular el producto punto.

¿Por qué coseno y no seno para la similitud?

  • Cos(0°) = 1: máxima similitud cuando están perfectamente alineados.
  • Cos(90°) = 0: indica ortogonalidad (sin relación lineal).
  • Cos(180°) = −1: máxima oposición, nada de similitud.
  • El seno daría 0 tanto a 0° como a 180° y su máximo en 90°, lo que no refleja la intuición de similitud.

¿Cómo calcular producto punto y similitud coseno en NumPy?

Primero, crea dos vectores y calcula el producto punto con NumPy. Hay dos formas: usando np.dot o el operador @.

import numpy as np

U = np.array([2, 3])
V = np.array([4, 1])

producto_punto_np = np.dot(U, V)
producto_punto_at = U @ V

print(f"resultado con np.dot: {producto_punto_np}")
print(f"producto punto con operador @: {producto_punto_at}")
# Ambos imprimen 11

Luego, estandariza con similitud coseno: producto punto normalizado por las normas (magnitudes). El resultado siempre está en [−1, 1].

def similitud_coseno(v1, v2):
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

¿Qué significa el valor del producto punto?

  • Por sí solo, depende de la magnitud de los vectores.
  • Estandariza con similitud coseno para comparar en una escala común.
  • Valores cercanos a 1: muy similares. Cercanos a 0: no relacionados. Cercanos a −1: opuestos.

¿Qué habilidades y conceptos refuerzas aquí?

  • Uso de NumPy para operaciones vectoriales: np.array, np.dot, @, np.linalg.norm.
  • Comprensión de norma, producto punto, ángulo theta y ortogonalidad.
  • Interpretación práctica del score de afinidad y la relevancia semántica.

¿Cómo aplicar similitud coseno con vectores de palabras preentrenados?

Se emplea Gensim para descargar vectores de palabras y medir similitud semántica. El enfoque se limita a usar un modelo preentrenado para comparar palabras a través de sus vectores.

# En Google Colab
!pip install gensim

import gensim.downloader as api
print("descargando modelo de vectores de palabras...")
word_vectors = api.load("globe-wiki-gigaword-50")
print("modelo cargado")

Crea variables con vectores de palabras y calcula la similitud coseno.

rey = word_vectors['king']
hombre = word_vectors['man']
reina = word_vectors['queen']
gato = word_vectors['cat']

sim_rey_hombre = similitud_coseno(rey, hombre)
sim_rey_reina = similitud_coseno(rey, reina)
sim_rey_gato = similitud_coseno(rey, gato)

print(f"similitud rey-hombre: {sim_rey_hombre:.2f}")
print(f"similitud rey-reina: {sim_rey_reina:.2f}")
print(f"similitud rey-gato: {sim_rey_gato:.2f}")

¿Qué observas en los resultados?

  • rey–reina y rey–hombre: similitud relativamente alta.
  • rey–gato: similitud baja, tiene sentido semántico.
  • La métrica funciona porque compara direcciones, no solo magnitudes.

¿Qué práctica puedes realizar ahora?

  • Define vectores de 3 componentes para tus intereses: tecnología, arte, deportes.
  • Crea un vector para un amigo o familiar en el mismo orden.
  • Calcula la similitud coseno y responde: ¿qué tan alineados están sus intereses?.

¿Listo para probar con tus propios gustos o palabras? Comparte tus resultados y cuéntanos qué pares te dieron mayor y menor similitud. Además, ¿qué ideas te surgen sobre ortogonalidad y sistemas de coordenadas con vectores ortogonales?