Semantic Embedding • 300M · Dense Vector • LoRA • Matryoshka
Mô hình Embedding Tiếng Việt cho RAG & Semantic Search (Dự án thử nghiệm)
LeNgocTu/vietnamese-embeddinggemma-300m
Mô hình nhúng ngữ nghĩa 300 triệu tham số (LoRA trên EmbeddingGemma-300M), fine-tune cho tiếng Việt qua 5 vòng huấn luyện trên Google Colab miễn phí; STS test tăng từ 0.4945 lên 0.8203 trên tập kiểm thử nhỏ, chỉ mang tính tham khảo.
Thông số
- Mô hình gốc
- unsloth/embeddinggemma-300m (Google EmbeddingGemma-300M)
- Phương pháp fine-tune
- LoRA r=16, alpha=32 (2,85% tham số được huấn luyện)
- Kích thước vector
- Matryoshka: 768, 512, 256, 128
- Hạ tầng huấn luyện
- Google Colab miễn phí, GPU Tesla T4
- Ngôn ngữ
- Tiếng Việt, tiếng Anh
- Giấy phép
- Apache 2.0
Năng lực chính
- Hỗ trợ Matryoshka (768, 512, 256, 128 chiều): cắt xuống 128 chiều chỉ làm giảm chất lượng 0.0012.
- Dự án học tập cá nhân, chưa qua đánh giá chuẩn hóa; phù hợp để thử nghiệm tìm kiếm ngữ nghĩa và RAG tiếng Việt.
Quá trình huấn luyện
- 01Vòng 1: ViNLI-SimCSE supervised (~15 nghìn cặp), STS test 0.8070, tăng mạnh từ mức gốc 0.4945.
- 02Vòng 2: thêm ViNLI và xnli/vi, tổng ~112 nghìn cặp, STS test 0.8174.
- 03Vòng 3: thêm xnli/vi và UIT-ViQuAD2.0 (~19 nghìn cặp hỏi đáp), STS test 0.8192, MRR@10 lên 0.8452.
- 04Vòng 4: thêm 20 nghìn cặp hỏi đáp tổng hợp sinh từ Wikipedia tiếng Việt và ~11 nghìn hard negative; STS test 0.8186 (giảm nhẹ), Hard Neg Gap lên 0.3264.
- 05Vòng 5: tinh chỉnh cuối chỉ với Vi-STS (không thêm dữ liệu), STS test 0.8203, cao nhất toàn bộ quá trình.
- 06Mỗi vòng có 2 giai đoạn: MatryoshkaLoss với MultipleNegativesRankingLoss, rồi MatryoshkaLoss với CoSENTLoss.
Kết quả đánh giá (bản cuối)
Đo trên tập test nhỏ (doanhieung/vi-stsbenchmark), chỉ mang tính tham khảo, chưa qua đánh giá chuẩn hóa.
- STS test (mức gốc 0.4945)
- 0.8203
- STS dev
- 0.8523
- MRR@10
- 0.8441
- Hard Neg Gap
- 0.3473
- Suy giảm khi cắt xuống 128 chiều
- 0.0012
Cách dùng nhanh
Dùng với Sentence Transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("LeNgocTu/vietnamese-embeddinggemma-300m")
# Dim mặc định 768
embeddings = model.encode(["Xin chào Việt Nam", "Hà Nội là thủ đô"])
# Matryoshka: chọn kích thước nhỏ hơn
embeddings_256 = model.encode(["Xin chào"], truncate_dim=256)Hạn chế
- Dự án học tập cá nhân, thực hiện trong thời gian rảnh trên Google Colab miễn phí.
- Kết quả đo trên tập test nhỏ, chỉ mang tính tham khảo, chưa qua đánh giá chuẩn hóa.
Ghi nhận và nguồn gốc
- Google DeepMind: mô hình nền EmbeddingGemma-300M. Unsloth: bản embeddinggemma-300m tối ưu và thư viện fine-tune.
- Sentence Transformers (UKP Lab): framework huấn luyện với MatryoshkaLoss, MNRL và CoSENTLoss. Google Colab: GPU T4 miễn phí.
- Bộ dữ liệu: anti-ai/ViNLI-SimCSE-supervised, taidng/UIT-ViQuAD2.0, doanhieung/vi-stsbenchmark, xnli/vi và wikimedia/wikipedia (tiếng Việt).
