Qwen3-Reranker
The Qwen3-Reranker family (0.6B / 4B / 8B) is the headline open-weight reranker story of 2026: multilingual, long-context friendly, and frequently topping community open-weight leaderboards. Treat published MTEB-R / BEIR-style numbers as directionally strong — always validate on your own labels before replacing bge or a hosted API.
Model variants
| Model | Size | Best for |
|---|---|---|
Qwen/Qwen3-Reranker-0.6B | ~0.6B | Lightest sibling; still prefers GPU |
Qwen/Qwen3-Reranker-4B | ~4B | Default self-host pick when quality matters |
Qwen/Qwen3-Reranker-8B | ~8B | Maximum open quality; highest VRAM / latency |
Recommendation: start with 4B on a single modern GPU. Drop to 0.6B only if memory is tight; move to 8B only when labelled eval shows a clear NDCG gain worth the cost.
Scores & honesty
Public write-ups often cite MTEB-R / multilingual rerank suites in the ~70+ range for mid/large Qwen3 sizes, with 8B at the top of open-weight tables. Those figures are not guaranteed to match the classic BEIR 18-dataset averages we list for bge (~60) or mxbai (~62).
- Different suites, languages, and preprocessing → different numbers.
- On some English-only product benches, compact models (e.g. ModernBERT-GTE) can beat a 4B model on Hit@1 while being far cheaper.
- Our comparison table marks Qwen scores with * for this reason.
Quick start
Hugging Face / transformers
# Check the model card for the recommended stack (transformers / vLLM / SGLang).
# IDs (examples):
# Qwen/Qwen3-Reranker-0.6B
# Qwen/Qwen3-Reranker-4B
# Qwen/Qwen3-Reranker-8B
from sentence_transformers import CrossEncoder # if card supports CE API
# Prefer the loading recipe on the official model card — Qwen3 may use
# a chat-style scoring template rather than a plain CrossEncoder pair.
model_id = "Qwen/Qwen3-Reranker-4B"
# model = CrossEncoder(model_id, max_length=8192) # only if supported
# scores = model.predict([(query, d) for d in docs])
For production serving, many teams use vLLM / OpenAI-compatible /v1/rerank endpoints. Follow the current Qwen docs for the exact prompt format — wrong templates silently destroy quality.
In a RAG pipeline
# Pseudocode — same two-stage pattern as any cross-encoder
candidates = vector_db.search(query, top_k=80) # or hybrid
scores = qwen3_rerank(query, candidates) # official template
top = sorted(zip(scores, candidates), reverse=True)[:8]
answer = llm.complete(context=top, query=query)
When to pick Qwen3
- Yes: you have GPU, need multilingual quality, and want open weights without per-call API cost.
- Yes: long passages / long context matter and you can afford 4B–8B memory.
- Maybe not: CPU-only or edge — prefer bge-v2-m3, mxbai, or Jina tiny for demos.
- Maybe not: instruction-shaped policies — see instruction-following rerank.
Pros and cons
Pros
- Leading open-weight narrative in 2026 (0.6B–8B ladder)
- Strong multilingual + long-context positioning
- Zero per-call cost once self-hosted
- Active ecosystem (HF, vLLM, community recipes)
Cons
- GPU (or heavy quant) required for comfort
- Scoring template / serving stack more fiddly than MiniLM
- Public leaderboard numbers not 1:1 with classic BEIR avg
- Too large for our in-browser demo
Compare on your data first
Use a tiny browser model to learn the UX of reranking, then A/B Qwen3-4B vs bge-v2-m3 on 30 labelled queries.
Open the demo → Evaluate guide →