ENVI-NMT — Transformer En→Vi tự viết từ đầu
Đồ án môn học. Toàn bộ kiến trúc do nhóm tự cài bằng PyTorch thuần — không dùng
nn.Transformer, nn.MultiheadAttention, F.scaled_dot_product_attention,
nn.LayerNorm hay nn.RMSNorm.
| Kiến trúc | Transformer Encoder–Decoder, 47.955.968 tham số |
| Chuẩn hóa | RMSNorm, Pre-Norm |
| Feed-forward | SwiGLU (d_ff 688) |
| Mã hóa vị trí | RoPE (chỉ cho self-attention) |
| Dữ liệu | IWSLT 2015 En-Vi, 131.339 cặp câu |
| Tokenizer | BPE 32k dùng chung En+Vi |
| Seed | 42 |
⚠️ ĐÂY KHÔNG PHẢI MODEL CỦA transformers
Không dùng được AutoModel.from_pretrained(...). Kiến trúc là mã tự viết của nhóm
nên phải có src/nmt/ mới dựng lại được mô hình.
Cách tải và dùng
git clone https://github.com/giabaomaidev/bku-project
cd bku-project
pip install -r requirements.txt
from huggingface_hub import hf_hub_download
import sys; sys.path.insert(0, "src")
from nmt.utils import nap_config
from nmt.model.transformer import TransformerNMT
from nmt.training.checkpoint import nap_checkpoint
from nmt.data import nap_tokenizer
REPO = "mgbao/envi-nmt-scratch-transformer"
# Tokenizer PHẢI lấy đúng bản này. Tự train lại sẽ ra token ID khác và mô hình
# nạp vào cho ra rác mà không báo lỗi gì.
duong_dan_tok = hf_hub_download(REPO, "artifacts/tokenizer/tokenizer.json")
duong_dan_ck = hf_hub_download(REPO, "checkpoints/iwslt_base_v1_seed42/tot_nhat.pt")
cfg = nap_config("configs/base.yaml")
model = TransformerNMT(cfg)
thong_tin = nap_checkpoint(duong_dan_ck, model, map_location="cpu")
model.eval()
print(thong_tin) # buoc, epoch, loss_dev, che_do
Dịch thử:
import torch
from nmt.inference.search import greedy_search
tok = nap_tokenizer(duong_dan_tok)
ids = torch.tensor([tok.encode("I love machine translation.").ids])
mask = torch.ones(1, 1, 1, ids.size(1), dtype=torch.bool)
ket_qua = greedy_search(model, ids, mask, bos_id=2, eos_id=3, do_dai_toi_da=128)
print(tok.decode(ket_qua[0].tolist(), skip_special_tokens=True))
Huấn luyện lại từ đầu
python scripts/prepare_data.py --config configs/base.yaml
python scripts/train_tokenizer.py --config configs/base.yaml
python scripts/train.py --config configs/base.yaml --seed 42 --tu-dau
Bố cục repo này
checkpoints/<tên lượt chạy>/moi_nhat.pt bản mới nhất, để chạy tiếp
checkpoints/<tên lượt chạy>/tot_nhat.pt bản tốt nhất theo loss dev
logs/<tên lượt chạy>/metrics.csv đường loss
configs/<tên lượt chạy>.yaml cấu hình đã gộp của lượt đó
artifacts/tokenizer/tokenizer.json DÙNG CHUNG cho mọi lượt
smoke/... smoke test, KHÔNG phải kết quả thật