Word embedding và sentiment bằng Naive Bayes

Word2Vec, điểm tương đồng, ưu nhược điểm embedding dày đặc và case sentiment review nhà hàng bằng Naive Bayes.
KhóThuật toán ~60 phút

Giới thiệu

Bài này học biến từ thành vector và đoán khen chê. Dùng để hiểu nghĩa từ và chấm review nhà hàng.

Kiến thức cần nhớ

Word embedding

  • Định nghĩa: nhúng mỗi từ thành vector ngắn dày đặc.
  • Từ đồng nghĩa nằm gần nhau trong không gian.
  • Ví dụ đời thường: như xếp bạn cùng sở thích ngồi gần.
  • Học bằng cách đoán từ xung quanh trong văn bản lớn.
  • Hay đi chung thì kéo gần, hiếm chung thì đẩy xa.

Cosine và so sánh BoW

  • Cosine đo góc giữa 2 vector, góc nhỏ là gần nghĩa.
  • BoW thưa theo cỡ từ vựng, không biết từ gần nghĩa.
  • Embedding chỉ vài trăm chiều, bắt được nghĩa tốt.
  • Ví dụ đời thường: như đo độ hợp gu bằng góc nhìn.
  • Nhược điểm: mỗi từ 1 vector nên từ đa nghĩa bị trộn.
Cách biểu diễnƯu điểmNhược điểm
Túi từ BoWDễ hiểu từng chiềuThưa, không biết gần nghĩa
EmbeddingGọn, bắt được nghĩaKhó giải thích, cần nhiều data

Sentiment bằng Naive Bayes

  • Định nghĩa: đếm từ khen chê để đoán nhãn review.
  • Từ nào hay đi với khen thì đẩy về phía khen.
  • Ví dụ đời thường: như thấy "ngon" nhiều thì đoán khen.
  • Cần làm sạch chữ, tách từ trước khi đếm.
  • Đo bằng độ chính xác trên review chưa thấy.

Ví dụ

  • Input: "món ngon, phục vụ tệ" -> Output: 1 khen + 1 chê.
  • Giải thích: mỗi từ góp phiếu theo tần suất đã học.
# So sánh gần nghĩa bằng cosine
import math
cos = (a @ b) / (len_a * len_b)  # góc nhỏ là gần nghĩa
print(cos)  # gần 1 là rất giống

💻 Bài tập

Ngôn ngữ: Python 3 với NumPy. Bài 3 dùng gensim (hoặc PyTorch). Nộp vào day-099/.

Bài 1: Embedding từ ma trận đồng xuất hiện

  1. Lấy một kho văn bản khoảng 1 triệu từ (ví dụ text8 hoặc bài báo tiếng Việt đã tách từ).
  2. Dựng ma trận đồng xuất hiện với cửa sổ ±2, giữ 5000 từ phổ biến nhất.
  3. Tính PPMI: max⁡(0,log⁡P(w,c)P(w)P(c))\max(0, \log \frac{P(w,c)}{P(w)P(c)}).
  4. Giảm chiều bằng SVD cắt còn 100 chiều. Mỗi hàng là vector của 1 từ.
HàmYêu cầu
most_similar(word, n=10)Top n từ cosine cao nhất, không tính chính nó
analogy(a, b, c)Từ gần b - a + c nhất, ví dụ king - man + woman

In most_similar cho 5 từ. Nhận xét kết quả nào hợp lý, kết quả nào lạ.

Bài 2: Sentiment bằng Naive Bayes và bằng embedding

Dữ liệu: review phim IMDB (tập con 10.000 review) hoặc review tiếng Việt công khai.

  1. Naive Bayes ngày 54 trên BoW. In accuracy test.
  2. Biểu diễn mỗi review bằng trung bình vector embedding các từ, rồi logistic regression ngày 55. In accuracy test.
  3. Tìm 5 review mà 2 mô hình bất đồng. Đọc và giải thích vì sao.
"món ngon, phục vụ tệ" -> in từng từ và điểm log-ratio khen/chê của nó

Bài 3: Word2vec (nâng cao)

  1. Huấn luyện gensim.models.Word2Vec (skip-gram, 100 chiều) trên cùng kho văn bản.
  2. So most_similar và analogy với PPMI-SVD của Bài 1.
  3. Chọn 1 từ đa nghĩa (ví dụ "bank" hoặc "đường"). In 10 từ gần nhất. Chỉ ra 2 nghĩa bị trộn vào 1 vector.
  4. Vẽ 50 từ bằng PCA 2D, tô màu theo nhóm chủ đề.

✅ Tiêu chí hoàn thành

  • most_similar và analogy chạy được, có bảng kết quả.
  • Bảng accuracy 2 cách sentiment có số thật.
  • Có ví dụ từ đa nghĩa bị trộn.
  • Giải thích được vì sao embedding "biết" từ gần nghĩa còn BoW thì không.

❓ Câu hỏi ôn tập

  • Embedding khác túi từ ở đâu?
  • Cosine gần 1 nghĩa là gì?
  • Naive Bayes đoán cảm xúc thế nào?
  • Vì sao từ đa nghĩa gây khó?

🌕 Bạn đã hoàn thành ngày 99. Làm hết bài tập phía trên rồi sang ngày tiếp theo.

Bớt paste mù, hiểu sâu từng dòng mình viết.

180 Days Challenge. 180 ngày cai nghiện vibe code.