A multilingual sentence-embedding model fine-tuned from
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
for
Uzbek semantic search and retrieval, including cross-lingual uz↔en.
This model demonstrates the large gain achievable when the base model is weak at the
target language. The base MiniLM handles Uzbek poorly (Recall@1 = 0.26); after one epoch
on Uzbek pairs it reaches Recall@1 = 0.97. The companion flagship
sukhrobnurali/uzbek-e5-small
starts from a stronger base and is the recommended model for cross-lingual work.
1from sentence_transformers import SentenceTransformer
2
3model = SentenceTransformer("sukhrobnurali/uzbek-minilm")
4
5query = ["O'zbekistonning poytaxti qaysi shahar?"]
6passages = [
7 "Toshkent — O'zbekiston Respublikasining poytaxti va eng yirik shahri.",
8 "Samarqand — O'zbekistondagi qadimiy shaharlardan biri.",
9]
10
11q_emb = model.encode(query, normalize_embeddings=True)
12p_emb = model.encode(passages, normalize_embeddings=True)
13scores = q_emb @ p_emb.T
14print(scores) # highest score on the Tashkent passage
The same protocol is applied to the base and fine-tuned models so the delta is a fair
comparison. Both held-out sets are disjoint from training: the retrieval split is the
dataset's wiki_retrieval_eval/test; FLORES+ training only ever sees dev (via the
dataset's validation split), so devtest stays clean.
Fine-tuning nearly closes the monolingual gap — the fine-tuned MiniLM (R@1 = 0.969) almost
matches the e5 baseline (0.987). On cross-lingual FLORES it still trails the e5 family
(0.85 vs 0.99), so prefer uzbek-e5-small when uz↔en accuracy matters most.
No prefixes are applied for this model family.
Fixed seed (42); 1 epoch of
MultipleNegativesRankingLoss with in-batch negatives,
batch size 192, lr 2e-5, 10% warmup,
max_seq_length=192, bf16 on Ampere. All
hyperparameters live in
config.py; training and evaluation scripts are in the
training repository.