Développement de systèmes de recommandation à l'aide de la NMF

Apprentissage non supervisé en Python

Benjamin Wilson

Director of Research at lateral.io

Rechercher des articles similaires

  • Ingénieur dans un grand journal en ligne
  • Tâche : recommander des articles similaires à celui que le client est en train de lire
  • Les articles similaires devraient aborder des sujets similaires
Apprentissage non supervisé en Python

Stratégie

  • Appliquer la NMF au tableau de fréquence des mots
  • Les valeurs caractéristiques NMF décrivent les thèmes
  • … de sorte que des documents similaires ont des valeurs de caractéristiques NMF similaires
  • Comparer les valeurs des caractéristiques NMF ?
Apprentissage non supervisé en Python

Appliquer la NMF au tableau de fréquence des mots

  • articles est un tableau de fréquence des mots
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Apprentissage non supervisé en Python

Stratégie

  • Appliquer la NMF au tableau de fréquence des mots
  • Les valeurs caractéristiques NMF décrivent les thèmes
  • … de sorte que des documents similaires ont des valeurs de caractéristiques NMF similaires
  • Comparer les valeurs des caractéristiques NMF ?
Apprentissage non supervisé en Python

Versions des articles

  • Les différentes versions d'un même document présentent les mêmes proportions thématiques
  • … les valeurs exactes des caractéristiques peuvent varier.
  •  
  •  

Strong version: Dog bites man! Attack by terrible canine leaves man paralyzed...

Apprentissage non supervisé en Python

Versions des articles

  • Les différentes versions d'un même document présentent les mêmes proportions thématiques
  • … les valeurs exactes des caractéristiques peuvent varier.
  • Par exemple, parce qu'une version utilise de nombreux mots dénués de sens
  •  

Weak version: You may have heard, unfortunately it seems that a dog has perhaps bitten a man...

Apprentissage non supervisé en Python

Versions des articles

  • Les différentes versions d'un même document présentent les mêmes proportions thématiques
  • … les valeurs exactes des caractéristiques peuvent varier.
  • Par exemple, parce qu'une version utilise de nombreux mots dénués de sens
  • Cependant, toutes les versions se trouvent sur la même ligne passant par l'origine

Scatter plot of topic pets vs topic danger, with strong and weak version lying on the same line through the origin

Apprentissage non supervisé en Python

Similarité cosinus

  • Utilise l'angle entre les lignes
  • Des valeurs plus élevées indiquent une plus grande similitude
  • La valeur maximale est 1 lorsque l'angle est de 0 degré

Scatter plot of document A and document B, with 2 separate lines going through them at different angles from the origin

Apprentissage non supervisé en Python

Calcul des 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]
Apprentissage non supervisé en Python

DataFrames et étiquettes

  • Similarités entre les étiquettes et les titres des articles, à l'aide d'un DataFrame
  • Titres présentés sous forme de 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)
Apprentissage non supervisé en 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
Apprentissage non supervisé en Python

Passons à la pratique !

Apprentissage non supervisé en Python

Preparing Video For Download...