Xây dựng hệ gợi ý bằng NMF

Unsupervised Learning bằng Python

Benjamin Wilson

Director of Research at lateral.io

Tìm bài viết tương tự

  • Kỹ sư tại một tờ báo điện tử lớn
  • Nhiệm vụ: gợi ý bài viết giống bài khách đang đọc
  • Bài viết tương tự nên có chủ đề tương tự
Unsupervised Learning bằng Python

Chiến lược

  • Áp dụng NMF cho ma trận tần suất từ
  • Giá trị đặc trưng NMF mô tả các chủ đề
  • ... nên tài liệu giống nhau có giá trị đặc trưng NMF giống nhau
  • So sánh các giá trị đặc trưng NMF?
Unsupervised Learning bằng Python

Áp dụng NMF cho ma trận tần suất từ

  • articles là ma trận tần suất từ
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Unsupervised Learning bằng Python

Chiến lược

  • Áp dụng NMF cho ma trận tần suất từ
  • Giá trị đặc trưng NMF mô tả các chủ đề
  • ... nên tài liệu giống nhau có giá trị đặc trưng NMF giống nhau
  • So sánh các giá trị đặc trưng NMF?
Unsupervised Learning bằng Python

Các phiên bản bài viết

  • Các phiên bản của cùng tài liệu có tỷ lệ chủ đề giống nhau
  • ... nhưng giá trị đặc trưng có thể khác!
  •  
  •  

Phiên bản mạnh: Chó cắn người! Cuộc tấn công của chó dữ khiến nạn nhân bị liệt...

Unsupervised Learning bằng Python

Các phiên bản bài viết

  • Các phiên bản của cùng tài liệu có tỷ lệ chủ đề giống nhau
  • ... nhưng giá trị đặc trưng có thể khác!
  • Ví dụ: vì một phiên bản dùng nhiều từ vô nghĩa
  •  

Phiên bản yếu: Bạn có thể đã nghe, đáng tiếc có vẻ như một con chó có lẽ đã cắn một người đàn ông...

Unsupervised Learning bằng Python

Các phiên bản bài viết

  • Các phiên bản của cùng tài liệu có tỷ lệ chủ đề giống nhau
  • ... nhưng giá trị đặc trưng có thể khác!
  • Ví dụ: vì một phiên bản dùng nhiều từ vô nghĩa
  • Nhưng mọi phiên bản đều nằm trên cùng một đường thẳng qua gốc tọa độ

Biểu đồ tán xạ chủ đề thú cưng vs chủ đề nguy hiểm, với phiên bản mạnh và yếu nằm trên cùng một đường qua gốc

Unsupervised Learning bằng Python

Độ tương đồng cosine

  • Dựa trên góc giữa các vector
  • Giá trị cao hơn nghĩa là giống hơn
  • Giá trị tối đa là 1 khi góc bằng 0 độ

Biểu đồ tán xạ tài liệu A và B, với 2 đường đi qua chúng ở các góc khác nhau từ gốc

Unsupervised Learning bằng Python

Tính độ tương đồng cosine

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 bằng Python

DataFrame và nhãn

  • Gắn nhãn độ tương đồng bằng tiêu đề bài viết với DataFrame
  • Danh sách tiêu đề: 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 bằng Python

DataFrame và nhãn

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 bằng Python

Ayo berlatih!

Unsupervised Learning bằng Python

Preparing Video For Download...