Sentiment Analysis
Nhật kí coding,  Bài viết hay

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:

  1. Crawl danh sách phim có review
  2. Lọc link phim hợp lệ
  3. Truy cập từng phim và lấy toàn bộ review
  4. 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 Chrome
  • WebDriverWait, expected_conditions – chờ DOM load
  • pandas – xử lý và lưu dữ liệu
  • re – lọc link bằng regex
  • time – tạo độ trễ hợp lý khi crawl

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.

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
  • 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ằng WebDriverWait nhiề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

Notebook tiếp theo: 2_cleaned_dataset.ipynb

📚 Danh sách các bài blog trong series

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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á.

  6. 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ả.

  7. 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.

  8. 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ế.

Don’t get older. I level up.

Leave a Reply

Your email address will not be published. Required fields are marked *