Construirea sistemelor de recomandare folosind NMF

Învățare nesupervizată în Python

Benjamin Wilson

Director of Research at lateral.io

Găsirea articolelor similare

  • Inginer la un ziar online de mari dimensiuni
  • Sarcină: recomandarea articolelor similare cu cel citit de utilizator
  • Articolele similare ar trebui să aibă subiecte similare
Învățare nesupervizată în Python

Strategie

  • Aplicați NMF asupra matricei de frecvențe ale cuvintelor
  • Valorile caracteristicilor NMF descriu subiectele
  • ... deci documentele similare au valori NMF similare
  • Comparați valorile caracteristicilor NMF?
Învățare nesupervizată în Python

Aplicarea NMF asupra matricei de frecvențe

  • articles este o matrice de frecvențe ale cuvintelor
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Învățare nesupervizată în Python

Strategie

  • Aplicați NMF asupra matricei de frecvențe ale cuvintelor
  • Valorile caracteristicilor NMF descriu subiectele
  • ... deci documentele similare au valori NMF similare
  • Comparați valorile caracteristicilor NMF?
Învățare nesupervizată în Python

Versiuni ale articolelor

  • Versiunile aceluiași document au aceleași proporții de subiecte
  • ... valorile exacte ale caracteristicilor pot fi diferite!
  •  
  •  

Versiune puternică: Câine mușcă om! Atacul unui câine teribil lasă un om paralizat...

Învățare nesupervizată în Python

Versiuni ale articolelor

  • Versiunile aceluiași document au aceleași proporții de subiecte
  • ... valorile exacte ale caracteristicilor pot fi diferite!
  • De ex. deoarece o versiune conține multe cuvinte fără sens
  •  

Versiune slabă: Poate ați auzit, din păcate se pare că un câine a mușcat poate un om...

Învățare nesupervizată în Python

Versiuni ale articolelor

  • Versiunile aceluiași document au aceleași proporții de subiecte
  • ... valorile exacte ale caracteristicilor pot fi diferite!
  • De ex. deoarece o versiune conține multe cuvinte fără sens
  • Dar toate versiunile se află pe aceeași dreaptă prin origine

Grafic de dispersie pentru subiectul animale de companie vs. subiectul pericol, cu versiunile puternică și slabă pe aceeași dreaptă prin origine

Învățare nesupervizată în Python

Similaritatea cosinus

  • Folosește unghiul dintre drepte
  • Valori mai mari înseamnă similaritate mai mare
  • Valoarea maximă este 1, când unghiul este 0 grade

Grafic de dispersie cu documentul A și documentul B, cu două drepte separate care trec prin ele la unghiuri diferite față de origine

Învățare nesupervizată în Python

Calcularea similarităților 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]
Învățare nesupervizată în Python

DataFrame-uri și etichete

  • Etichetarea similarităților cu titlurile articolelor, folosind un DataFrame
  • Titlurile sunt date ca listă: 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)
Învățare nesupervizată în Python

DataFrame-uri și etichete

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
Învățare nesupervizată în Python

Să exersăm!

Învățare nesupervizată în Python

Preparing Video For Download...