Lê Ngọc Tú← Về trang chủ

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

  1. 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.
  2. 02Vòng 2: thêm ViNLI và xnli/vi, tổng ~112 nghìn cặp, STS test 0.8174.
  3. 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.
  4. 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.
  5. 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.
  6. 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).

Trao đổi về mô hình này

Nếu bạn muốn dùng hoặc đánh giá mô hình này, hãy liên hệ trực tiếp.