th1nhng0/vietnamese-legal-documents
Viewer β’ Updated β’ 2.41M β’ 2.46k β’ 40
How to use mainguyen9/vietlegal-harrier-0.6b with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("mainguyen9/vietlegal-harrier-0.6b")
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]A Vietnamese legal domain embedding model fine-tuned from microsoft/harrier-oss-v1-0.6b (600M params, 1024-dim).
Achieves NDCG@10 = 0.7813 on the Zalo AI Legal Text Retrieval benchmark, outperforming all baselines including our previous vietlegal-e5 model.
Evaluated on MTEB ZacLegalTextRetrieval (61.4K corpus documents, 818 test queries).
| Model | Params | Dim | NDCG@10 | MRR@10 | Recall@10 |
|---|---|---|---|---|---|
| mainguyen9/vietlegal-harrier-0.6b | 600M | 1024 | 0.7813 | 0.7303 | 0.9321 |
| mainguyen9/vietlegal-e5 (mE5-large) | 560M | 1024 | 0.7310 | 0.6770 | 0.8972 |
| mainguyen9/vietlegal-harrier-270m | 270M | 1024 | 0.7174 | 0.6636 | 0.8864 |
| microsoft/harrier-oss-v1-0.6b | 600M | 1024 | 0.7210 | - | - |
| intfloat/multilingual-e5-large | 560M | 1024 | 0.6660 | - | - |
| bkai-foundation-models/vietnamese-bi-encoder | 135M | 768 | 0.6160 | - | - |
| contextboxai/halong_embedding | 278M | 768 | 0.6009 | - | - |
Key highlights:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("mainguyen9/vietlegal-harrier-0.6b")
# Harrier uses instruction-based queries
queries = ["Instruct: Given a Vietnamese legal question, retrieve relevant legal passages that answer the question\nQuery: Thu tuc dang ky kinh doanh gom nhung buoc nao?"]
passages = ["Dieu 27. Trinh tu, thu tuc dang ky doanh nghiep..."]
q_emb = model.encode(queries)
p_emb = model.encode(passages)
similarity = q_emb @ p_emb.T
SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: Qwen3Model
(1): Pooling({'word_embedding_dimension': 1024, 'pooling_mode_lasttoken': True})
(2): Normalize()
)
Stage 1: Data Preparation
| 518K docs -> ~500K chunks (article-aware segmentation)
|
Stage 2: Contrastive Fine-tuning (Round 1)
| MultipleNegativesRankingLoss
|
Stage 3: Hard Negative Mining
| FAISS retrieval -> mine rank 50-100 as hard negatives
|
Stage 4: Multi-task Blending (Final)
| 70% retrieval + 20% classification + 10% STS
| -> Final model (NDCG@10 = 0.7813)
@misc{vietlegal-harrier,
title={VietLegal-Harrier-0.6B: Vietnamese Legal Domain Embedding Model},
author={Nguyen, Mai},
year={2026},
url={https://huggingface.co/mainguyen9/vietlegal-harrier-0.6b}
}
Base model
microsoft/harrier-oss-v1-0.6b