Repository lưu báo cáo + notebook cho đồ án NLP, gồm 2 phần:
- Câu 1 – RLHF / PPO: minh hoạ PPO (CartPole) và PPO cho LLMs theo hướng RLHF (TRL + Transformers).
- Câu 2 – Machine Translation (EN↔VI): so sánh mô hình tự huấn luyện (no-pretrain) và pretrained:
- GPT (no-pretrain) + SentencePiece tokenizer
- GPT-2 pretrained (fine-tune)
- Transformer (no-pretrain)
- MarianMT pretrained (Helsinki-NLP)
- Tổng quan
- Cấu trúc repo
- Tech Stack
- Datasets
- Hướng dẫn chạy
- Chi tiết từng notebook
- Ghi chú tái lập kết quả
- Nhóm thực hiện
Repo này chứa:
- Report: PDF + DOCX
- Notebooks:
- PPO trên môi trường CartPole (giúp hiểu PPO “cơ bản”)
- PPO cho LLMs (RLHF-style) với thư viện TRL/Transformers
- MT (EN-VI): huấn luyện từ đầu và fine-tune pretrained
Lưu ý: Một số notebook đang dùng đường dẫn kiểu Kaggle (
/kaggle/input/...). Khi chạy local, bạn cần thay đổi đường dẫn dữ liệu.
Khuyến nghị tổ chức lại khi public GitHub:
.
├─ README.md
├─ requirements.txt
├─ .gitignore
├─ report/
│ ├─ 52200206_52200214_52200216.pdf
│ └─ 52200206_52200214_52200216.docx
└─ notebooks/
├─ q1_ppo_cartpole.ipynb
├─ q1_ppo_llms_rlhf.ipynb
├─ q2_gpt_no_pretrain.ipynb
├─ q2_gpt2_pretrained.ipynb
├─ q2_transformer_no_pretrain.ipynb
└─ q2_marianmt_pretrained.ipynb
- Python 3.10+ (khuyến nghị)
- PyTorch (core training)
- Transformers / Datasets (Hugging Face)
- TRL (PPO / RLHF utilities)
- SentencePiece (tokenizer cho GPT no-pretrain)
- Evaluate / SacreBLEU / ROUGE (đánh giá MT)
- Gym (CartPole PPO demo)
- Jupyter / tqdm / pandas / numpy / scikit-learn
Các notebook MT (Câu 2) dùng dữ liệu song ngữ English–Vietnamese (các file train.en.txt, train.vi.txt hoặc IWSLT'15 en-vi),
nhưng dataset không nằm trong repo (để tránh nặng).
Notebook đã set sẵn đường dẫn kiểu:
/kaggle/input/data-nlp/train.en.txt/kaggle/input/data-nlp/train.vi.txt- hoặc IWSLT'15 en-vi trong
/kaggle/input/iwslt15-englishvietnamese/...
=> Chỉ cần add dataset đúng tên vào Kaggle Dataset/Notebook environment.
- Tải dữ liệu về (từ Kaggle / nguồn bạn dùng trong lớp)
- Đặt vào thư mục ví dụ:
data/mt/train.en.txtdata/mt/train.vi.txt
- Sửa trong notebook:
en_path = "data/mt/train.en.txt"vi_path = "data/mt/train.vi.txt"
Nếu bạn muốn repo “chuẩn GitHub”: thêm file
data/README.mdghi nguồn dataset + cách tải (không commit dữ liệu thô).
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activatepip install -r requirements.txtjupyter lab1) PPO CartPole
Notebook gợi ý: q1_ppo_cartpole.ipynb (từ file ppo-for-cartpole-v1.ipynb)
- Mục tiêu: hiểu PPO qua bài toán RL kinh điển (CartPole-v1)
- Thành phần: policy/value network, advantage estimation, clipping objective, training loop
- Output: reward curve / performance theo episode
2) PPO cho LLMs (RLHF-style)
Notebook gợi ý: q1_ppo_llms_rlhf.ipynb (từ file ppo_llms_rlhf.ipynb)
- Dùng Transformers + TRL để minh hoạ PPO fine-tuning cho mô hình causal LM
- Có setup dependencies (torch/transformers/trl/accelerate/peft…)
- Có bước chuẩn hoá dữ liệu song ngữ (lọc câu dài, tách train/val/test) theo notebook
Chạy local có thể cần GPU. Nếu CPU-only, hãy giảm batch size / sequence length để test logic.
Mục tiêu: so sánh hướng train từ đầu vs fine-tune pretrained.
1) GPT no-pretrain (gpt-nopre.ipynb)
- Tạo tokenizer bằng SentencePiece
- Encode dữ liệu → xây dataset → train mô hình kiểu GPT “nhỏ”
- Đánh giá bằng BLEU/ROUGE (tuỳ cell)
2) GPT-2 pretrained (GPT2.ipynb)
- Dùng tokenizer pretrained của GPT-2 + thêm special tokens (ví dụ:
[EN],[VI]) - Fine-tune mô hình GPT-2 trên tập dữ liệu EN-VI
- Đánh giá (một số cell dùng
evaluate)
3) Transformer no-pretrain (Transformer_NoPretrain.ipynb)
- Implement Transformer seq2seq (encoder-decoder) từ đầu
- Preprocess & filter sentence length
- Train + evaluate (BLEU/ROUGE tuỳ phần)
4) MarianMT pretrained (helsinki-marianmtmodel.ipynb)
- Dùng model pretrained của Helsinki-NLP (MarianMT)
- Fine-tune và đánh giá SacreBLEU
- Dataset ví dụ: IWSLT'15 en-vi (theo notebook)
- Training từ đầu (GPT/Transformer) có thể tốn thời gian; khuyến nghị GPU.
- Một số notebook cài package trực tiếp trong notebook (
pip install ...). Nếu bạn chạy local, có thể bỏ các cell đó sau khi đã dùngrequirements.txt. - Kết quả MT sẽ dao động theo seed, hyperparameters, và preprocessing. Nếu cần tái lập: set seed cho
random/numpy/torch.
- 52200206
- 52200214 – Trần Hồ Hoàng Vũ
- 52200216