Créer des systèmes de recommandation avec la NMF

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Trouver des articles similaires

  • Ingénieur dans un grand quotidien en ligne
  • Tâche : recommander des articles semblables à celui lu par le client
  • Des articles semblables partagent des sujets semblables
Unsupervised Learning in Python

Stratégie

  • Appliquer la NMF à la matrice de fréquences de mots
  • Les valeurs de caractéristiques NMF décrivent les sujets
  • … donc des documents similaires ont des valeurs NMF similaires
  • Comparer ces valeurs NMF ?
Unsupervised Learning in Python

Appliquer la NMF à la matrice de fréquences de mots

  • articles est une matrice de fréquences de mots
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Unsupervised Learning in Python

Stratégie

  • Appliquer la NMF à la matrice de fréquences de mots
  • Les valeurs de caractéristiques NMF décrivent les sujets
  • … donc des documents similaires ont des valeurs NMF similaires
  • Comparer ces valeurs NMF ?
Unsupervised Learning in Python

Versions d'articles

  • Différentes versions d'un même document ont les mêmes proportions de sujets
  • … mais les valeurs exactes peuvent varier !
  •  
  •  

Version forte : Un chien mord un homme ! L'attaque d'un terrible canidé laisse l'homme paralysé…

Unsupervised Learning in Python

Versions d'articles

  • Différentes versions d'un même document ont les mêmes proportions de sujets
  • … mais les valeurs exactes peuvent varier !
  • P. ex., si une version contient beaucoup de mots vides de sens
  •  

Version faible : Vous avez peut-être entendu dire que, malheureusement, il semble qu'un chien aurait possiblement mordu un homme…

Unsupervised Learning in Python

Versions d'articles

  • Différentes versions d'un même document ont les mêmes proportions de sujets
  • … mais les valeurs exactes peuvent varier !
  • P. ex., si une version contient beaucoup de mots vides de sens
  • Mais toutes les versions se trouvent sur la même droite passant par l'origine

Nuage : sujet animaux de compagnie vs sujet danger, versions forte et faible sur la même droite depuis l'origine

Unsupervised Learning in Python

Similarité cosinus

  • Utilise l'angle entre les droites
  • Valeur plus élevée = plus grande similarité
  • Valeur max : 1, quand l'angle est 0 degré

Nuage : document A et document B, avec deux droites distinctes depuis l'origine, à des angles différents

Unsupervised Learning in Python

Calculer les similarités cosinus

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]
Unsupervised Learning in Python

DataFrames et étiquettes

  • Associer les similarités aux titres via un DataFrame
  • Titres fournis comme liste : 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)
Unsupervised Learning in Python

DataFrames et étiquettes

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
Unsupervised Learning in Python

Passons à la pratique !

Unsupervised Learning in Python

Preparing Video For Download...