Hệ thống dịch máy thần kinh Việt → Anh được xây dựng theo kiến trúc Seq2Seq. Các thành phần cốt lõi như RNN/GRU/LSTM, Attention, BPE tokenizer, bộ tối ưu và Beam Search được nhóm tự cài đặt bằng các phép toán tensor cơ bản của PyTorch.
- Encoder–Decoder Seq2Seq với RNN, GRU hoặc LSTM; hỗ trợ nhiều tầng và hai chiều.
- Bahdanau Attention và Luong Attention, có thể bật/tắt để so sánh.
- BPE tokenizer tự cài đặt; hỗ trợ từ vựng dùng chung giữa hai ngôn ngữ.
- Tự cài đặt SGD, Adam/AdamW, label-smoothed cross-entropy, warmup và gradient clipping.
- Huấn luyện có đánh giá BLEU/ROUGE, early stopping, lưu/khôi phục checkpoint và tùy chọn ghi log W&B.
- Suy luận bằng Beam Search.
Số liệu dưới đây được trích từ báo cáo và slide đồ án Nhóm 3 (2025), trên thí nghiệm IWSLT 2015. Đây là kết quả đã báo cáo, không phải lần huấn luyện lại trong repo này.
| Cấu hình | Attention | Hai chiều | BLEU |
|---|---|---|---|
| LSTM, 1 tầng | Không | Không | 5.026 |
| LSTM, 2 tầng | Không | Có | 5.468 |
| GRU, 1 tầng | Không | Không | 6.130 |
| GRU, 2 tầng | Không | Có | 7.205 |
| LSTM, 1 tầng | Luong | Không | 13.876 |
| LSTM, 2 tầng | Luong | Có | 18.707 |
| GRU, 1 tầng | Bahdanau | Không | 18.259 |
| GRU, 2 tầng | Bahdanau | Có | 19.662 |
Cấu hình tốt nhất đạt BLEU 19.662 và ROUGE-L 50.191, vượt ngưỡng tham chiếu BLEU 10 được đặt trong đồ án. Kết quả cho thấy Attention tạo ra khác biệt lớn so với các cấu hình không Attention.
Đường loss của các cấu hình được báo cáo giảm ổn định trong quá trình huấn luyện:
Báo cáo và slide thuyết trình Nhóm 3 chứa mô tả thí nghiệm, kết quả và số liệu được tham khảo trong README:
Mô hình xử lý câu nguồn qua BPE, Encoder, Attention và Decoder; Beam Search chọn chuỗi đầu ra. PyTorch được dùng cho tensor và tính gradient tự động, còn các lớp học sâu cấp cao như torch.nn và torch.optim không được dùng cho phần cài đặt lõi.
| Thành phần | Vị trí |
|---|---|
| Dataset, batching và BPE tokenizer | src/data/ |
| RNN cells, Encoder, Decoder, Attention, Seq2Seq | src/models/ |
| Loss, optimizer, scheduler, huấn luyện và metric | src/training/ |
| Tạo mô hình/dataloader/tokenizer | src/factories.py |
| Dịch văn bản bằng checkpoint | src/builders/ |
| Lệnh train, evaluate, translate | scripts/ |
| Cấu hình mặc định | configs/default.yaml |
Yêu cầu Python 3.10 trở lên. Dùng môi trường ảo để cài các thư viện cần thiết:
git clone https://github.com/lqb464/Viet2Eng.git
cd Viet2Eng
python -m venv .venvKích hoạt môi trường:
# Windows PowerShell
.venv\Scripts\Activate.ps1# macOS / Linux
source .venv/bin/activateCài dependencies:
python -m pip install --upgrade pip
python -m pip install -r requirements.txtDữ liệu không được đóng gói trong repo. Tạo các tệp JSONL cho train, validation và test; mỗi dòng là một cặp câu với khóa vi và en:
{"vi": "Xin chào.", "en": "Hello."}Với --direction vi2en, mô hình đọc vi làm câu nguồn và en làm câu đích. Mặc định tokenizer dùng chung BPE vocabulary 8.000 token và bỏ các câu vượt max_src_len/max_tgt_len (mặc định 150).
Báo cáo ghi nhận 133.071 cặp IWSLT 2015 sau bước lọc độ dài. Repo không chứa bản dữ liệu hoặc thông tin chia tập, vì vậy hãy cung cấp đúng các tệp dữ liệu bạn có quyền sử dụng.
Ví dụ chạy cấu hình tốt nhất được báo cáo. Thay đường dẫn dữ liệu bằng các tệp JSONL của bạn:
python scripts/train.py \
--model_factory src.factories:build_model \
--train_dataloader_factory src.factories:build_train_dataloader \
--eval_dataloader_factory src.factories:build_eval_dataloader \
--tokenizer_factory src.factories:build_tokenizer \
--train_file data/processed/train.jsonl \
--eval_file data/processed/valid.jsonl \
--direction vi2en \
--tokenizer_cache_dir checkpoints/tokenizers \
--output_dir checkpoints \
--num_epochs 15 \
--learning_rate 3e-4 \
--batch_size 64 \
--num_layers 2 \
--cell_type gru \
--attention_type bahdanau \
--bidirectional true \
--optimizer_type adam \
--wandb_enabled falseCheckpoint tốt nhất được lưu tại checkpoints/best_model.pt; checkpoint mới nhất dùng để tiếp tục huấn luyện là checkpoints/last_checkpoint.pt. Để bật W&B, đặt WANDB_API_KEY trong môi trường và thêm --wandb_enabled true.
Tính BLEU trên tệp test:
python scripts/evaluate.py \
--checkpoint checkpoints/best_model.pt \
--tokenizer_cache_dir checkpoints/tokenizers \
--test_file data/processed/test.jsonl \
--direction vi2en \
--num_beams 5Dịch từng câu trong tệp văn bản, mỗi câu một dòng:
python scripts/translate.py \
--checkpoint checkpoints/best_model.pt \
--tokenizer_cache_dir checkpoints/tokenizers \
--direction vi2en \
--input_file input.txt \
--output_file translations.txt \
--num_beams 5Đây là đồ án nghiên cứu và hiện thực hóa kiến trúc Seq2Seq từ đầu, không nhằm thay thế các hệ thống dịch máy hiện đại. Báo cáo ghi nhận lỗi về thì, tên riêng, HTML entity và độ tự nhiên của câu; RNN cũng xử lý tuần tự nên chậm hơn Transformer.
Mã nguồn được phát hành theo giấy phép MIT. Các hình trong figures/ được trích từ slide đồ án Nhóm 3 (2025); hai PDF nguồn không được đưa vào repo.


