Nội dung text [Tiểu luận] Seminar chuyên đề (2024-2025 / HK2)
TIỀU LUẬN Học phần: Seminar chuyên đề (HK2 / 2024-2025) Tiêu đề: Phân tích cảm xúc từ văn bản ngắn sử dụng RNN (Recurrent Neural Network) Hình thức Cá nhân Thời hạn nộp bài 10/05/2025, 23h59’ Nộp bài File PDF: hoctructuyen.sgu.edu.vn MSSV_Họ-tên_Seminar_HK2-2024-2025_TL Bản in: (sẽ có thông báo sau) Trang bìa (theo mẫu Trường Đại học Sài Gòn - SGU) TIỂU LUẬN HỌC PHẦN: SEMINAR CHUYÊN ĐỀ ĐỀ TÀI: PHÂN TÍCH CẢM XÚC TỪ VĂN BẢN NGẮN SỬ DỤNG RNN (RECURRENT NEURAL NETWORK) Họ và tên sinh viên: [Sinh viên điền] Mã số sinh viên: [Sinh viên điền] Lớp: [Sinh viên điền] Giảng viên: PGS. TS. Nguyễn Tuấn Đăng Mục tiêu bài toán Xây dựng mô hình sử dụng mạng nơ-ron hồi qui (RNN) để dự đoán nhãn cảm xúc (Positive, Negative, Neutral) từ văn bản ngắn của người dùng. Mô hình đơn giản, dùng SGD thay vì Adam, và yêu cầu sinh viên vẽ sơ đồ kiến trúc mạng nơ-ron để minh họa cơ chế phân tích cảm xúc. Phạm vi bài toán ● Loại văn bản: Văn bản ngắn dưới 50 từ, liên quan đến công việc hoặc học tập. ● Loại đầu ra: Nhãn cảm xúc: Positive, Negative, Neutral. ● Ví dụ: Text: "Hôm nay tôi đi làm muộn." | Output: "Negative".
Yêu cầu môi trường ● Python 3.8 trở lên. ● Thư viện: pip install torch pandas numpy nltk scikit-learn torchtext. ● Hướng dẫn: o Chạy pip install -r requirements.txt nếu dùng file requirements.txt. o Kiểm tra: python -c 'import torch; print(torch.__version__)' để xác nhận Torch hoạt động. Cách xây dựng dữ liệu ● Nguồn dữ liệu: Thu thập từ mạng xã hội (X) hoặc sinh bằng LLM với prompt: Tạo 10 văn bản ngắn (<50 từ) về cảm xúc trong công việc/học tập, kèm nhãn Positive/Negative/Neutral. ● Quy mô: Tối thiểu 500 mẫu, lưu trong sentiment_data.csv. ● Định dạng mẫu: text,label "Hôm nay tôi đi làm muộn.","Negative" "Tôi vừa hoàn thành dự án!","Positive" ● Hướng dẫn: o Dùng code data.py (xem Phụ lục A) để xử lý dữ liệu. o Đảm bảo không có dòng trống trong CSV (kiểm tra bằng data.dropna()). Xây dựng mô hình Kiến trúc 1. Input: Văn bản qua Word Embeddings (100D) → Ma trận [số từ × 100]. 2. RNN: Khối RNN với 128 hidden units, xử lý chuỗi văn bản để tạo hidden state. 3. Dense: Tầng fully connected riêng biệt, nhận hidden state từ RNN và dự đoán 3 nhãn cảm xúc (Positive, Negative, Neutral). Mục đích của code ● Code data.py (Phụ lục A): Chuẩn bị dữ liệu đầu vào cho mô hình RNN, bao gồm tokenize, xây dựng từ điển, padding, và tạo DataLoader. Sinh viên chỉ cần chạy file này. ● Code model.py (Phụ lục B): Định nghĩa mô hình bao gồm khối RNN và tầng Dense để phân tích cảm xúc từ văn bản. Sinh viên cần hoàn thiện các phần trống. ● Code train_eval.py (Phụ lục C): Huấn luyện mô hình bằng SGD (không dùng Adam) và so sánh hiệu suất giữa Pretrained và Scratch embedding. Sinh viên cần hoàn thiện các phần trống.
Thử nghiệm và so sánh ● Pretrained vs Scratch: o Pretrained: Dùng GloVe embedding. o Scratch: Embedding tự huấn luyện. ● Đánh giá: Accuracy, F1-score (macro). Yêu cầu nộp bài File PDF: ● Lý thuyết: Giới thiệu ngắn gọn về Word Embeddings và RNN. ● Sơ đồ kiến trúc: Vẽ sơ đồ minh họa kiến trúc mạng nơ-ron để phân tích cảm xúc: o Tầng Embedding: Chuyển văn bản thành vector (vocab_size × 100D). o Khối RNN: Xử lý chuỗi, tạo hidden state (100 → 128 units). o Tầng Dense: Dự đoán 3 nhãn cảm xúc từ hidden state (128 → 3). o Hướng dẫn: Dùng công cụ số (PowerPoint, Draw.io, v.v.), không chấp nhận vẽ tay. Ghi rõ kích thước mỗi tầng và luồng dữ liệu (input → Embedding → RNN → Dense → output). Đính kèm trong PDF. ● Thuyết minh: Mô tả bài toán, cách dùng data.py, giải thích code trong model.py và train_eval.py. ● Kết quả: o Bảng tổng hợp từ results.json: | Thử nghiệm | Accuracy | F1-score | Ghi chú | |------------------|----------|----------|-------------------| | Pretrained | ... | ... | | | Scratch | ... | ... | | o Nhận xét: Ví dụ, “Pretrained tốt hơn Scratch vì sao?”. ● Phụ lục: Bao gồm nội dung đầy đủ của 3 file code: o Phụ lục A: data.py. o Phụ lục B: model.py (đã hoàn thiện). o Phụ lục C: train_eval.py (đã hoàn thiện). Lưu ý: ● Đây là tiểu luận cá nhân, sinh viên phải tự hoàn thành và hiểu toàn bộ nội dung; không nộp bị 0 điểm. ● Chỉ nộp file PDF (bao gồm phụ lục với mã nguồn), không cần nộp riêng các file .py. Hướng dẫn sinh viên 1. Chuẩn bị môi trường:
o Cài đặt Python và thư viện theo "Yêu cầu môi trường". o Kiểm tra Torch hoạt động bằng lệnh cung cấp. 2. Chuẩn bị dữ liệu: o Tạo file sentiment_data.csv với ít nhất 500 mẫu theo định dạng mẫu. o Chạy data.py (Phụ lục A) để tạo train_loader và test_loader. o Kiểm tra len(vocab) để đồng bộ với vocab_size. 3. Hoàn thiện code: o Hoàn thiện model.py (Phụ lục B): Thêm embedding layer, khối RNN, tầng Dense trong __init__, viết hàm forward. o Hoàn thiện train_eval.py (Phụ lục C): Thêm loss function, optimizer SGD, các bước huấn luyện/đánh giá. o Kiểm tra: Chạy train_eval.py, đảm bảo results.json được tạo với Accuracy và F1-score. 4. Vẽ sơ đồ kiến trúc: o Dùng công cụ số (PowerPoint, Draw.io) vẽ sơ đồ: Embedding → RNN → Dense. o Ghi kích thước: Embedding (vocab_size × 100), RNN (100 → 128), Dense (128 → 3). o Minh họa luồng dữ liệu bằng mũi tên. 5. Viết báo cáo PDF: o Bao gồm lý thuyết, sơ đồ (đính kèm), thuyết minh, kết quả, nhận xét, và phụ lục với 3 file code đã hoàn thiện. o Đặt tên file: MSSV_Họ-tên_Seminar_HK2-2024-2025_TL. 6. Nộp bài: o Nộp file PDF đúng hạn qua hoctructuyen.sgu.edu.vn. Tài liệu tham khảo (APA) 1. Mikolov, T., Sutskever, I., Chen, K., Corrado, G., & Dean, J. (2013). Distributed representations of words and phrases and their compositionality. Advances in Neural Information Processing Systems, 26, 3111-3119. 2. Pennington, J., Socher, R., & Manning, C. D. (2014). GloVe: Global vectors for word representation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP), 1532-1543. https://doi.org/10.3115/v1/D14-1162 3. …