Part 3_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Part 3_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Cân bằng dữ liệu sentiment review phim MoMo
(Giải quyết bài toán mất cân bằng lớp trong Sentiment Analysis)
Vì sao cần cân bằng dữ liệu?
Sau khi hoàn thành bước làm sạch và chuẩn hóa dữ liệu (Notebook 2), ta đã có một tập review phim tiếng Việt gọn gàng, nhất quán về định dạng. Tuy nhiên, một vấn đề thường gặp trong các bài toán phân tích cảm xúc là:
Dữ liệu sentiment thường bị mất cân bằng giữa các lớp.
Trong review phim:
-
Lớp tích cực thường chiếm tỷ lệ cao
-
Lớp trung lập và tiêu cực thường ít hơn đáng kể
Nếu đưa dữ liệu này trực tiếp vào mô hình, mô hình có xu hướng:
-
“Thiên vị” lớp chiếm đa số
-
Dự đoán sai các lớp thiểu số
-
Cho độ chính xác (accuracy) cao nhưng hiệu quả thực tế thấp
Vì vậy, Notebook 3_balanced_dataset.ipynb được xây dựng nhằm:
Phân tích và xử lý mất cân bằng dữ liệu trước khi huấn luyện mô hình.
Vị trí của notebook trong pipeline dự án
Pipeline tổng thể:
-
Scrape dữ liệu review (Notebook 1)
-
Làm sạch dữ liệu (Notebook 2)
-
Cân bằng dữ liệu sentiment (Notebook 3) ⬅️
-
Huấn luyện nhiều mô hình (Notebook 4)
-
Deep Learning & PhoBERT
Notebook 3 đóng vai trò trung gian quan trọng, giúp mô hình học công bằng hơn giữa các lớp cảm xúc.
Khảo sát phân phối nhãn sentiment ban đầu
Notebook bắt đầu bằng việc:
-
Đọc dataset đã làm sạch
-
Thống kê số lượng mẫu của từng lớp sentiment
-
Quan sát sự chênh lệch giữa các lớp
Qua thống kê, có thể dễ dàng nhận thấy:
-
Một hoặc hai lớp chiếm ưu thế rõ rệt
-
Lớp còn lại có số lượng mẫu rất ít
👉 Đây chính là dấu hiệu điển hình của class imbalance problem.
Tác động của dữ liệu mất cân bằng đến mô hình
Nếu không xử lý mất cân bằng, mô hình có thể:
-
Dự đoán tất cả review là “tích cực” nhưng vẫn đạt accuracy cao
-
Không học được đặc trưng ngôn ngữ của lớp tiêu cực
-
Cho kết quả F1-score thấp ở các lớp thiểu số
Do đó, việc cân bằng dữ liệu không phải để tăng số lượng dữ liệu, mà để:
Giúp mô hình học được đầy đủ đặc trưng của từng cảm xúc.
Chiến lược cân bằng dữ liệu trong notebook
Notebook 3_balanced_dataset.ipynb áp dụng chiến lược:
🔹 Lấy số mẫu chuẩn
-
Xác định số lượng mẫu nhỏ nhất trong các lớp
-
Dùng số này làm mốc cân bằng
🔹 Cân bằng bằng cách sampling
-
Giữ số lượng mẫu ngang nhau giữa các lớp
-
Tránh để một lớp chiếm ưu thế
Cách làm này giúp:
-
Dataset gọn gàng
-
Phù hợp cho so sánh nhiều mô hình khác nhau
-
Tránh bias trong huấn luyện
Ưu và nhược điểm của phương pháp cân bằng
✅ Ưu điểm
-
Dễ triển khai
-
Kiểm soát tốt số lượng mẫu
-
Phù hợp cho bài toán nghiên cứu và so sánh mô hình
⚠️ Nhược điểm
-
Có thể làm mất một phần dữ liệu lớp đa số
-
Không tăng thêm thông tin mới cho lớp thiểu số
Notebook tập trung vào tính ổn định và minh bạch, phù hợp với mục tiêu nghiên cứu và đánh giá mô hình.
Kiểm tra lại dữ liệu sau khi cân bằng
Sau khi cân bằng, notebook tiếp tục:
-
Thống kê lại số lượng mẫu mỗi lớp
-
Đảm bảo các lớp có số lượng tương đương
-
In thử dữ liệu để kiểm tra tính toàn vẹn
👉 Đây là bước xác nhận quan trọng trước khi đưa dữ liệu vào huấn luyện mô hình.
Xuất dataset đã cân bằng
Kết quả cuối cùng của notebook là một file CSV mới, ví dụ:
Dataset này:
-
Có phân phối nhãn đồng đều
-
Phù hợp cho các mô hình Machine Learning và Deep Learning
-
Được sử dụng xuyên suốt các notebook tiếp theo
Ý nghĩa của bước cân bằng dữ liệu
Trong các bài toán Sentiment Analysis, đặc biệt với tiếng Việt:
Cân bằng dữ liệu giúp mô hình học công bằng hơn, không “thiên vị cảm xúc”.
Notebook 3 đóng vai trò:
-
Tăng độ tin cậy khi đánh giá mô hình
-
Giảm sai lệch khi so sánh nhiều thuật toán
-
Tạo tiền đề cho Deep Learning và PhoBERT hoạt động hiệu quả
Kết luận và hướng sang bài tiếp theo
👉 Bài viết này đã trình bày vấn đề mất cân bằng dữ liệu sentiment và cách xử lý trong dự án phân tích review phim MoMo.
📌 Toàn bộ code và notebook của dự án được công khai tại GitHub:
https://github.com/lanhuongsocute/Sentiemt_Analysis_MomoReviewFilm.git
Bạn có thể:
-
Xem chi tiết cách cân bằng dữ liệu
-
Điều chỉnh chiến lược sampling
-
Áp dụng pipeline cho các bài toán NLP tiếng Việt khác
👉 Ở bài tiếp theo (Nội dung #4), tôi sẽ trình bày:
-
Huấn luyện nhiều mô hình sentiment cơ bản
-
So sánh hiệu quả các thuật toán Machine Learning
-
Đánh giá bằng các chỉ số chuẩn (Accuracy, Precision, Recall, F1-score)
Notebook tiếp theo: 4_sentiment_multimodel.ipynb
📚 Danh sách các bài blog trong series
-
Part 1 – Thu thập và tạo dataset từ review phim MoMo
🔗 https://mimibeoxu.com/2025/12/09/sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Giới thiệu dự án, crawl dữ liệu review, lọc link phim, scrape review và lưu CSV. -
Part 2 – Làm sạch và chuẩn hóa dữ liệu review
🔗 https://mimibeoxu.com/2025/12/26/part-2_sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Xử lý text tiếng Việt: loại bỏ ký tự đặc biệt, chuẩn hóa, chuẩn bị dữ liệu cho mô hình. -
Part 3 – Cân bằng dữ liệu sentiment
🔗 https://mimibeoxu.com/2025/12/26/part-3_sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Phân tích phân phối nhãn, sampling để cân bằng các lớp sentiment. -
Part 4 – So sánh mô hình Machine Learning cho Sentiment Analysis
🔗 https://mimibeoxu.com/2025/12/26/part-4_sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Huấn luyện NB, SVM, Logistic Regression… với TF-IDF; đánh giá accuracy, F1, confusion matrix. -
Part 5 – Deep Learning với CNN + LSTM cho dữ liệu review
🔗 https://mimibeoxu.com/2025/12/26/part-5_sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Xây dựng mô hình CNN + LSTM, embedding layer, huấn luyện và đánh giá. -
Part 6 – Fine-tune PhoBERT cho Sentiment Analysis tiếng Việt
🔗 https://mimibeoxu.com/2025/12/26/part-6_sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Áp dụng PhoBERT pretrained, tokenization, attention mask, classification head, kết quả. -
Part 7 – Kiểm tra và đánh giá chất lượng data sau pipeline
🔗 https://mimibeoxu.com/2025/12/26/part-7_sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Kiểm tra lại dataset cuối cùng, thống kê độ dài, phân phối nhãn, đảm bảo không lỗi. -
Part 8 – Phân loại nhị phân sentiment (tích cực vs tiêu cực)
🔗 https://mimibeoxu.com/2025/12/26/part-8_sentiment-analysis-from-film-reviews-vietnamese-nlp-with-phobert-telegram-chatbot/
Nội dung: Chuyển bài toán sang binary classification, huấn luyện và đánh giá mô hình phục vụ triển khai thực tế.


