Views
No views yet
BAAI/bge-reranker-v2-m3
(568M params), supervises the tiny student
cross-encoder/mmarco-mMiniLMv2-L12-H384-v1
on in-domain Indonesian (query, positive, negative) triplets from TyDi QA and
MIRACL-id (with BM25 + dense hard-negative mining). The student learns the
teacher's score margin between relevant and non-relevant passages.pytrec_eval):| model | params | nDCG@10 | MRR@10 | Recall@100 |
|---|---|---|---|---|
cross-encoder/mmarco-mMiniLMv2-L12-H384-v1 (base) | tiny | 0.656 | 0.623 | 0.760 |
| this model (in-domain distillation) | tiny | 0.701 | 0.677 | 0.760 |
BAAI/bge-reranker-v2-m3 (teacher) | 568M | 0.712 | 0.689 | 0.760 |
dev queries (BM25 top-100
→ rerank). Every reranker is scored with the same harness, the same BM25
candidates, and the same metric implementation, so the comparison is
apples-to-apples. NVIDIA and Cohere were called through the OpenRouter rerank API.| reranker | nDCG@10 | MRR@10 | cost / availability |
|---|---|---|---|
| BM25 (no rerank) | 0.393 | 0.330 | — |
| this model (int8 ONNX, CPU) | 0.655 | 0.633 | free · local · offline |
nvidia/llama-nemotron-rerank-vl-1b-v2 | 0.656 | 0.632 | hosted API |
cohere/rerank-v3.5 | 0.664 | 0.636 | paid API |
cohere/rerank-4-pro | 0.665 | 0.640 | paid API |
Honesty note: the absolute scores in this comparison are slightly lower than the 0.701 reported above because this is a 300-query slice scored with flashIndorank's own metric harness, not the full 960-querypytrec_evalrun. The relative standing (≈ NVIDIA, just under Cohere) is the point. A smaller 30-query slice was even noisier and is not a reliable signal — prefer these 300-query (or the full 960) numbers.
1from sentence_transformers import CrossEncoder
2
3model = CrossEncoder("madebyaris/rerank-indonesia")
4query = "Bagaimana cara menurunkan berat badan?"
5passages = [
6 "Olahraga teratur dan pola makan sehat membantu mengurangi bobot tubuh.",
7 "Harga emas global naik tajam dalam sepekan terakhir.",
8]
9scores = model.predict([[query, p] for p in passages])
10print(scores)1from huggingface_hub import snapshot_download
2from flashindorank import CustomReranker
3from flashrank import RerankRequest
4
5path = snapshot_download("madebyaris/rerank-indonesia", allow_patterns=["onnx/*"])
6ranker = CustomReranker(f"{path}/onnx")
7out = ranker.rerank(RerankRequest(
8 query="Bagaimana cara menurunkan berat badan?",
9 passages=[{"id": 1, "text": "Olahraga teratur dan pola makan sehat membantu mengurangi bobot tubuh."}],
10))
11print(out)cross-encoder/mmarco-mMiniLMv2-L12-H384-v1BAAI/bge-reranker-v2-m3label = teacher(q, pos) - teacher(q, neg)MarginMSELoss (CrossEncoderTrainer)BAAI/bge-reranker-v2-gemma) or an ensemble of teacher margins to raise the
distillation ceiling above the current ~0.712.Recall@100 (~0.71–0.76 here). A better retriever (multilingual-e5 / BGE-M3 dense,
or hybrid BM25+dense) raises the candidates the reranker sees — likely a bigger
end-to-end win than any reranker tweak.max_length (256) materially reduce CPU latency and RAM.