Skip to content
lqb464Public

About

Viet2Eng xây dựng hệ thống dịch máy Việt-Anh từ đầu bằng Seq2Seq với RNN, GRU, LSTM, Bahdanau/Luong Attention, BPE và Beam Search. Repo bao gồm quy trình dữ liệu, huấn luyện và suy luận bằng PyTorch, cùng kết quả thực nghiệm trên IWSLT 2015 để hỗ trợ tái lập và khảo sát các thành phần mô hình.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

51 Commits

Folders and files

Repository files navigation

Viet2Eng

Hệ thống dịch máy Việt–Anh từ đầu

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.

Luồng xử lý của hệ thống dịch máy

Điểm nổi bật

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

Kết quả thực nghiệm

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.

So sánh BLEU và cấu hình tốt nhất

Đườ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:

Đường cong train loss

Tài liệu đồ á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:

Thiết kế

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

Bắt đầu

1. Cài môi trường

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

Kích hoạt môi trường:

# Windows PowerShell
.venv\Scripts\Activate.ps1
# macOS / Linux
source .venv/bin/activate

Cài dependencies:

python -m pip install --upgrade pip
python -m pip install -r requirements.txt

2. Chuẩn bị dữ liệu

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

3. Huấn luyện

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 false

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

4. Đánh giá và dịch

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 5

Dị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

Giới hạn

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

Giấy phép và nguồn hình

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.

About

Viet2Eng xây dựng hệ thống dịch máy Việt-Anh từ đầu bằng Seq2Seq với RNN, GRU, LSTM, Bahdanau/Luong Attention, BPE và Beam Search. Repo bao gồm quy trình dữ liệu, huấn luyện và suy luận bằng PyTorch, cùng kết quả thực nghiệm trên IWSLT 2015 để hỗ trợ tái lập và khảo sát các thành phần mô hình.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages