Membangun sistem rekomendasi dengan NMF

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Menemukan artikel serupa

  • Insinyur di surat kabar online besar
  • Tugas: merekomendasikan artikel serupa dengan yang sedang dibaca pelanggan
  • Artikel serupa harus punya topik yang mirip
Unsupervised Learning in Python

Strategi

  • Terapkan NMF pada array frekuensi kata
  • Nilai fitur NMF menggambarkan topik
  • ... sehingga dokumen serupa punya nilai fitur NMF yang mirip
  • Bandingkan nilai fitur NMF?
Unsupervised Learning in Python

Terapkan NMF pada array frekuensi kata

  • articles adalah array frekuensi kata
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Unsupervised Learning in Python

Strategi

  • Terapkan NMF pada array frekuensi kata
  • Nilai fitur NMF menggambarkan topik
  • ... sehingga dokumen serupa punya nilai fitur NMF yang mirip
  • Bandingkan nilai fitur NMF?
Unsupervised Learning in Python

Versi artikel

  • Versi berbeda dari dokumen yang sama punya proporsi topik yang sama
  • ... tetapi nilai fiturnya bisa berbeda!
  •  
  •  

Versi kuat: Dog bites man! Attack by terrible canine leaves man paralyzed...

Unsupervised Learning in Python

Versi artikel

  • Versi berbeda dari dokumen yang sama punya proporsi topik yang sama
  • ... tetapi nilai fiturnya bisa berbeda!
  • Mis. karena satu versi banyak memakai kata tanpa makna
  •  

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

Unsupervised Learning in Python

Versi artikel

  • Versi berbeda dari dokumen yang sama punya proporsi topik yang sama
  • ... tetapi nilai fiturnya bisa berbeda!
  • Mis. karena satu versi banyak memakai kata tanpa makna
  • Namun semua versi berada pada garis yang sama dari titik nol

Plot sebar topik pets vs topik danger, dengan versi kuat dan lemah pada garis yang sama dari titik nol

Unsupervised Learning in Python

Kemiripan kosinus

  • Menggunakan sudut antara garis
  • Nilai lebih tinggi berarti lebih mirip
  • Nilai maksimum 1 saat sudut 0 derajat

Plot sebar dokumen A dan B, dengan 2 garis berbeda dari titik nol

Unsupervised Learning in Python

Menghitung kemiripan kosinus

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

DataFrame dan label

  • Beri label skor kemiripan dengan judul artikel, pakai DataFrame
  • Judul diberikan sebagai 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)
Unsupervised Learning in Python

DataFrame dan label

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

Ayo berlatih!

Unsupervised Learning in Python

Preparing Video For Download...