Aanbevelingssystemen bouwen met NMF

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Vergelijkbare artikelen vinden

  • Engineer bij een grote online krant
  • Taak: artikelen aanbevelen die lijken op wat de klant leest
  • Vergelijkbare artikelen hebben vergelijkbare topics
Unsupervised Learning in Python

Strategie

  • Pas NMF toe op de woordfrequentiematrix
  • NMF-featurewaarden beschrijven de topics
  • ... dus vergelijkbare documenten hebben vergelijkbare NMF-featurewaarden
  • NMF-featurewaarden vergelijken?
Unsupervised Learning in Python

Pas NMF toe op de woordfrequentiematrix

  • articles is een woordfrequentiematrix
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Unsupervised Learning in Python

Strategie

  • Pas NMF toe op de woordfrequentiematrix
  • NMF-featurewaarden beschrijven de topics
  • ... dus vergelijkbare documenten hebben vergelijkbare NMF-featurewaarden
  • NMF-featurewaarden vergelijken?
Unsupervised Learning in Python

Versies van artikelen

  • Verschillende versies van hetzelfde document hebben dezelfde topicverhoudingen
  • ... maar exacte featurewaarden kunnen verschillen!
  •  
  •  

Sterke versie: Dog bites man! Attack by terrible canine leaves man paralyzed...

Unsupervised Learning in Python

Versies van artikelen

  • Verschillende versies van hetzelfde document hebben dezelfde topicverhoudingen
  • ... maar exacte featurewaarden kunnen verschillen!
  • Bijv. als één versie veel nietszeggende woorden gebruikt
  •  

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

Unsupervised Learning in Python

Versies van artikelen

  • Verschillende versies van hetzelfde document hebben dezelfde topicverhoudingen
  • ... maar exacte featurewaarden kunnen verschillen!
  • Bijv. als één versie veel nietszeggende woorden gebruikt
  • Maar alle versies liggen op dezelfde lijn door de oorsprong

Spreidingsdiagram van topic huisdieren vs. topic gevaar, met sterke en zwakke versie op dezelfde lijn door de oorsprong

Unsupervised Learning in Python

Cosinusovereenkomst

  • Gebruikt de hoek tussen de lijnen
  • Hogere waarden = meer vergelijkbaar
  • Maximale waarde is 1, bij hoek 0 graden

Spreidingsdiagram van document A en document B, met 2 aparte lijnen die erdoor lopen onder verschillende hoeken vanaf de oorsprong

Unsupervised Learning in Python

Cosinusovereenkomsten berekenen

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 en labels

  • Label overeenkomsten met artikeltitels via een DataFrame
  • Titels als lijst: 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 en labels

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

Laten we oefenen!

Unsupervised Learning in Python

Preparing Video For Download...