Dự án phân tích cảm xúc (Sentiment Analysis) cho tiếng Việt, tập trung vào việc phân tích comment YouTube của bài hát "Trạm dừng chân - J97"
- Phân tích cảm xúc comment YouTube tiếng Việt
- Xử lý ngôn ngữ tự nhiên cho tiếng Việt với các đặc thù như teencode, emoji
- So sánh hiệu suất giữa các mô hình ML truyền thống và transformer models
- Xây dựng pipeline hoàn chỉnh từ thu thập dữ liệu đến triển khai model
- Phân tích từ vựng và trích xuất cụm từ quan trọng
Sentiment-Analysis-Vietnamese/
├── 📊 data.ipynb # Thu thập dữ liệu từ YouTube API
├── 🤖 phoBert.ipynb # Training và fine-tuning PhoBERT model
├── 🧠 Training_with_ML_Algorithm.ipynb # Training các thuật toán ML truyền thống
├── 📈 MostWords.ipynb # Phân tích từ vựng và trích xuất cụm từ
├── 🔀 shuffle.py # Xáo trộn dữ liệu training
├── 📁 comment_data/ # Thư mục chứa dữ liệu
│ ├── Tram_dung_chan_Jack.csv # Dữ liệu comment gốc
│ └── Tram_dung_chan_Jack_shuffled.xlsx # Dữ liệu đã xáo trộn
├── 📝 vietnamese-stopwords-dash.txt # Danh sách stop words tiếng Việt
├── 📋 GIT_GUIDELINES.md # Hướng dẫn làm việc với Git cho các thành viên
├── 📄 .gitignore # Cấu hình Git ignore
└── 📖 README.md # Tài liệu chính này
- Sử dụng YouTube Data API v3 để thu thập comment
- Xử lý pagination và rate limiting
- Lưu trữ dữ liệu với metadata đầy đủ:
authorDisplayName
: Tên người commenttextDisplay
: Nội dung commentlikeCount
: Số lượt likepublishedAt
: Thời gian đăngtotalReplyCount
: Số lượt trả lời
- Chuẩn hóa teencode: 50+ từ viết tắt phổ biến (ko→không, dc→được, etc.)
- Xử lý emoji: 12+ emoji được chuyển thành text mô tả
- Làm sạch text: Loại bỏ URL, HTML tags, ký tự đặc biệt
- Chuẩn hóa tiếng Việt: Xử lý dấu tiếng Việt và ký tự đặc biệt
- Loại bỏ emoji trùng lặp: Tối ưu hóa biểu tượng cảm xúc
- Vietnamese Character Support: Hỗ trợ đầy đủ ký tự tiếng Việt
- Fine-tuning PhoBERT cho sentiment analysis
- Sử dụng GPU để tăng tốc training
- Đánh giá hiệu suất với các metrics: accuracy, F1-score
- Visualization kết quả training
- Tokenization và padding cho tiếng Việt
- Logistic Regression: Baseline model với class_weight='balanced'
- Random Forest: Ensemble method với class_weight='balanced'
- SVM: Support Vector Machine với kernel='linear'
- Naive Bayes: MultinomialNB classifier
- Voting Classifier: Kết hợp nhiều model
- GridSearchCV: Hyperparameter tuning
- Cross-validation: StratifiedKFold validation
- Phân tích từ đơn:
get_top_words()
- Tìm top từ xuất hiện nhiều nhất - Phân tích bigrams:
get_top_2words()
- Cụm 2 từ xuất hiện thường xuyên - Phân tích trigrams:
get_top_3words()
- Cụm 3 từ có ý nghĩa - Word Cloud: Visualization trực quan từ vựng
- Underthesea Integration: Sử dụng underthesea cho tiếng Việt
- Phân tích theo sentiment: So sánh từ vựng theo cảm xúc
# Python 3.8+
pip install -r requirements.txt
# Core libraries
pip install pandas numpy scikit-learn
# Deep Learning
pip install transformers torch
# Visualization
pip install matplotlib seaborn wordcloud
# Vietnamese NLP
pip install underthesea
# API & Data
pip install google-api-python-client openpyxl
# Additional
pip install tqdm datasets
# Chạy notebook data.ipynb để thu thập comment YouTube
jupyter notebook data.ipynb
# Xáo trộn dữ liệu cho training
python shuffle.py
# Phân tích từ vựng và cụm từ
jupyter notebook MostWords.ipynb
# Training PhoBERT model
jupyter notebook phoBert.ipynb
# Training ML algorithms
jupyter notebook Training_with_ML_Algorithm.ipynb
- Nguồn: Comment YouTube từ video "Trấm Đứng Chân Jack"
- Kích thước: ~5.8MB (CSV), ~3.6MB (Excel)
- Cấu trúc:
textDisplay
: Nội dung commentlabel
: Nhãn sentiment (positive/negative/neutral)authorDisplayName
: Tên người commentlikeCount
: Số lượt likepublishedAt
: Thời gian đăng
- Teencode Dictionary: 50+ từ viết tắt phổ biến
- Emoji Dictionary: 12+ emoji được chuyển thành text
- Stop Words: 1000+ từ dừng tiếng Việt
- Text Cleaning: Loại bỏ URL, HTML, ký tự đặc biệt
- Vietnamese Character Support: Hỗ trợ đầy đủ ký tự tiếng Việt
- PhoBERT: Accuracy cao nhất, phù hợp cho production
- Random Forest: Hiệu suất tốt, dễ interpret
- Logistic Regression: Baseline model, nhanh và ổn định
- SVM: Hiệu suất tốt với kernel linear
- Voting Classifier: Kết hợp nhiều model để tăng độ chính xác
- Top từ đơn: Phát hiện từ khóa quan trọng
- Top bigrams/trigrams: Hiểu context và cụm từ phổ biến
- Word Cloud: Visualization trực quan
- Sentiment-based analysis: So sánh từ vựng theo cảm xúc
- Xử lý tốt teencode và emoji tiếng Việt
- Pipeline hoàn chỉnh từ data collection đến model deployment
- So sánh hiệu suất giữa traditional ML và transformer models
- Phân tích từ vựng chi tiết với underthesea
- Code được tổ chức rõ ràng, dễ maintain
- Noun Phrase Extraction: Trích xuất cụm danh từ tiếng Việt
- Named Entity Recognition: Nhận diện tên riêng, địa danh
- Frequency-based Analysis: Phân tích dựa trên tần suất xuất hiện
- Pattern-based Extraction: Trích xuất theo mẫu câu tiếng Việt
- Interactive Charts: Biểu đồ tương tác cho phân tích từ vựng
- Sentiment Distribution: Phân bố từ vựng theo sentiment
- Trend Analysis: Phân tích xu hướng từ vựng theo thời gian
Xem GIT_GUIDELINES.md để biết chi tiết về quy trình làm việc và đóng góp vào dự án.
- Fork repository
- Tạo feature branch
- Commit changes với message rõ ràng
- Tạo Pull Request
- Code review và merge
Dự án này được phát triển cho mục đích học tập và nghiên cứu.
- Repository: GitHub
- Issues: Tạo issue trên GitHub để báo cáo bugs hoặc đề xuất tính năng
🎉 Cảm ơn bạn đã quan tâm đến dự án Sentiment Analysis Vietnamese!