Budowanie systemów rekomendacji przy użyciu NMF

Uczenie nienadzorowane w Pythonie

Benjamin Wilson

Director of Research at lateral.io

Wyszukiwanie podobnych artykułów

  • Inżynier w dużym serwisie informacyjnym
  • Zadanie: rekomendowanie artykułów podobnych do aktualnie czytanego
  • Podobne artykuły powinny dotyczyć podobnych tematów
Uczenie nienadzorowane w Pythonie

Strategia

  • Zastosowanie NMF do tablicy częstości słów
  • Wartości cech NMF opisują tematy
  • ... podobne dokumenty mają podobne wartości cech NMF
  • Porównać wartości cech NMF?
Uczenie nienadzorowane w Pythonie

Zastosowanie NMF do tablicy częstości słów

  • articles to tablica częstości słów
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Uczenie nienadzorowane w Pythonie

Strategia

  • Zastosowanie NMF do tablicy częstości słów
  • Wartości cech NMF opisują tematy
  • ... podobne dokumenty mają podobne wartości cech NMF
  • Porównać wartości cech NMF?
Uczenie nienadzorowane w Pythonie

Wersje artykułów

  • Różne wersje tego samego dokumentu mają te same proporcje tematów
  • ... dokładne wartości cech mogą się różnić!
  •  
  •  

Mocna wersja: Pies ugryzł mężczyznę! Atak groźnego psa powoduje paraliż...

Uczenie nienadzorowane w Pythonie

Wersje artykułów

  • Różne wersje tego samego dokumentu mają te same proporcje tematów
  • ... dokładne wartości cech mogą się różnić!
  • Np. gdy jedna wersja zawiera wiele bezsensownych słów
  •  

Słaba wersja: Być może słyszał(a) Pan/Pani, że podobno pies prawdopodobnie ugryzł mężczyznę...

Uczenie nienadzorowane w Pythonie

Wersje artykułów

  • Różne wersje tego samego dokumentu mają te same proporcje tematów
  • ... dokładne wartości cech mogą się różnić!
  • Np. gdy jedna wersja zawiera wiele bezsensownych słów
  • Wszystkie wersje leżą na tej samej prostej przechodzącej przez początek układu

Wykres punktowy: temat zwierzęta vs temat niebezpieczeństwo; silna i słaba wersja leżą na tej samej prostej przechodzącej przez początek układu

Uczenie nienadzorowane w Pythonie

Podobieństwo cosinusowe

  • Wykorzystuje kąt między prostymi
  • Wyższe wartości oznaczają większe podobieństwo
  • Wartość maksymalna wynosi 1, gdy kąt równa się 0 stopni

Wykres punktowy dokumentu A i dokumentu B z dwiema prostymi wychodzącymi z początku układu pod różnymi kątami

Uczenie nienadzorowane w Pythonie

Obliczanie podobieństw cosinusowych

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]
Uczenie nienadzorowane w Pythonie

DataFrames i etykiety

  • Oznaczanie podobieństw tytułami artykułów przy użyciu DataFrame
  • Tytuły podane jako 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)
Uczenie nienadzorowane w Pythonie

DataFrames i etykiety

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
Uczenie nienadzorowane w Pythonie

Czas na ćwiczenia!

Uczenie nienadzorowane w Pythonie

Preparing Video For Download...