Text Ranking
Transformers
ONNX
Safetensors
sentence-transformers
Transformers.js
Turkish
modernbert
text-classification
text-embeddings-inference
reranker
cross-encoder
Eval Results (legacy)
Instructions to use ytu-ce-cosmos/modernbert-tr-reranker with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ytu-ce-cosmos/modernbert-tr-reranker with Transformers:
# Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("ytu-ce-cosmos/modernbert-tr-reranker") model = AutoModelForSequenceClassification.from_pretrained("ytu-ce-cosmos/modernbert-tr-reranker", device_map="auto") - sentence-transformers
How to use ytu-ce-cosmos/modernbert-tr-reranker with sentence-transformers:
from sentence_transformers import CrossEncoder model = CrossEncoder("ytu-ce-cosmos/modernbert-tr-reranker") 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) - Transformers.js
How to use ytu-ce-cosmos/modernbert-tr-reranker with Transformers.js:
// npm i @huggingface/transformers import { pipeline } from '@huggingface/transformers'; // Allocate pipeline const pipe = await pipeline('text-ranking', 'ytu-ce-cosmos/modernbert-tr-reranker'); - Notebooks
- Google Colab
- Kaggle
File size: 5,329 Bytes
dc6b6d6 2490bc0 dc6b6d6 1aa9a4c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | ---
language:
- tr
license: apache-2.0
library_name: transformers
base_model: ytu-ce-cosmos/modernbert-tr-base
pipeline_tag: text-ranking
tags:
- sentence-transformers
- text-embeddings-inference
- transformers.js
- reranker
- cross-encoder
- modernbert
- onnx
model-index:
- name: modernbert-tr-reranker
results:
- task:
type: Retrieval
name: ArguAnaTR
dataset:
type: trmteb/arguana-tr
name: MTEB ArguAnaTR
config: default
split: test
revision: main
metrics:
- type: ndcg_at_10
value: 54.75
- task:
type: Retrieval
name: CQADupstackGamingRetrievalTR
dataset:
type: trmteb/cqadupstack-gaming-tr
name: MTEB CQADupstackGamingRetrievalTR
config: default
split: test
revision: main
metrics:
- type: ndcg_at_10
value: 61.10
- task:
type: Retrieval
name: SciFactTR
dataset:
type: trmteb/scifact-tr
name: MTEB SciFactTR
config: default
split: test
revision: main
metrics:
- type: ndcg_at_10
value: 86.34
- task:
type: Retrieval
name: SquadTRRetrieval
dataset:
type: trmteb/squad-tr
name: MTEB SquadTRRetrieval
config: default
split: test
revision: main
metrics:
- type: ndcg_at_10
value: 90.11
- task:
type: Retrieval
name: TQuadRetrieval
dataset:
type: trmteb/tquad
name: MTEB TQuadRetrieval
config: default
split: test
revision: main
metrics:
- type: ndcg_at_10
value: 94.00
- task:
type: Retrieval
name: XQuADRetrieval
dataset:
type: google/xquad
name: MTEB XQuADRetrieval
config: default
split: validation
revision: 51adfef1c1287aab1d2d91b5bead9bcfb9c68583
metrics:
- type: ndcg_at_10
value: 97.86
---
<p align="center">
<img src="assets/logo.webp" width="20%" alt="ModernBERT Reranker" />
</p>
<h1 align="center">ModernBERT-TR Reranker</h1>
A 150M-parameter Turkish cross-encoder reranker to score `(query, document)` relevance.
- Base model: [`ytu-ce-cosmos/modernbert-tr-base`](https://huggingface.co/ytu-ce-cosmos/modernbert-tr-base).
- Distilled from `Qwen/Qwen3-Reranker-8B`.
## Results
Reranking the top-100 of a first-stage retriever ([`ytu-ce-cosmos/modernbert-tr-embed`](https://huggingface.co/ytu-ce-cosmos/modernbert-tr-embed)) at `max_seq=512`. The uplift (Δ) is the reranker's contribution.
| Task | First-stage NDCG@10 | + Reranker | Δ |
|---|---|---|---|
| ArguAnaTR | 37.01 | **54.75** | **+17.74** |
| SquadTRRetrieval | 75.94 | **90.11** | +14.17 |
| SciFactTR | 77.07 | **86.34** | +9.27 |
| TQuadRetrieval | 87.48 | **94.00** | +6.52 |
| CQADupstackGamingRetrievalTR | 56.44 | **61.10** | +4.66 |
| XQuADRetrieval | 95.03 | **97.86** | +2.83 |
| **Mean Δ** | | | **+9.20** |
## How was this model trained?
Question answering and counter argument distillation of `Qwen3-Reranker-8B` relevance scores into the 150M cross-encoder over Turkish question answering / information retrieval data using [listwise KL](https://proceedings.mlr.press/v130/reddi21a.html).
## Usage
### transformers
```python
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
tok = AutoTokenizer.from_pretrained("ytu-ce-cosmos/modernbert-tr-reranker")
model = AutoModelForSequenceClassification.from_pretrained("ytu-ce-cosmos/modernbert-tr-reranker").eval()
query = "Türkiye'nin başkenti neresidir?"
docs = ["Ankara, Türkiye'nin başkentidir.", "İstanbul en kalabalık şehirdir."]
enc = tok([query] * len(docs), docs, padding=True, truncation="longest_first",
max_length=8192, return_tensors="pt")
with torch.no_grad():
scores = model(**enc).logits.squeeze(-1)
ranking = sorted(zip(docs, scores.tolist()), key=lambda x: x[1], reverse=True)
```
### sentence-transformers
```python
from sentence_transformers import CrossEncoder
model = CrossEncoder("ytu-ce-cosmos/modernbert-tr-reranker")
scores = model.predict([(query, d) for d in docs])
```
### ONNX Runtime
The `onnx/` folder has the full graph, the output is the relevance logit:
```python
import onnxruntime, numpy as np
sess = onnxruntime.InferenceSession("onnx/model.onnx")
feed = {k: v.numpy() for k, v in enc.items() if k in {i.name for i in sess.get_inputs()}}
logits = sess.run(None, feed)[0].squeeze(-1)
```
### Text Embeddings Inference (TEI)
```bash
text-embeddings-router --model-id ytu-ce-cosmos/modernbert-tr-reranker --dtype float16
# POST /rerank {"query": "soru", "texts": ["aday 1", "aday 2"]}
```
## Training data
We used Turkish datasets msmarco-tr, squad-tr, fiqa-tr, nfcorpus-tr, quora-tr, scifact-tr for distillation by `Qwen3-Reranker-8B`, and Turkish counter-argument pairs from ArguAna machine-translated with TranslateGemma-27B. All training data was text-hash chceked against every MTEB(Turkish) test split.
## Limitations
- Reported NDCG is rerank-of-top-100 over a first-stage retriever; absolute scores depend on that first stage.
- int8 ONNX reorders scores meaningfully lossy for a reranker; use fp32 for quality-sensitive ranking.
- Due to the lack of long form data in our training, the model's performance may degrade on long context input.
## License & attribution
- License: `apache-2.0`. |