การสร้างระบบแนะนำด้วย NMF

Unsupervised Learning ใน Python

Benjamin Wilson

Director of Research at lateral.io

ค้นหาบทความที่คล้ายกัน

  • วิศวกรของหนังสือพิมพ์ออนไลน์ขนาดใหญ่
  • งาน: แนะนำบทความที่คล้ายกับบทความที่ผู้ใช้กำลังอ่านอยู่
  • บทความที่คล้ายกันควรมีหัวข้อที่ใกล้เคียงกัน
Unsupervised Learning ใน Python

กลยุทธ์

  • นำ NMF ไปใช้กับอาร์เรย์ความถี่คำ
  • ค่าฟีเจอร์ของ NMF อธิบายหัวข้อ
  • ... เอกสารที่คล้ายกันจะมีค่าฟีเจอร์ NMF ใกล้เคียงกัน
  • เปรียบเทียบค่าฟีเจอร์ NMF?
Unsupervised Learning ใน Python

นำ NMF ไปใช้กับอาร์เรย์ความถี่คำ

  • articles คืออาร์เรย์ความถี่คำ
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Unsupervised Learning ใน Python

กลยุทธ์

  • นำ NMF ไปใช้กับอาร์เรย์ความถี่คำ
  • ค่าฟีเจอร์ของ NMF อธิบายหัวข้อ
  • ... เอกสารที่คล้ายกันจะมีค่าฟีเจอร์ NMF ใกล้เคียงกัน
  • เปรียบเทียบค่าฟีเจอร์ NMF?
Unsupervised Learning ใน Python

เวอร์ชันของบทความ

  • เอกสารต่างเวอร์ชันของเอกสารเดียวกันมีสัดส่วนหัวข้อเหมือนกัน
  • ... แต่ค่าฟีเจอร์ที่แน่นอนอาจต่างกัน!
  •  
  •  

เวอร์ชันที่เข้มแข็ง: Dog bites man! Attack by terrible canine leaves man paralyzed...

Unsupervised Learning ใน Python

เวอร์ชันของบทความ

  • เอกสารต่างเวอร์ชันของเอกสารเดียวกันมีสัดส่วนหัวข้อเหมือนกัน
  • ... แต่ค่าฟีเจอร์ที่แน่นอนอาจต่างกัน!
  • เช่น เพราะเวอร์ชันหนึ่งใช้คำที่ไม่มีความหมายมาก
  •  

เวอร์ชันที่อ่อนแอ: You may have heard, unfortunately it seems that a dog has perhaps bitten a man...

Unsupervised Learning ใน Python

เวอร์ชันของบทความ

  • เอกสารต่างเวอร์ชันของเอกสารเดียวกันมีสัดส่วนหัวข้อเหมือนกัน
  • ... แต่ค่าฟีเจอร์ที่แน่นอนอาจต่างกัน!
  • เช่น เพราะเวอร์ชันหนึ่งใช้คำที่ไม่มีความหมายมาก
  • แต่ทุกเวอร์ชันอยู่บนเส้นตรงเดียวกันที่ผ่านจุดกำเนิด

กราฟกระจายของหัวข้อ pets กับ danger โดยเวอร์ชันที่เข้มแข็งและอ่อนแออยู่บนเส้นตรงเดียวกันที่ผ่านจุดกำเนิด

Unsupervised Learning ใน Python

Cosine similarity

  • ใช้มุมระหว่างเส้นตรง
  • ค่าที่สูงขึ้นหมายความว่าคล้ายกันมากขึ้น
  • ค่าสูงสุดคือ 1 เมื่อมุมเป็น 0 องศา

กราฟกระจายของเอกสาร A และเอกสาร B โดยมีเส้นตรง 2 เส้นลากผ่านแต่ละจุดในมุมที่ต่างกันจากจุดกำเนิด

Unsupervised Learning ใน Python

การคำนวณ cosine similarity

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 ใน Python

DataFrame และป้ายกำกับ

  • ติดป้ายกำกับค่าความคล้ายด้วยชื่อบทความโดยใช้ DataFrame
  • ชื่อบทความให้มาเป็น 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 ใน Python

DataFrame และป้ายกำกับ

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 ใน Python

มาฝึกกันเถอะ!

Unsupervised Learning ใน Python

Preparing Video For Download...