How to use from the
Use from the
sentence-transformers library
from sentence_transformers import CrossEncoder

model = CrossEncoder("olaverse/mist-reranker-22.7M")

query = "Which planet is known as the Red Planet?"
passages = [
	"Venus is often called Earth's twin because of its similar size and proximity.",
	"Mars, known for its reddish appearance, is often referred to as the Red Planet.",
	"Jupiter, the largest planet in our solar system, has a prominent red spot.",
	"Saturn, famous for its rings, is sometimes mistaken for the Red Planet."
]

scores = model.predict([(query, passage) for passage in passages])
print(scores)

mist models

mist-reranker-22.7M

A compact, fast English cross-encoder reranker. It scores a (query, passage) pair directly and reorders the top-k candidates from a first-stage retriever — the second stage of a search / RAG pipeline. At ~22.7M parameters it runs comfortably on a single modest GPU or CPU, and recovers most of the ranking quality of rerankers an order of magnitude larger.

📄 Model details

Property mist-reranker-22.7M
Type Cross-encoder reranker (single relevance score)
Total parameters ~22.7M
Backbone cross-encoder/ms-marco-MiniLM-L6-v2 (MiniLM-L6-H384)
Layers 6
Hidden size 384
Vocabulary size 30,522
Output 2-class logits → relevance = softmax(logits)[:, 1]
Max sequence length 512
Training precision BF16
Language English
License Apache-2.0

Training: fine-tuned on olaverse/reranker-general-en-llm-judged (pairs-graded, 844k pairs) with a hybrid objective — binary cross-entropy on the LLM-judge relevance label, plus an auxiliary term distilling the continuous teacher score from BAAI/bge-reranker-v2-m3.

🏃 How to run

Install sentence-transformers:

pip install -U sentence-transformers

This is a 2-class head, so relevance is the positive-class probability, softmax(logits)[:, 1]:

import torch
from sentence_transformers import CrossEncoder

model = CrossEncoder("olaverse/mist-reranker-22.7M")

query = "who wrote hamlet"
passages = [
    "Hamlet is a tragedy written by William Shakespeare around 1600.",
    "The capital of France is Paris.",
    "Macbeth is one of Shakespeare's shortest tragedies.",
]

logits = model.predict([[query, p] for p in passages], convert_to_tensor=True)
scores = torch.softmax(logits, dim=-1)[:, 1]          # relevance = P(relevant)

for p, s in sorted(zip(passages, scores.tolist()), key=lambda x: -x[1]):
    print(f"{s:.4f}  {p}")

To rerank a retrieved candidate list, score every candidate against the query and sort by the relevance score descending. Keep query first and passage second in each pair — the model is trained on that order.

📈 Performance

NanoBEIR (NanoNQ, NanoHotpotQA, NanoFEVER), NDCG@10. Every reranker reorders the same candidate sets; the candidate order before reranking (first-stage floor) scores 0.7126.

Model Params NDCG@10
BAAI/bge-reranker-v2-m3 ~568M 0.9058
cross-encoder/ms-marco-MiniLM-L12-v2 ~33M 0.8670
mist-reranker-22.7M ~22.7M 0.8543
cross-encoder/ms-marco-MiniLM-L6-v2 ~22.7M 0.8495
BAAI/bge-reranker-base ~278M 0.8238
mixedbread-ai/mxbai-rerank-xsmall-v1 ~70M 0.8184
first-stage floor (no reranker) 0.7126

At 22.7M it lifts NDCG@10 by +0.14 over the first-stage candidate order, beats bge-reranker-base (12× larger) and mxbai-rerank-xsmall-v1, and closes most of the gap to its bge-reranker-v2-m3 teacher.

License

Released under Apache-2.0.

Citation

@misc{mist-reranker-22.7M,
  title  = {mist-reranker-22.7M},
  author = {Olaverse},
  year   = {2026},
  url    = {https://huggingface.co/olaverse/mist-reranker-22.7M}
}
Downloads last month
37
Safetensors
Model size
22.7M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for olaverse/mist-reranker-22.7M

Dataset used to train olaverse/mist-reranker-22.7M

Collection including olaverse/mist-reranker-22.7M

Evaluation results

  • NDCG@10 on NanoBEIR (NanoNQ, NanoHotpotQA, NanoFEVER)
    self-reported
    0.854