Tvorba doporučovacích systémů pomocí NMF

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Hledání podobných článků

  • Pracovník velkého online deníku
  • Úkol: doporučovat články podobné těm, které zákazník čte
  • Podobné články by měly mít podobná témata
Unsupervised Learning in Python

Strategie

  • Použití NMF na pole četností slov
  • Hodnoty příznaků NMF popisují témata
  • ... podobné dokumenty mají podobné hodnoty příznaků NMF
  • Porovnat hodnoty příznaků NMF?
Unsupervised Learning in Python

Použití NMF na pole četností slov

  • articles je pole četností slov
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Unsupervised Learning in Python

Strategie

  • Použití NMF na pole četností slov
  • Hodnoty příznaků NMF popisují témata
  • ... podobné dokumenty mají podobné hodnoty příznaků NMF
  • Porovnat hodnoty příznaků NMF?
Unsupervised Learning in Python

Verze článků

  • Různé verze stejného dokumentu mají stejné proporce témat
  • ... přesné hodnoty příznaků se mohou lišit!
  •  
  •  

Silná verze: Pes pokousal člověka! Útok strašného psa zanechal muže ochrnutého...

Unsupervised Learning in Python

Verze článků

  • Různé verze stejného dokumentu mají stejné proporce témat
  • ... přesné hodnoty příznaků se mohou lišit!
  • Např. protože jedna verze obsahuje mnoho bezvýznamných slov
  •  

Slabá verze: Možná jste slyšeli, zdá se bohužel, že pes snad pokousal člověka...

Unsupervised Learning in Python

Verze článků

  • Různé verze stejného dokumentu mají stejné proporce témat
  • ... přesné hodnoty příznaků se mohou lišit!
  • Např. protože jedna verze obsahuje mnoho bezvýznamných slov
  • Všechny verze leží na stejné přímce procházející počátkem

Bodový graf tématu domácí zvířata vs. tématu nebezpečí, silná i slabá verze leží na stejné přímce procházející počátkem

Unsupervised Learning in Python

Kosinová podobnost

  • Využívá úhel mezi přímkami
  • Vyšší hodnota znamená větší podobnost
  • Maximální hodnota je 1, když je úhel 0 stupňů

Bodový graf dokumentu A a dokumentu B, se dvěma přímkami procházejícími jimi pod různými úhly od počátku

Unsupervised Learning in Python

Výpočet kosinových podobností

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 a popisky

  • Označení podobností názvy článků pomocí DataFrame
  • Názvy jsou zadány jako seznam: 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 a popisky

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

Pojďme si procvičit!

Unsupervised Learning in Python

Preparing Video For Download...