CoolFace
Modelpublic

vrashad/az-legal-retrieval-xlm

sourceHugging Faceapache-2.0updated 7mo agoView on Hugging Face
2likes1.2kdownloads
Model Card

az-legal-retrieval-xlm

A sentence embedding model fine-tuned on Azerbaijani legislation for legal information retrieval. Built on xlm-roberta-base (278M params) and trained on 780K+ query-passage pairs with BM25-mined hard negatives scored by a cross-encoder reranker.

Matches BGE-m3 (568M) on MRR@10 while being 2x smaller and 4x faster.

Benchmark Results

Evaluated on 939 independent LLM-generated and validated queries over 262K legislative passages:

ModelParamsR@1R@10MRR@10NDCG@10
az-legal-retrieval-xlm278M0.2910.5730.3810.427
BAAI/bge-m3568M0.2820.5950.3810.432
intfloat/multilingual-e5-large560M0.2320.5210.3210.369
intfloat/multilingual-e5-base278M0.1890.4560.2710.315

Usage

python
from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("vrashad/az-legal-retrieval-xlm")

query = "Şərab istehsalı növləri hansılardır?"
passages = [
    "Hazırlanma texnologiyalarına görə şərablar təbii və xüsusi olur.",
    "Torpaq vergisi torpaq sahəsinin ölçüsünə görə müəyyən edilir.",
]

q_emb = model.encode(query, normalize_embeddings=True)
p_embs = model.encode(passages, normalize_embeddings=True)
scores = util.cos_sim(q_emb, p_embs)[0]

for passage, score in zip(passages, scores):
    print(f"{score:.4f} | {passage}")

Training

ParameterValue
Base modelxlm-roberta-base
Training data780K query-passage pairs (3 query types × 262K chunks)
Hard negatives7 per query (BM25 + cross-encoder scored)
LossMultipleNegativesRankingLoss
Epochs3
Batch size8
Max seq length512
HardwareRTX 4090 (24GB)
Training time~24.5 hours

Dataset

Training data: LocalDoc/azerbaijan_legislation_queries_passages

Source corpus: LocalDoc/azerbaijan_legislation

Contact

vrashad — v.resad.89@gmail.com