Dự án học tập cá nhân — thử nghiệm fine-tune mô hình embedding văn bản tiếng Việt từ nền tảng EmbeddingGemma-300M của Google qua 5 vòng huấn luyện liên tiếp.
📦 Quick Start
python
1from sentence_transformers import SentenceTransformer
23model = SentenceTransformer("LeNgocTu/vietnamese-embeddinggemma-300m")45# Dim mặc định 7686embeddings = model.encode(["Xin chào Việt Nam","Hà Nội là thủ đô"])78# Matryoshka — linh hoạt kích thước9embeddings_512 = model.encode(["Xin chào"], truncate_dim=512)10embeddings_256 = model.encode(["Xin chào"], truncate_dim=256)11embeddings_128 = model.encode(["Xin chào"], truncate_dim=128)
Toàn bộ thực hiện trên Google Colab Free (GPU Tesla T4) với Unsloth + SentenceTransformers framework. Mỗi vòng load lại LoRA từ vòng trước rồi train tiếp.
Vòng 1 — Nền tảng cơ bản
Data:anti-ai/ViNLI-SimCSE-supervised (~15K pairs)
Mục đích: Kiểm tra xem mô hình có thể học tiếng Việt từ NLI pairs không
Mục đích: Kiểm tra xem nhiều data hơn có cải thiện không
Kết quả: STS test 0.8174 (+0.0104 so vòng 1)
Vòng 3 — Cải thiện Retrieval
Data:xnli/vi (~48K phần mới) + taidng/UIT-ViQuAD2.0 (~19K QA pairs)
Mục đích: ViQuAD là dữ liệu hỏi đáp thực tế — kỳ vọng cải thiện khả năng tìm tài liệu
Kết quả: STS test 0.8192, MRR@10 tăng lên 0.8452 — retrieval cải thiện rõ
Vòng 4 — Thử nghiệm Synthetic Data
Data:xnli/vi (~25K phần mới) + 20K QA tổng hợp + Hard Neg mined (~11K)
Synthetic data: Sinh từ wikimedia/wikipedia tiếng Việt bởi gemma4:31b-cloud qua Ollama — mỗi đoạn văn tạo 3 câu hỏi, 6,667 passages × 3 = 20,000 pairs, tỉ lệ thất bại 0%
Mục đích: Xem data tổng hợp chất lượng cao có bổ sung được gì không
Kết quả: STS test 0.8186 (giảm nhẹ 0.0006), Hard Neg Gap tăng lên 0.3264
Vòng 5 — Tinh chỉnh cuối (Final)
Data: Không thêm data mới — chỉ dùng Vi-STS (doanhieung/vi-stsbenchmark)
Mục đích: Calibrate lại sau vòng 4, tìm điểm tốt nhất qua nhiều epoch nhỏ
Nếu bạn dùng mô hình này cho nghiên cứu hoặc sản phẩm, một dòng ghi nhận (credit) là rất được trân trọng. Mọi góp ý, báo lỗi hay thảo luận đều hoan nghênh.