Empfehlungssysteme mit NMF erstellen

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Ähnliche Artikel finden

  • Ingenieur bei einer großen Online-Zeitung
  • Aufgabe: Artikel vorschlagen, die dem Artikel ähnlich sind, den der Kunde gerade liest.
  • Ähnliche Artikel sollten ähnliche Themen haben.
Unsupervised Learning in Python

Strategie

  • NMF auf das Wortfrequenz-Array anwenden
  • Die NMF-Merkmalswerte beschreiben die Themen.
  • ... also haben ähnliche Dokumente ähnliche NMF-Merkmalswerte.
  • NMF-Merkmalswerte vergleichen?
Unsupervised Learning in Python

NMF auf das Worthäufigkeit-Array anwenden

  • articles ist ein Worthäufigkeit-Array
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Unsupervised Learning in Python

Strategie

  • NMF auf das Worthäufigkeit-Array anwenden
  • Die NMF-Merkmalswerte beschreiben die Themen.
  • ... also haben ähnliche Dokumente ähnliche NMF-Merkmalswerte.
  • NMF-Merkmalswerte vergleichen?
Unsupervised Learning in Python

Versionen von Artikeln

  • Verschiedene Versionen desselben Dokuments haben die gleichen Themenanteile.
  • ... die genauen Werte der Funktionen können abweichen!
  •  
  •  

Starke Version: Hund beißt Mann! Angriff durch schrecklichen Hund lässt Mann gelähmt zurück...

Unsupervised Learning in Python

Versionen von Artikeln

  • Verschiedene Versionen desselben Dokuments weisen die gleichen Themenanteile auf.
  • ... die genauen Werte der Funktionen können abweichen!
  • Z. B.: Eine Version mit vielen bedeutungslosen Wörtern
  •  

Schwache Version: Du hast vielleicht schon gehört, dass leider ein Hund einen Mann gebissen hat...

Unsupervised Learning in Python

Versionen von Artikeln

  • Verschiedene Versionen desselben Dokuments weisen die gleichen Themenanteile auf.
  • ... die genauen Werte der Funktionen können abweichen!
  • Z. B.: Eine Version mit vielen bedeutungslosen Wörtern
  • Alle Versionen auf derselben Geraden durch den Ursprung

Streudiagramm zum Thema Haustiere vs. Thema Gefahr, wobei die starke und die schwache Version auf derselben Linie durch den Ursprung liegen

Unsupervised Learning in Python

Kosinusähnlichkeit

  • Nutzt den Winkel zwischen den Geraden
  • Höhere Werte bedeuten höhere Ähnlichkeit
  • Der höchste Wert ist 1, wenn der Winkel 0 Grad ist.

Streudiagramm von Dokument A und Dokument B, mit zwei separaten Linien, die in unterschiedlichen Winkeln vom Ursprung durch sie hindurch verlaufen

Unsupervised Learning in Python

Berechnung der Kosinusähnlichkeiten

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

DataFrame und Beschriftungen

  • Ähnlichkeiten mit den Artikeltiteln kennzeichnen, mit einem DataFrame
  • Titel als 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

DataFrame und Beschriftungen

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

Lass uns üben!

Unsupervised Learning in Python

Preparing Video For Download...