Bygga rekommendationssystem med NMF

Oövervakad inlärning i Python

Benjamin Wilson

Director of Research at lateral.io

Hitta liknande artiklar

  • Ingenjör på en stor nättidning
  • Uppgift: rekommendera artiklar liknande den kunden läser
  • Liknande artiklar bör ha liknande ämnen
Oövervakad inlärning i Python

Strategi

  • Tillämpa NMF på ordfrekvensmatrisen
  • NMF-särdragsvärden beskriver ämnena
  • ... liknande dokument har liknande NMF-särdragsvärden
  • Jämför NMF-särdragsvärden?
Oövervakad inlärning i Python

Tillämpa NMF på ordfrekvensmatrisen

  • articles är en ordfrekvensmatris
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Oövervakad inlärning i Python

Strategi

  • Tillämpa NMF på ordfrekvensmatrisen
  • NMF-särdragsvärden beskriver ämnena
  • ... liknande dokument har liknande NMF-särdragsvärden
  • Jämför NMF-särdragsvärden?
Oövervakad inlärning i Python

Versioner av artiklar

  • Olika versioner av samma dokument har samma ämnesproportion
  • ... men de exakta särdragsvärdena kan skilja sig!
  •  
  •  

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

Oövervakad inlärning i Python

Versioner av artiklar

  • Olika versioner av samma dokument har samma ämnesproportion
  • ... men de exakta särdragsvärdena kan skilja sig!
  • T.ex. för att en version innehåller många meningslösa ord
  •  

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

Oövervakad inlärning i Python

Versioner av artiklar

  • Olika versioner av samma dokument har samma ämnesproportion
  • ... men de exakta särdragsvärdena kan skilja sig!
  • T.ex. för att en version innehåller många meningslösa ord
  • Men alla versioner ligger på samma linje genom origo

Spridningsdiagram över ämnet husdjur kontra ämnet fara, där stark och svag version ligger på samma linje genom origo

Oövervakad inlärning i Python

Cosinuslikhet

  • Använder vinkeln mellan linjerna
  • Högre värde innebär större likhet
  • Maxvärdet är 1, när vinkeln är 0 grader

Spridningsdiagram med dokument A och dokument B, med två separata linjer från origo i olika vinklar

Oövervakad inlärning i Python

Beräkna cosinuslikheter

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]
Oövervakad inlärning i Python

DataFrames och etiketter

  • Märk upp likheterna med artikeltitlar i en DataFrame
  • Titlar anges som en 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)
Oövervakad inlärning i Python

DataFrames och etiketter

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
Oövervakad inlärning i Python

Nu kör vi en övning!

Oövervakad inlärning i Python

Preparing Video For Download...