Producto punto: cómo mide similitud la IA
Clase 7 de 16 • Curso de Álgebra Lineal para Machine Learning
Contenido del curso
Clase 7 de 16 • Curso de Álgebra Lineal para Machine Learning
Contenido del curso
Pablo Joaquín Cruz
Daniel Erazo
Darlinson Felipe Polania Camacho
Victor Nuñez
Daniel Erazo
Valentina Millaray Ponce Arce
William Alexander Bejarano Pinilla
Harold Baigorria
Daniel Erazo
José Eder Guzmán Mendoza
Daniela Estupiñan
Daniel Erazo
Alex Xiomar Rubio Lopez
Alex Moreno
NESTOR IVAN RONCANCIO CABALLERO
Juan Pablo Marin Jimenez
Jhon Alexander García Sierra
Roberto Fernández Vega
Daniel Erazo
Gabriel Obregón
Johan L
Daniel Erazo
Alberto Ezequiel Marin Chacon
Daniel Erazo
Darlinson Felipe Polania Camacho
Por curiosidad quise ver qué tenían los vectores dentro y me encontré con esto:
Cada vector de esta librería tiene 50 componentes, o sea que cada palabra se evalúa en 50 dimensiones. Una locura.
Sí una locura, imposible de visualizar para un ser humano, por surte tenemos el PCA!
Parece que en tecnología, arte, deportes, son muy similares a el, ya que tiene alto puntaje de similitud 0.9
Tuve un problema al instalar gensim ya que estoy utilizando un entorno montado con uv, si para alguno de ustedes es el caso gensim necesita Python 3.13.4 para funcionar no es compatible todavia con Python 3.14, para esto pueden utilizar el siguiente comando al momento de inicializar el entorno virtual con uv:
uv venv --python 3.13.4
luego pueden usar ya este comando para instalar gensim:
uv add gensim
Muchas gracias por el aporte! 🙌🏼
Un resultado negativo en la similitud coseno (que puede llegar hasta -1) indica una oposición diametral en el espacio vectorial. No significa que los conceptos no tengan relación, sino que están relacionados de forma inversamente proporcional. Imagina una brújula: si un vector apunta al Norte exacto, un vector con similitud de -1 apuntará al Sur exacto.
En la práctica, si estás analizando sentimientos en textos y la frase 'Amo este producto' tiene un vector específico, la frase 'Odio este producto' probablemente tendrá un vector que apunte en la dirección opuesta, generando un producto punto negativo. Para un algoritmo, este -1 es información valiosísima. Le dice al sistema de recomendación: 'Bajo ninguna circunstancia le muestres este contenido a este usuario, porque representa exactamente lo contrario a lo que le gusta'. Es una señal fuerte de rechazo o contraste semántico.
Dato interesante:
le agregue el ejemplo el vector mujer para determinar mejor los resultados y como consecuencia el logaritmo aprende de la familiaridad y las sugerencias de las palabras son obtenidas en funcion del valor mas cercano a 1
Muy buen aporte!
El producto punto es una operación fundamental en machine learning para medir la similitud entre vectores. Si dos vectores apuntan en direcciones similares, su producto punto será alto, lo que indica mayor afinidad entre los elementos que representan (por ejemplo, el perfil de gustos de un usuario y una película). Sin embargo, para comparar vectores de forma más consistente se utiliza la similitud coseno, que normaliza el producto punto por la magnitud de los vectores y produce valores entre −1 y 1: valores cercanos a 1 indican alta similitud, 0 indica poca relación y −1 indica oposición.
Con NumPy, estas operaciones se implementan fácilmente mediante funciones como np.dot, el operador @ y np.linalg.norm. Esta técnica se aplica en múltiples sistemas de IA, como recomendadores, búsqueda semántica y modelos de lenguaje, donde se comparan vectores que representan usuarios, documentos o palabras. Por ejemplo, utilizando vectores de palabras preentrenados se puede observar que términos como “rey” y “reina” presentan alta similitud, mientras que “rey” y “gato” muestran una relación mucho menor, reflejando su diferencia semántica.
Excelente aporte! 😁
Reto: Midiendo la similitud en tecnología, arte y deportes con un amigo o familiar
Yo = np.array([9,1,9]) Amigo = np.array([4,1,9]) similitud = similitud_cos(Yo,Amigo) print(f"Similitud entre Yo y Amigo: {similitud:.2f}")
Similitud entre Yo y Amigo: 0.93
A la hora de ejecutar el código siguiente:
import gensim.downloader as api print("descargando modelo de vectores de palabras...") word_vectors = api.load("wiki-gigaword-50") print("modelo cargado")
Me apareció un error ("Incorrect model/corpus name"). Es decir, el modelo no estaba siendo encontrado. Para corregirlo, propongo ejecutar las siguientes líneas previamente:
import gensim.downloader as api info = api.info() # diccionario con modelos y datasets disponibles print([k for k in info["models"].keys() if "glove-wiki-gigaword" in k])
De esta manera, tendremos un diccionario con los nombres reales para cargar. En este caso, el código fallaba que el nombre que introduje era "globe-wiki-gigaword-50", pero el nombre correcto era "glove-wiki-gigaword-50":
import gensim.downloader as api print("descargando modelo de vectores de palabras...") word_vectors = api.load("glove-wiki-gigaword-50") print("modelo cargado")
Espero que esto les sirva!
Muchas gracias por el aporte!
📌Similitud entre vectores en Machine Learning
➡️ Producto punto
¿Qué mide? La alineación entre dos vectores (si “apuntan” en la misma dirección).
Interpretación práctica:
👉 Valor alto = mayor afinidad entre vectores.
📐 Requisitos de los vectores (shape)
Antes de calcular el producto punto:
❌ Si no coinciden → no es válido el cálculo.
🔄 ¿Por qué similitud coseno?
La similitud coseno depende del ángulo entre los vectores, no de su tamaño.
Valores clave:
🚫 ¿Por qué no seno?
🧮 Producto punto en NumPy
Calcular el producto punto en NumPy: Dos formas equivalentes:
import numpy as np
U = np.array([2, 3])
V = np.array([4, 1])
np.dot(U, V) # o también U @ V
✅ Ambos devuelven: 11
📏 Similitud coseno en NumPy
La similitud coseno se obtiene normalizando el producto punto con las magnitudes de los vectores.
Fórmula:
def similitud_coseno(v1, v2):
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
🔢 Resultado entre −1 y 1
🔄 Compara vectores en una escala común.
intereses_yo = np.array([10, 8, 9]) intereses_amigo = np.array([5, 10, 7]) similitud_yo_amigo = similitud_coseno(intereses_yo, intereses_amigo) print(f"Similitud entre intereses: {similitud_yo_amigo:.2f}")
Resultado: Similitud entre intereses: 0.93
Sus intereses están muy bien alineados!
Sus intereses están muy bien alineados, me pregunto qué significarán esos vectores 🤔
Toca delimitarlos para interpretarlos