RuModernBERT-small Russian Cross-Encoder Reranker

A compact yet powerful Russian cross-encoder reranker fine-tuned from deepvk/RuModernBERT-small (34M parameters) on the ARGA100/ru-reranker-mega dataset (3.2M query-document pairs).

Achieves NDCG@10=0.74444 on MTEB RuBQReranking — competitive with models 8–16× larger, making it the most efficient Russian reranker available.

Benchmark Results (MTEB RuBQReranking)

Model Params NDCG@10 Params/Eff.
bge-reranker-v2-m3-en-ru 375M 0.84387 1.0
BAAI/bge-reranker-v2-m3 568M 0.84384 1.0
DiTy/cross-encoder-russian-msmarco 178M 0.78572 2.3×
mxbai-rerank-large-v1 435M 0.77927 2.1×
bce-reranker-base_v1 278M 0.74599 2.7×
ARGA100/ru-reranker-modernbert-small (ours) 34M 0.74444 11.0×
mxbai-rerank-base-v2 494M 0.71268 1.9×
mxbai-rerank-base-v1 184M 0.71159 2.5×
BAAI/bge-reranker-base 278M 0.70550 2.4×
BAAI/bge-reranker-large 560M 0.69430 1.9×
gte-reranker-modernbert-base 150M 0.65751 3.0×
mxbai-rerank-xsmall-v1 71M 0.62594 4.7×

Params/Eff. = relative NDCG@10 per million parameters vs. the top model.

Our 34M model delivers 98% of BCE-reranker-base_v1's performance (0.74444 vs 0.74599) while being 8× smaller and 3× faster at inference.

Model Details

  • Base model: deepvk/RuModernBERT-small (34M params)
  • Architecture: CrossEncoder with ModernBertForSequenceClassification
  • Max sequence length: 2048 tokens
  • Training data: ARGA100/ru-reranker-mega — 3.2M Russian query-document pairs
  • Loss: BinaryCrossEntropyLoss with label smoothing
  • Training: 3 epochs, greedy soup of top checkpoints
  • Language: Russian

Usage

from sentence_transformers import CrossEncoder

model = CrossEncoder("ARGA100/ru-reranker-modernbert-small", max_length=2048)

# Score a query-document pair
pairs = [
    ["сколько калорий в яйце", "В одном курином яйце содержится около 70-80 ккал"],
    ["сколько калорий в яйце", "Яичный белок практически не содержит жиров"],
]
scores = model.predict(pairs)
print(scores)  # Higher = more relevant

# Rerank documents
query = "лучшие рестораны москвы"
documents = [
    "Топ-10 ресторанов Москвы с авторской кухней",
    "Как приготовить борщ дома",
    "Ресторан White Rabbit вошел в рейтинг лучших",
]
ranks = model.rank(query, documents, top_k=3)
for r in ranks:
    print(f"Score: {r['score']:.4f} | Doc: {documents[r['corpus_id']]}")

Training Details

  • Hardware: NVIDIA Tesla V100 16GB
  • Framework: sentence-transformers 5.6.0, transformers 5.12.1
  • Batch size: 16
  • Learning rate: 4.7e-5
  • Optimizer: AdamW
  • Warmup: 500 steps
  • Epochs: 3
  • Checkpoint selection: Greedy soup of all 5 checkpoints (best single ckpt: 0.72704, best soup: 0.74444)

Dataset

The model was trained on ARGA100/ru-reranker-mega — a deduplicated collection of 3.2M Russian query-document relevance pairs assembled from multiple public sources.

Citation

If you use this model, please cite:

@misc{ru-reranker-modernbert-small,
  author = {ARGA100},
  title = {RuModernBERT-small Russian Cross-Encoder Reranker},
  year = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/ARGA100/ru-reranker-modernbert-small}}
}
Downloads last month
190
Safetensors
Model size
34.5M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ARGA100/ru-reranker-modernbert-small

Finetuned
(7)
this model

Dataset used to train ARGA100/ru-reranker-modernbert-small

Evaluation results