Crear sistemas de recomendación con NMF

Aprendizaje no supervisado en Python

Benjamin Wilson

Director of Research at lateral.io

Encontrar artículos similares

  • Eres ingeniero en un gran diario online
  • Tarea: recomendar artículos similares al que lee el usuario
  • Artículos similares deben compartir temas
Aprendizaje no supervisado en Python

Estrategia

  • Aplica NMF al array de frecuencias de palabras
  • Las features de NMF describen los temas
  • ... así, documentos similares tienen features NMF similares
  • ¿Comparamos las features de NMF?
Aprendizaje no supervisado en Python

Aplicar NMF al array de frecuencias de palabras

  • articles es un array de frecuencias de palabras
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Aprendizaje no supervisado en Python

Estrategia

  • Aplica NMF al array de frecuencias de palabras
  • Las features de NMF describen los temas
  • ... así, documentos similares tienen features NMF similares
  • ¿Comparar las features de NMF?
Aprendizaje no supervisado en Python

Versiones de artículos

  • Distintas versiones del mismo documento tienen las mismas proporciones de temas
  • ... pero los valores exactos de las features pueden variar
  •  
  •  

Versión fuerte: ¡Perro muerde a hombre! El ataque de un can terrible deja al hombre paralizado...

Aprendizaje no supervisado en Python

Versiones de artículos

  • Distintas versiones del mismo documento tienen las mismas proporciones de temas
  • ... pero los valores exactos de las features pueden variar
  • P. ej., si una versión usa muchas palabras sin sentido
  •  

Versión débil: Puede que hayas oído, por desgracia parece que un perro quizá mordió a un hombre...

Aprendizaje no supervisado en Python

Versiones de artículos

  • Distintas versiones del mismo documento tienen las mismas proporciones de temas
  • ... pero los valores exactos de las features pueden variar
  • P. ej., si una versión usa muchas palabras sin sentido
  • Pero todas las versiones caen en la misma recta desde el origen

Diagrama de dispersión: tema mascotas vs tema peligro, con versiones fuerte y débil en la misma recta desde el origen

Aprendizaje no supervisado en Python

Similitud coseno

  • Usa el ángulo entre las rectas
  • Valores más altos = más similitud
  • Máximo 1 cuando el ángulo es 0°

Diagrama de dispersión de documento A y documento B, con 2 rectas distintas desde el origen

Aprendizaje no supervisado en Python

Calcular similitudes coseno

from sklearn.preprocessing import normalize

norm_features = normalize(nmf_features)
# if has index 23 current_article = norm_features[23,:] similarities = norm_features.dot(current_article)
print(similarities)
[ 0.7150569   0.26349967 ..., 0.20323616  0.05047817]
Aprendizaje no supervisado en Python

DataFrames y etiquetas

  • Etiqueta las similitudes con los títulos usando un DataFrame
  • Títulos dados como lista: titles
import pandas as pd

norm_features = normalize(nmf_features)
df = pd.DataFrame(norm_features, index=titles)
current_article = df.loc['Dog bites man']
similarities = df.dot(current_article)
Aprendizaje no supervisado en Python

DataFrames y etiquetas

print(similarities.nlargest())
Dog bites man                            1.000000
Hound mauls cat                          0.979946
Pets go wild!                            0.979708
Dachshunds are dangerous                 0.949641
Our streets are no longer safe           0.900474
dtype: float64
Aprendizaje no supervisado en Python

¡Vamos a practicar!

Aprendizaje no supervisado en Python

Preparing Video For Download...