Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Part 1_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Xây dựng Dataset Review Phim từ MoMo bằng Selenium
(Bước đầu tiên trong dự án Sentiment Analysis tiếng Việt)
Giới thiệu dự án
Trong bài toán phân tích cảm xúc (Sentiment Analysis) cho tiếng Việt, dữ liệu luôn là yếu tố then chốt. Với các nền tảng đánh giá phim như MoMo Cinema, người dùng để lại hàng nghìn nhận xét mỗi ngày, phản ánh khá chân thực cảm xúc tích cực, tiêu cực và trung lập của khán giả.
Dự án này hướng đến việc:
- Thu thập dữ liệu review phim từ MoMo
- Xây dựng pipeline xử lý dữ liệu
- So sánh nhiều mô hình Machine Learning và Deep Learning
- Thử nghiệm mô hình ngôn ngữ PhoBERT cho tiếng Việt
Trong bài viết này, tôi trình bày bước đầu tiên của toàn bộ pipeline:
👉 Thu thập (scrape) dữ liệu review phim từ MoMo bằng Selenium.
Tổng quan pipeline dự án
Notebook 1_scrape_dataset.ipynb đảm nhiệm vai trò tạo dataset gốc, làm nền cho toàn bộ các bước sau:
- Crawl danh sách phim có review
- Lọc link phim hợp lệ
- Truy cập từng phim và lấy toàn bộ review
- Lưu dữ liệu ra file CSV
Dataset thu được sẽ tiếp tục được:
- Làm sạch (Notebook 2)
- Cân bằng dữ liệu (Notebook 3)
- Huấn luyện và đánh giá mô hình (Notebook 4 → 8)
Công nghệ và thư viện sử dụng
Để xử lý trang web có nội dung động (dynamic content), dự án sử dụng Selenium thay vì requests + BeautifulSoup.
Các thư viện chính:
selenium– điều khiển trình duyệt ChromeWebDriverWait,expected_conditions– chờ DOM loadpandas– xử lý và lưu dữ liệure– lọc link bằng regextime– tạo độ trễ hợp lý khi crawl
Bước 1 – Lấy danh sách link phim từ MoMo
Trang review phim của MoMo chỉ hiển thị một phần danh sách, các phim còn lại được load khi người dùng cuộn trang hoặc bấm nút “Xem tiếp nhé!”.
Notebook sử dụng chiến lược:
- Cuộn trang xuống cuối
- Tìm và click nút “Xem tiếp nhé!”
- Lặp lại nhiều lần để tải đủ danh sách phim
Quá trình này được giới hạn số vòng lặp để:
- Tránh crawl vô hạn
- Kiểm soát thời gian chạy notebook
👉 Kết quả thu được là tập hợp các link phim, được lưu trong một set để loại bỏ trùng lặp.
Bước 2 – Lọc link phim hợp lệ bằng Regex
Không phải tất cả link thu được đều dẫn đến trang review hợp lệ. Vì vậy, dự án sử dụng regular expression để chỉ giữ lại các link có cấu trúc đúng: https://www.momo.vn/cinema/ten-phim-id/review
Việc lọc này giúp:
- Loại bỏ link rác
- Đảm bảo mỗi link tương ứng đúng một phim
- Giúp quá trình scrape review phía sau ổn định hơn
Danh sách link hợp lệ được lưu vào file: film_links.txt
Bước 3 – Scrape review chi tiết của từng phim
Sau khi có danh sách phim hợp lệ, notebook tiến hành:
- Truy cập từng link phim
- Cuộn trang và bấm “Xem tiếp nhé!” để tải thêm review
- Lặp tối đa một số lần nhất định (ví dụ 10 lần) để tránh quá tải
Mỗi review được trích xuất và lưu vào cấu trúc dữ liệu tạm thời (list of dict).
Notebook được thiết kế với nhiều khối try–except nhằm:
- Tránh lỗi khi một phim không có review
- Không làm gián đoạn toàn bộ quá trình crawl nếu xảy ra lỗi cục bộ
Xuất dataset gốc ra file CSV
Sau khi hoàn tất việc scrape, toàn bộ dữ liệu được đưa vào pandas.DataFrame và xuất ra file: momo_reviews_scrape.csv
File CSV này:
- Sử dụng encoding
utf-8-sigđể tránh lỗi font tiếng Việt - Là dataset gốc cho toàn bộ các notebook tiếp theo
- Không chỉnh sửa nhãn hay nội dung (raw data)
Kết quả đạt được
Sau khi chạy notebook 1_scrape_dataset.ipynb, ta thu được:
film_links.txt: danh sách link phim hợp lệmomo_reviews_scrape.csv: dataset review phim thô
Đây là bước quan trọng nhất, bởi:
Chất lượng dữ liệu đầu vào quyết định trực tiếp hiệu quả của mô hình Sentiment Analysis.
Một số lưu ý và hướng cải tiến
Trong thực tế, để crawl dữ liệu ổn định hơn, có thể:
- Thay
time.sleep()bằngWebDriverWaitnhiều hơn - Thêm delay ngẫu nhiên để tránh bị chặn
- Chạy Chrome ở chế độ headless khi deploy
- Ghi log số review thu được cho mỗi phim
- Gắn timestamp để quản lý version dataset
Kết luận và hướng sang bước tiếp theo
Bài viết này đã trình bày toàn bộ quá trình xây dựng dataset review phim từ MoMo bằng Selenium – nền móng của dự án Sentiment Analysis tiếng Việt.
👉Toàn bộ code, notebook và dữ liệu của dự án được công khai tại GitHub:
https://github.com/lanhuongsocute/Sentiemt_Analysis_MomoReviewFilm.git
Bạn có thể:
- Clone về chạy lại toàn bộ pipeline
- Tùy chỉnh các bước làm sạch
- Áp dụng cho các bài toán sentiment khác bằng tiếng Việt
👉 Ở bài tiếp theo, tôi sẽ trình bày cách:
- Làm sạch dữ liệu text tiếng Việt
- Chuẩn hóa nội dung review
- Chuẩn bị dữ liệu cho các mô hình Machine Learning
Part 2_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Làm sạch và chuẩn hóa dữ liệu review phim MoMo
(Bước tiền xử lý quan trọng trong Sentiment Analysis tiếng Việt)
Vai trò của bước làm sạch dữ liệu
Sau khi hoàn thành bước thu thập dữ liệu ở Notebook 1 – Scrape dataset, chúng ta đã có một tập dữ liệu review phim thô (raw data) từ MoMo. Tuy nhiên, dữ liệu dạng này chưa thể đưa trực tiếp vào mô hình học máy, bởi:
-
Review chứa nhiều ký tự đặc biệt, emoji, HTML
-
Có review trống hoặc rất ngắn, không mang ý nghĩa cảm xúc
-
Dữ liệu không đồng nhất về định dạng chữ hoa – chữ thường
-
Nhiều nội dung nhiễu làm giảm hiệu quả mô hình
Vì vậy, Notebook 2_cleaned_dataset.ipynb được xây dựng nhằm:
Làm sạch, chuẩn hóa và chuẩn bị dữ liệu văn bản tiếng Việt cho các bước huấn luyện mô hình phía sau.
Vị trí của notebook trong pipeline dự án
Pipeline tổng thể của dự án:
-
Scrape dữ liệu review phim (Notebook 1)
-
Làm sạch & chuẩn hóa dữ liệu (Notebook 2) ⬅️
-
Cân bằng dữ liệu (Notebook 3)
-
Huấn luyện nhiều mô hình sentiment
-
Deep Learning & PhoBERT
Notebook 2 đóng vai trò “lọc thô”, giúp dữ liệu trở nên gọn gàng, đồng nhất và có giá trị ngữ nghĩa hơn.
Đọc dữ liệu gốc và khảo sát ban đầu
Notebook bắt đầu bằng việc:
-
Đọc file
momo_reviews_scrape.csv -
Kiểm tra số dòng, số cột
-
Quan sát nhanh nội dung review
Việc khảo sát này giúp xác định:
-
Tỷ lệ dữ liệu rỗng
-
Những trường cần giữ lại cho bài toán sentiment
-
Những nội dung cần loại bỏ hoặc xử lý đặc biệt
Loại bỏ dữ liệu không hợp lệ
Một số review trong dataset:
-
Bị trống (
NaN) -
Chỉ chứa vài ký tự vô nghĩa
-
Không mang nội dung đánh giá cảm xúc
Notebook tiến hành:
-
Loại bỏ các dòng có review rỗng
-
Lọc các review quá ngắn (không đủ thông tin cảm xúc)
👉 Bước này giúp giảm nhiễu, tránh để mô hình “học sai” từ dữ liệu kém chất lượng.
Chuẩn hóa văn bản tiếng Việt
Đây là phần quan trọng nhất của notebook.
Dữ liệu review được chuẩn hóa thông qua các bước:
-
Chuyển toàn bộ về chữ thường
-
Loại bỏ:
-
Ký tự đặc biệt
-
Emoji
-
Số không cần thiết
-
-
Chuẩn hóa khoảng trắng
-
Giữ lại chữ cái tiếng Việt để đảm bảo ngữ nghĩa
Mục tiêu của bước này:
Giữ lại nội dung cảm xúc cốt lõi, loại bỏ phần “trang trí” không cần thiết cho mô hình.
Tạo cột dữ liệu mới cho mô hình
Thay vì ghi đè dữ liệu gốc, notebook thường:
-
Giữ lại cột review ban đầu (raw)
-
Tạo cột mới chứa review đã làm sạch
Cách làm này có lợi vì:
-
Dễ so sánh trước – sau làm sạch
-
Thuận tiện debug hoặc cải tiến pipeline
-
Phục vụ nhiều mô hình khác nhau (ML & DL)
Kiểm tra lại chất lượng dữ liệu sau làm sạch
Sau khi tiền xử lý, notebook tiếp tục:
-
Kiểm tra số lượng dòng còn lại
-
In thử một số review đã được clean
-
Đảm bảo dữ liệu không còn giá trị rỗng
Đây là bước xác nhận chất lượng, trước khi đưa dữ liệu sang:
-
Cân bằng nhãn
-
Vector hóa
-
Huấn luyện mô hình
Xuất dataset đã làm sạch
Kết quả cuối cùng của notebook là một file CSV mới, ví dụ: momo_reviews_cleaned.csv
Dataset này:
-
Gọn gàng
-
Đồng nhất định dạng
-
Sẵn sàng cho bước cân bằng dữ liệu và huấn luyện mô hình
Ý nghĩa của bước làm sạch trong Sentiment Analysis
Trong bài toán xử lý ngôn ngữ tự nhiên, đặc biệt với tiếng Việt:
Tiền xử lý dữ liệu tốt có thể cải thiện kết quả mô hình nhiều hơn cả việc đổi thuật toán.
Notebook 2_cleaned_dataset.ipynb giúp:
-
Mô hình học đúng cảm xúc, không bị nhiễu
-
Giảm overfitting do dữ liệu bẩn
-
Tăng độ ổn định khi so sánh nhiều mô hình khác nhau
Kết luận và hướng sang bài tiếp theo
Bài viết này đã trình bày chi tiết quá trình làm sạch và chuẩn hóa dữ liệu review phim MoMo, chuẩn bị đầu vào cho các mô hình học máy và học sâu.
👉Toàn bộ code, notebook và dữ liệu của dự án được công khai tại GitHub:
https://github.com/lanhuongsocute/Sentiemt_Analysis_MomoReviewFilm.git
Bạn có thể:
- Clone về chạy lại toàn bộ pipeline
- Tùy chỉnh các bước làm sạch
- Áp dụng cho các bài toán sentiment khác bằng tiếng Việt
👉 Ở bài tiếp theo (Nội dung #3), tôi sẽ trình bày:
-
Vấn đề mất cân bằng dữ liệu sentiment
-
Các kỹ thuật cân bằng dữ liệu
-
Chuẩn bị dataset cho huấn luyện mô hình
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)
Part 4_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Huấn luyện và so sánh nhiều mô hình Sentiment Analysis cho review phim MoMo
(Từ Machine Learning truyền thống đến baseline cho Deep Learning)
Mục tiêu của bước huấn luyện đa mô hình
Sau khi hoàn thành:
-
Thu thập dữ liệu (Notebook 1)
-
Làm sạch dữ liệu (Notebook 2)
-
Cân bằng dữ liệu sentiment (Notebook 3)
Chúng ta đã có một dataset sạch – cân bằng – sẵn sàng cho huấn luyện mô hình.
Notebook 4_sentiment_multimodel.ipynb được xây dựng với mục tiêu:
Huấn luyện và so sánh nhiều mô hình Sentiment Analysis trên cùng một tập dữ liệu, từ đó lựa chọn baseline phù hợp cho các bước nâng cao (Deep Learning, PhoBERT).
Vị trí của notebook trong pipeline dự án
Pipeline tổng thể của dự án:
-
Scrape dữ liệu review
-
Làm sạch và chuẩn hóa
-
Cân bằng dữ liệu
-
Huấn luyện nhiều mô hình sentiment (Notebook 4) ⬅️
-
Deep Learning (CNN + LSTM)
-
PhoBERT cho tiếng Việt
Notebook 4 đóng vai trò bước đánh giá trung tâm, giúp trả lời câu hỏi quan trọng:
Mô hình nào phù hợp nhất cho bài toán sentiment review phim tiếng Việt?
Chuẩn bị dữ liệu cho mô hình
Tách tập train – test
Notebook tiến hành:
-
Chia dữ liệu thành tập huấn luyện và tập kiểm tra
-
Đảm bảo phân phối nhãn được giữ ổn định
Việc tách dữ liệu rõ ràng giúp:
-
Đánh giá đúng khả năng tổng quát hóa của mô hình
-
Tránh hiện tượng học thuộc dữ liệu (overfitting)
Vector hóa văn bản
Do các mô hình Machine Learning không làm việc trực tiếp với văn bản, notebook sử dụng kỹ thuật:
-
TF-IDF Vectorization
TF-IDF giúp:
-
Biến văn bản thành vector số
-
Nhấn mạnh các từ quan trọng
-
Giảm ảnh hưởng của các từ xuất hiện quá nhiều nhưng ít ý nghĩa
Các mô hình được huấn luyện
Notebook thử nghiệm nhiều thuật toán Machine Learning phổ biến, bao gồm:
-
Naive Bayes
-
Logistic Regression
-
Support Vector Machine (SVM)
-
Random Forest (nếu có)
Mỗi mô hình đều được:
-
Huấn luyện trên cùng một tập dữ liệu
-
Đánh giá bằng cùng một bộ chỉ số
👉 Điều này đảm bảo so sánh công bằng giữa các mô hình.
Các chỉ số đánh giá mô hình
Notebook sử dụng các chỉ số chuẩn trong Sentiment Analysis:
-
Accuracy – độ chính xác tổng thể
-
Precision – mức độ chính xác của dự đoán
-
Recall – khả năng phát hiện đúng các mẫu thuộc từng lớp
-
F1-score – cân bằng giữa Precision và Recall
Ngoài ra, Confusion Matrix được sử dụng để:
-
Phân tích chi tiết lỗi dự đoán
-
Quan sát mô hình hay nhầm lẫn giữa các lớp nào
Kết quả và phân tích so sánh
Qua thực nghiệm, notebook cho thấy:
-
Một số mô hình đơn giản (như Logistic Regression, SVM) đạt hiệu quả khá tốt
-
Naive Bayes cho tốc độ nhanh nhưng độ chính xác có thể thấp hơn
-
Không phải mô hình phức tạp hơn luôn cho kết quả tốt hơn
👉 Đây là minh chứng cho nguyên lý quan trọng trong Machine Learning:
Không có mô hình “tốt nhất”, chỉ có mô hình “phù hợp nhất”.
Vai trò của notebook 4 trong toàn bộ dự án
Notebook 4_sentiment_multimodel.ipynb đóng vai trò:
-
Thiết lập baseline cho bài toán sentiment
-
Làm cơ sở so sánh cho:
-
CNN + LSTM (Notebook 5)
-
PhoBERT (Notebook 6)
-
-
Giúp đánh giá xem Deep Learning có thực sự cải thiện so với ML truyền thống hay không
Xuất kết quả và tái sử dụng mô hình
Tùy mục đích, notebook có thể:
-
Lưu mô hình đã huấn luyện
-
Lưu vectorizer (TF-IDF)
-
Phục vụ cho hệ thống dự đoán sentiment sau này
Điều này giúp:
-
Tái sử dụng mô hình mà không cần huấn luyện lại
-
Triển khai nhanh cho ứng dụng thực tế
Kết luận và hướng sang bài tiếp theo
Bài viết này đã trình bày quá trình huấn luyện và so sánh nhiều mô hình Sentiment Analysis cho dữ liệu 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 #5), tôi sẽ trình bày:
-
Áp dụng Deep Learning cho Sentiment Analysis
-
Xây dựng mô hình CNN + LSTM
-
So sánh kết quả với các mô hình Machine Learning truyền thống
Part 5_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Sentiment Analysis review phim MoMo với Deep Learning (CNN + LSTM)
(Khi học sâu phát huy sức mạnh trên dữ liệu văn bản tiếng Việt)
Vì sao cần Deep Learning cho Sentiment Analysis?
Ở Nội dung #4, các mô hình Machine Learning truyền thống (Naive Bayes, Logistic Regression, SVM…) đã cho kết quả khá tốt và đóng vai trò baseline. Tuy nhiên, các mô hình này vẫn có những hạn chế:
-
Phụ thuộc mạnh vào đặc trưng thủ công (TF-IDF)
-
Khó nắm bắt ngữ cảnh dài và thứ tự từ
-
Chưa khai thác tốt cấu trúc ngôn ngữ tiếng Việt
Để khắc phục các hạn chế đó, Notebook 5_sentiment_analysis_with_CNN+LSTM.ipynb được xây dựng nhằm:
Ứng dụng Deep Learning để tự động học đặc trưng cảm xúc từ văn bản review phim.
Vị trí của notebook trong pipeline dự án
Pipeline tổng thể của dự án:
-
Scrape dữ liệu
-
Làm sạch dữ liệu
-
Cân bằng dữ liệu
-
Huấn luyện nhiều mô hình ML
-
Deep Learning với CNN + LSTM (Notebook 5) ⬅️
-
PhoBERT cho tiếng Việt
Notebook 5 là bước chuyển quan trọng từ Machine Learning sang Deep Learning.
Chuẩn bị dữ liệu cho mô hình Deep Learning
Tokenization và Padding
Khác với TF-IDF, Deep Learning làm việc trực tiếp với chuỗi từ. Notebook tiến hành:
-
Tokenize văn bản (chuyển từ → chỉ số)
-
Giới hạn độ dài câu (max length)
-
Padding để các câu có cùng chiều dài
Việc này giúp:
-
Chuẩn hóa đầu vào
-
Tăng tốc quá trình huấn luyện
-
Tránh lỗi kích thước dữ liệu
Embedding layer
Notebook sử dụng Embedding Layer để:
-
Chuyển chỉ số từ thành vector dense
-
Học biểu diễn ngữ nghĩa của từ trong ngữ cảnh review phim
Embedding cho phép mô hình:
-
Nhận biết các từ có ý nghĩa tương tự
-
Học mối quan hệ giữa các từ mà TF-IDF không thể biểu diễn
Kiến trúc mô hình CNN + LSTM
Mô hình trong notebook kết hợp hai kiến trúc mạnh mẽ:
🔹 CNN (Convolutional Neural Network)
-
Trích xuất đặc trưng cục bộ (n-grams)
-
Phát hiện các cụm từ mang cảm xúc mạnh
-
Giảm nhiễu trong dữ liệu văn bản
🔹 LSTM (Long Short-Term Memory)
-
Ghi nhớ ngữ cảnh dài
-
Xử lý tốt thứ tự từ trong câu
-
Hiệu quả với các review dài, nhiều ý
👉 Sự kết hợp CNN + LSTM giúp mô hình:
Vừa “nhìn” được cụm từ quan trọng, vừa “hiểu” mạch ngữ nghĩa toàn câu.
Huấn luyện mô hình
Trong notebook, mô hình được:
-
Compile với hàm loss phù hợp cho bài toán sentiment
-
Huấn luyện trên tập train
-
Theo dõi độ chính xác và loss trên tập validation
Quá trình huấn luyện cho phép:
-
Quan sát khả năng hội tụ của mô hình
-
Phát hiện dấu hiệu overfitting
-
Điều chỉnh siêu tham số nếu cần
Đánh giá kết quả mô hình
Sau huấn luyện, notebook tiến hành:
-
Dự đoán sentiment trên tập test
-
So sánh kết quả với các mô hình ML trước đó
-
Phân tích độ chính xác và khả năng phân loại từng lớp cảm xúc
Kết quả cho thấy:
-
CNN + LSTM thường cải thiện khả năng nhận diện ngữ cảnh
-
Đặc biệt hiệu quả với các review dài, nhiều sắc thái cảm xúc
-
Thể hiện ưu thế so với các mô hình ML truyền thống trong nhiều trường hợp
Ý nghĩa của CNN + LSTM trong dự án
Notebook 5_sentiment_analysis_with_CNN+LSTM.ipynb giúp:
-
Chứng minh hiệu quả của Deep Learning cho NLP tiếng Việt
-
Tạo cầu nối giữa ML truyền thống và mô hình ngôn ngữ lớn
-
Là bước đệm cần thiết trước khi áp dụng PhoBERT
👉 Đây là bước “nâng cấp tư duy” từ đặc trưng thủ công sang học đặc trưng tự động.
So sánh với các mô hình trước
So với Notebook 4:
-
CNN + LSTM học được ngữ cảnh tốt hơn
-
Ít phụ thuộc vào việc thiết kế feature
-
Thời gian huấn luyện lâu hơn nhưng chất lượng dự đoán cao hơn
Điều này cho thấy:
Deep Learning phù hợp khi dữ liệu đủ lớn và đã được xử lý tốt.
Kết luận và hướng sang bài tiếp theo
Bài viết này đã trình bày cách áp dụng Deep Learning (CNN + LSTM) cho Sentiment Analysis review phim MoMo, đồng thời so sánh với các mô hình Machine Learning trước đó.
📌 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 #6), tôi sẽ trình bày:
-
Áp dụng mô hình ngôn ngữ PhoBERT
-
Fine-tune PhoBERT cho dữ liệu review phim
-
So sánh kết quả với CNN + LSTM
Part 6_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Sentiment Analysis review phim MoMo với PhoBERT
(Khai thác sức mạnh mô hình ngôn ngữ tiền huấn luyện cho tiếng Việt)
Vì sao chọn PhoBERT cho tiếng Việt?
Sau khi thử nghiệm:
-
Machine Learning truyền thống (Notebook #4)
-
Deep Learning CNN + LSTM (Notebook #5)
chúng ta nhận thấy Deep Learning đã cải thiện rõ rệt khả năng hiểu ngữ cảnh. Tuy nhiên, các mô hình này vẫn phải học từ đầu biểu diễn ngôn ngữ, trong khi tiếng Việt có nhiều đặc thù (tách từ, dấu, ngữ cảnh).
PhoBERT là mô hình ngôn ngữ tiền huấn luyện (pretrained language model) dành riêng cho tiếng Việt, được huấn luyện trên tập dữ liệu rất lớn. Vì vậy, Notebook 6_Phobert_FilmMomo.ipynb được xây dựng với mục tiêu:
Fine-tune PhoBERT để phân tích cảm xúc review phim tiếng Việt một cách chính xác và sâu ngữ cảnh hơn.
Vị trí của PhoBERT trong pipeline dự án
Pipeline tổng thể:
-
Thu thập dữ liệu
-
Làm sạch và chuẩn hóa
-
Cân bằng dữ liệu
-
Machine Learning baseline
-
Deep Learning CNN + LSTM
-
Fine-tune PhoBERT (Notebook 6) ⬅️
Notebook 6 là đỉnh cao của pipeline, nơi mô hình ngôn ngữ hiện đại được áp dụng trực tiếp cho bài toán sentiment.
Chuẩn bị dữ liệu cho PhoBERT
Tokenization theo chuẩn PhoBERT
Khác với tokenizer thông thường, PhoBERT:
-
Yêu cầu tokenizer riêng
-
Xử lý tách từ và mã hóa theo chuẩn đã được huấn luyện trước
Notebook thực hiện:
-
Chuyển văn bản review thành token IDs
-
Thêm token đặc biệt ([CLS], [SEP])
-
Padding và attention mask
Việc này giúp PhoBERT:
-
Hiểu đúng cấu trúc câu tiếng Việt
-
Giữ được ngữ cảnh dài và mối quan hệ giữa các từ
Chuẩn bị nhãn (labels)
Dữ liệu sentiment sau cân bằng được:
-
Chuyển sang dạng số
-
Phù hợp với bài toán phân loại (multi-class hoặc binary)
Đây là bước quan trọng để đảm bảo loss function hoạt động chính xác.
Fine-tuning mô hình PhoBERT
Notebook tiến hành:
-
Load mô hình PhoBERT pretrained
-
Gắn thêm classification head cho bài toán sentiment
-
Fine-tune trên dataset review phim MoMo
Trong quá trình huấn luyện:
-
Chỉ cần số epoch nhỏ
-
Mô hình hội tụ nhanh
-
Hạn chế overfitting tốt hơn so với mô hình học từ đầu
👉 Đây chính là ưu thế lớn nhất của transfer learning trong NLP.
Huấn luyện và theo dõi quá trình học
Notebook theo dõi:
-
Loss trên tập train
-
Độ chính xác trên tập validation
-
Sự ổn định của mô hình qua các epoch
Nhờ biểu diễn ngôn ngữ mạnh mẽ, PhoBERT:
-
Học nhanh
-
Dự đoán ổn định
-
Ít bị nhiễu bởi các review dài hoặc cấu trúc phức tạp
Đánh giá kết quả mô hình PhoBERT
Sau khi huấn luyện, notebook tiến hành:
-
Dự đoán sentiment trên tập test
-
Tính các chỉ số: Accuracy, Precision, Recall, F1-score
-
So sánh với CNN + LSTM và các mô hình ML trước đó
Kết quả cho thấy:
-
PhoBERT vượt trội trong việc hiểu ngữ cảnh
-
Phân loại tốt hơn các review nhiều sắc thái cảm xúc
-
Đặc biệt hiệu quả với tiếng Việt tự nhiên, không chuẩn hóa quá mức
So sánh PhoBERT với CNN + LSTM
| Tiêu chí | CNN + LSTM | PhoBERT |
|---|---|---|
| Học ngữ cảnh | Tốt | Rất tốt |
| Dữ liệu cần | Trung bình | Ít hơn |
| Thời gian huấn luyện | Dài | Ngắn |
| Hiệu quả tổng thể | Cao | Rất cao |
👉 Điều này khẳng định:
Mô hình ngôn ngữ tiền huấn luyện là hướng đi hiệu quả cho NLP tiếng Việt.
Ý nghĩa của PhoBERT trong dự án
Notebook 6_Phobert_FilmMomo.ipynb giúp:
-
Nâng chất lượng sentiment analysis lên mức cao hơn
-
Khai thác tri thức ngôn ngữ đã được học sẵn
-
Làm nổi bật giá trị của transfer learning trong NLP
Đây là bước then chốt giúp dự án:
-
Có chiều sâu học thuật
-
Có tính ứng dụng cao trong thực tế
Kết luận và hướng sang bài tiếp theo
Bài viết này đã trình bày quy trình fine-tune PhoBERT cho bài toán Sentiment Analysis review phim MoMo, đồng thời so sánh với CNN + LSTM và các mô hình trước đó.
📌 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 #7), tôi sẽ trình bày:
-
Kiểm tra và phân tích dữ liệu sau toàn bộ pipeline
-
Đánh giá độ ổn định của dataset
-
Chuẩn bị cho bài toán phân loại nhị phân
Part 7_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Kiểm tra và đánh giá chất lượng dữ liệu trong dự án Sentiment Analysis review phim MoMo
(Đảm bảo độ tin cậy trước khi triển khai phân loại nhị phân)
Vì sao cần kiểm tra lại dữ liệu?
Sau khi đã lần lượt thực hiện:
-
Thu thập dữ liệu (Notebook #1)
-
Làm sạch và chuẩn hóa (Notebook #2)
-
Cân bằng dữ liệu (Notebook #3)
-
Huấn luyện nhiều mô hình ML (Notebook #4)
-
Deep Learning CNN + LSTM (Notebook #5)
-
Fine-tune PhoBERT (Notebook #6)
Dữ liệu đã trải qua nhiều bước biến đổi liên tiếp. Vì vậy, trước khi tiếp tục với các bài toán nâng cao (như phân loại nhị phân), cần một bước trung gian để:
Kiểm tra lại tính toàn vẹn, phân phối và độ ổn định của dữ liệu.
Đây chính là mục tiêu của Notebook 7_check_data.ipynb.
Vị trí của notebook trong pipeline dự án
Pipeline tổng thể:
-
Scrape dữ liệu
-
Làm sạch dữ liệu
-
Cân bằng dữ liệu
-
Huấn luyện ML baseline
-
Deep Learning CNN + LSTM
-
PhoBERT
-
Kiểm tra và đánh giá dữ liệu (Notebook 7)
-
Phân loại nhị phân sentiment
Notebook 7 đóng vai trò “bộ lọc cuối” trước khi dữ liệu được sử dụng cho các kịch bản triển khai cụ thể.
Kiểm tra cấu trúc và kích thước dataset
Notebook bắt đầu bằng việc:
-
Đọc lại dataset đã xử lý
-
Kiểm tra số dòng, số cột
-
Đảm bảo dữ liệu không bị thiếu hoặc sai định dạng
Việc này giúp xác nhận:
-
Không có dữ liệu bị mất trong quá trình xử lý
-
Các cột quan trọng (review, label…) vẫn còn nguyên vẹn
Kiểm tra giá trị rỗng và dữ liệu bất thường
Notebook tiếp tục:
-
Thống kê số lượng giá trị
NaN -
Phát hiện các dòng dữ liệu bất thường
-
Đảm bảo không còn review trống hoặc lỗi
👉 Bước này rất quan trọng vì:
Chỉ một tỷ lệ nhỏ dữ liệu lỗi cũng có thể làm sai lệch kết quả mô hình.
Phân tích lại phân phối nhãn sentiment
Sau khi cân bằng và huấn luyện nhiều mô hình, notebook tiến hành:
-
Thống kê lại số lượng mẫu mỗi lớp sentiment
-
So sánh phân phối nhãn
Mục tiêu:
-
Xác nhận dữ liệu vẫn giữ được tính cân bằng
-
Tránh tình trạng lệch lớp do xử lý hoặc lọc dữ liệu ở các bước trước
Kiểm tra độ dài và đặc trưng văn bản
Notebook phân tích thêm:
-
Độ dài trung bình của review
-
Sự phân bố độ dài câu
-
Tính đa dạng của nội dung văn bản
Những phân tích này giúp:
-
Xác định dữ liệu có phù hợp cho LSTM/Transformer không
-
Điều chỉnh max length nếu cần cho các mô hình sau
Vai trò của notebook 7 trong dự án
Notebook 7_check_data.ipynb không trực tiếp huấn luyện mô hình, nhưng có vai trò rất quan trọng:
-
Đảm bảo dữ liệu đủ “sạch” cho các bài toán tiếp theo
-
Tăng độ tin cậy của kết quả nghiên cứu
-
Giúp phát hiện sớm các lỗi tiềm ẩn trong pipeline
👉 Trong nghiên cứu và ứng dụng thực tế, bỏ qua bước này thường dẫn đến sai lệch khó phát hiện.
Chuẩn bị dữ liệu cho bài toán phân loại nhị phân
Một mục tiêu quan trọng của notebook này là:
-
Chuẩn bị dữ liệu cho binary classification
-
Gộp hoặc ánh xạ nhãn sentiment (ví dụ: tích cực vs tiêu cực)
Việc kiểm tra kỹ dữ liệu giúp quá trình chuyển đổi nhãn ở bước sau:
-
Chính xác
-
Minh bạch
-
Dễ đánh giá hiệu quả mô hình
Kết luận và hướng sang bài tiếp theo
Bài viết này đã trình bày quá trình kiểm tra và đánh giá chất lượng dữ liệu sau toàn bộ pipeline xử lý và huấn luyện mô hình sentiment.
📌 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 #8), tôi sẽ trình bày:
-
Bài toán phân loại nhị phân sentiment
-
Cách xây dựng và đánh giá mô hình
-
So sánh kết quả với bài toán phân loại đa lớp
Part 8_Sentiment Analysis from Film Reviews | Vietnamese NLP with PhoBERT & Telegram Chatbot
Phân loại nhị phân Sentiment review phim MoMo
(Tối ưu mô hình cho bài toán thực tế: Tích cực vs Tiêu cực)
Vì sao cần phân loại nhị phân?
Ở các nội dung trước, dự án đã tập trung vào phân loại đa lớp sentiment (tích cực – trung lập – tiêu cực). Tuy nhiên, trong nhiều ứng dụng thực tế như:
-
Hệ thống gợi ý phim
-
Đánh giá nhanh mức độ hài lòng của người dùng
-
Dashboard phân tích phản hồi khách hàng
bài toán thường được đơn giản hóa thành:
Review tích cực hay tiêu cực?
Vì vậy, Notebook 8_binary_classification_FilmMomo.ipynb được xây dựng nhằm:
Chuyển bài toán sentiment từ đa lớp sang phân loại nhị phân, tập trung vào hiệu quả triển khai thực tế.
Vị trí của notebook trong pipeline dự án
Pipeline hoàn chỉnh của dự án:
-
Scrape dữ liệu review
-
Làm sạch và chuẩn hóa
-
Cân bằng dữ liệu
-
Huấn luyện mô hình ML
-
Deep Learning CNN + LSTM
-
Fine-tune PhoBERT
-
Kiểm tra và đánh giá dữ liệu
-
Phân loại nhị phân sentiment (Notebook 8) ⬅️
Notebook 8 là bước cuối cùng, biến toàn bộ pipeline nghiên cứu thành một bài toán sẵn sàng triển khai.
Chuyển đổi nhãn sentiment sang nhị phân
Notebook bắt đầu bằng việc:
-
Đọc dataset đã được kiểm tra ở Notebook 7
-
Ánh xạ lại nhãn sentiment:
-
Tích cực → 1
-
Tiêu cực → 0
-
-
(Có thể loại bỏ hoặc gộp nhãn trung lập tùy mục tiêu)
Việc chuyển đổi này giúp:
-
Đơn giản hóa không gian nhãn
-
Giảm độ phức tạp cho mô hình
-
Tăng độ ổn định trong dự đoán
Chuẩn bị dữ liệu cho mô hình nhị phân
Tương tự các notebook trước, dữ liệu được:
-
Chia train/test
-
Chuẩn hóa định dạng đầu vào
-
Đảm bảo phân phối nhãn hợp lý
Đây là bước quan trọng để đảm bảo:
-
Kết quả đánh giá phản ánh đúng khả năng mô hình
-
Tránh bias về một lớp duy nhất
Huấn luyện mô hình phân loại nhị phân
Notebook tiến hành:
-
Huấn luyện mô hình sentiment nhị phân
-
Sử dụng kiến trúc và kỹ thuật phù hợp với bài toán
-
Theo dõi quá trình hội tụ của mô hình
So với bài toán đa lớp:
-
Mô hình nhị phân thường hội tụ nhanh hơn
-
Dễ tối ưu threshold dự đoán
-
Phù hợp cho các hệ thống realtime
Đánh giá mô hình nhị phân
Các chỉ số được sử dụng bao gồm:
-
Accuracy
-
Precision
-
Recall
-
F1-score
-
Confusion Matrix
Đặc biệt, notebook tập trung phân tích:
-
Khả năng phát hiện đúng review tiêu cực
-
Tỷ lệ false positive / false negative
-
Độ cân bằng giữa Precision và Recall
👉 Đây là các yếu tố then chốt trong các hệ thống đánh giá cảm xúc thực tế.
So sánh với bài toán đa lớp
Qua thực nghiệm, có thể nhận thấy:
-
Phân loại nhị phân cho độ chính xác cao hơn
-
Mô hình ổn định và dễ triển khai
-
Phù hợp với các bài toán ra quyết định nhanh
Tuy nhiên:
-
Bài toán đa lớp vẫn cần thiết khi muốn phân tích sâu sắc cảm xúc người dùng
-
Hai hướng tiếp cận bổ trợ cho nhau, không thay thế hoàn toàn
Ý nghĩa của phân loại nhị phân trong ứng dụng thực tế
Notebook 8_binary_classification_FilmMomo.ipynb giúp dự án:
-
Tiến gần hơn tới triển khai thực tế
-
Tối ưu hóa mô hình cho hệ thống sản xuất
-
Đưa nghiên cứu học thuật vào ứng dụng đời sống
Đây là bước giúp dự án:
Chuyển từ “nghiên cứu” sang “giải pháp”.
Tổng kết toàn bộ series
Qua 8 nội dung, dự án đã xây dựng một pipeline hoàn chỉnh:
-
Từ crawl dữ liệu thực tế
-
Đến xử lý – làm sạch – cân bằng
-
So sánh Machine Learning – Deep Learning – PhoBERT
-
Và kết thúc bằng phân loại nhị phân sẵn sàng triển khai
Series này không chỉ minh họa kỹ thuật Sentiment Analysis, mà còn thể hiện:
-
Tư duy xử lý dữ liệu bài bản
-
Khả năng đánh giá và so sánh mô hình
-
Hướng tiếp cận thực tiễn cho NLP tiếng Việt
📌 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


