Instructions to use LeNgocTu/vietnamese-embeddinggemma-300m with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use LeNgocTu/vietnamese-embeddinggemma-300m with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("LeNgocTu/vietnamese-embeddinggemma-300m") sentences = [ "The weather is lovely today.", "It's so sunny outside!", "He drove to the stadium." ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [3, 3] - Notebooks
- Google Colab
- Kaggle
🇻🇳 Vietnamese EmbeddingGemma-300M
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
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 — linh hoạt kích thước
embeddings_512 = model.encode(["Xin chào"], truncate_dim=512)
embeddings_256 = model.encode(["Xin chào"], truncate_dim=256)
embeddings_128 = model.encode(["Xin chào"], truncate_dim=128)
Qua Ollama (GGUF):
ollama pull hf.co/LeNgocTu/vietnamese-embeddinggemma-300m-GGUF
🗂️ Quá trình Training
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
- Stage 1: MatryoshkaLoss(MNRL) — 1 epoch
- Stage 2: MatryoshkaLoss(CoSENTLoss) — 10 epochs, LR=5e-6
- Kết quả: STS test 0.8070 — tăng mạnh từ baseline 0.4945
Vòng 2 — Mở rộng dữ liệu
- Data: ViNLI (
65K thêm) +32K) = tổng ~112K pairsxnli/vi( - 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) +19K QA pairs)taidng/UIT-ViQuAD2.0( - 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/wikipediatiếng Việt bởigemma4:31b-cloudqua 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ỏ
- Config: CoSENTLoss, 20 epochs, LR=5e-7, batch=64, load_best_model_at_end=True
- Kết quả: STS test 0.8203 — cao nhất toàn bộ quá trình
📊 Kết quả Đánh giá
Kết quả đ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.
| Metric | Vòng 1 | Vòng 2 | Vòng 3 | Vòng 4 | Final |
|---|---|---|---|---|---|
| STS test | 0.8070 | 0.8174 | 0.8192 | 0.8186 | 0.8203 |
| STS dev | 0.8492 | 0.8502 | 0.8505 | 0.8515 | 0.8523 |
| MRR@10 | 0.8361 | 0.8361 | 0.8452 | 0.8426 | 0.8441 |
| Hard Neg Gap | 0.2172 | 0.2688 | 0.3125 | 0.3264 | 0.3473 |
| MRL drop 128 | 0.0070 | 0.0035 | 0.0022 | 0.0008 | 0.0012 |
🏗️ Kiến trúc Training
Pipeline 2 stage mỗi vòng:
Stage 1: MatryoshkaLoss(MultipleNegativesRankingLoss)
→ Học phân biệt positive/negative pairs
→ Effective batch = 128 (batch 16 × accum 8)
Stage 2: MatryoshkaLoss(CoSENTLoss)
→ Calibrate theo STS similarity scores
→ Batch = 32-64, load_best_model_at_end=True
Matryoshka dims: [768, 512, 256, 128]
- Cho phép dùng embedding nhỏ hơn mà không cần train lại
- MRL drop 768→128 chỉ 0.0012 ở bản final
LoRA config:
r = 16, lora_alpha = 32
Trainable params: 8,896,512 / 311,759,616 (2.85%)
🗄️ Dữ liệu Tổng hợp (Vòng 4)
Script sinh data: generate_vi_synthetic.py
Model sinh: gemma4:31b-cloud (qua Ollama local)
Nguồn: wikimedia/wikipedia (tiếng Việt)
Số passages: 6,667
Pairs/pass: 3 câu hỏi × 6,667 = 20,000 pairs
Thời gian: 9.4 giờ | Tốc độ: 2,135 pairs/giờ
Failed: 0 (0%)
Delay: 3 giây/request (tránh rate limit)
Format: anchor (câu hỏi) / positive (passage) / negative (passage khác)
📁 Files trong Repo
| File | Mô tả |
|---|---|
adapter_model.safetensors |
LoRA weights (16.8 MB) — phần đã được fine-tune |
adapter_config.json |
Cấu hình LoRA (r=16, alpha=32) |
tokenizer.json |
Tokenizer của Gemma3 |
config_sentence_transformers.json |
Cấu hình SentenceTransformers |
1_Pooling/ |
Pooling layer config |
2_Dense/ |
Dense projection layer |
3_Dense/ |
Dense projection layer |
Base model (~300MB) không lưu trong repo — được tải tự động từ
unsloth/embeddinggemma-300mkhi khởi tạo.
💾 GGUF Version
Phiên bản quantized để dùng offline qua Ollama:
# Pull từ HuggingFace
ollama pull hf.co/LeNgocTu/vietnamese-embeddinggemma-300m-GGUF
# Hoặc Ollama Hub
ollama pull denva099/vi_gemma_embedding
| Quantization | Size | Ghi chú |
|---|---|---|
| Q8_0 | ~313 MB | Chất lượng cao nhất |
| Q4_K_M | ~170 MB | Nhỏ gọn hơn |
📝 Ghi chú
Đây là dự án học tập — thực hiện trong thời gian rảnh trên Colab Free. Một số điều rút ra trong quá trình:
- Data quality quan trọng hơn quantity (vòng 4 thêm 20K synthetic nhưng STS không tăng nhiều, Hard Neg Gap lại cải thiện rõ)
- Vòng 5 chỉ tinh chỉnh nhẹ nhưng lại cho kết quả STS tốt nhất
- Hard Neg Gap tăng từ 0.2172 → 0.3473 qua 5 vòng cho thấy mô hình học phân biệt ngữ nghĩa ngày càng tốt hơn
🙏 Cảm ơn (Acknowledgments)
Dự án này được xây dựng dựa trên công sức của nhiều cá nhân và tổ chức trong cộng đồng mã nguồn mở:
- Google DeepMind — phát triển mô hình nền tảng EmbeddingGemma-300M
- Unsloth — bản embeddinggemma-300m tối ưu cùng framework fine-tune nhanh, tiết kiệm VRAM
- Sentence Transformers (UKP Lab) — framework huấn luyện embedding với MatryoshkaLoss, MNRL và CoSENTLoss
- Google Colab — hạ tầng GPU Tesla T4 miễn phí cho toàn bộ quá trình training
- Các tác giả bộ dữ liệu:
anti-ai/ViNLI-SimCSE-supervisedtaidng/UIT-ViQuAD2.0doanhieung/vi-stsbenchmarkxnli/vivàwikimedia/wikipedia(phần tiếng Việt)
- Ollama — chạy
gemma4:31b-cloudđể sinh dữ liệu tổng hợp và phục vụ bản GGUF
Cảm ơn cộng đồng AI/NLP tiếng Việt đã chia sẻ dữ liệu và kiến thức để các dự án cá nhân như thế này trở nên khả thi.
👤 Tác giả
Fine-tune và biên soạn bởi Lê Ngọc Tú.
- GitHub: github.com/Le-Ngoc-Tu
- Website: lengoctu.com
- Email: lntu2003.dev@gmail.com
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.
- Downloads last month
- 17
Model tree for LeNgocTu/vietnamese-embeddinggemma-300m
Base model
unsloth/embeddinggemma-300m