Text Classification
Transformers
Safetensors
German
llama
feature-extraction
reranker
cross-encoder
german
retrieval
rag
on-prem
text-embeddings-inference
Instructions to use keyvan-ai/Mankei-326M-Reranker with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use keyvan-ai/Mankei-326M-Reranker with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="keyvan-ai/Mankei-326M-Reranker")# Load model directly from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("keyvan-ai/Mankei-326M-Reranker") model = AutoModel.from_pretrained("keyvan-ai/Mankei-326M-Reranker", device_map="auto") - Notebooks
- Google Colab
- Kaggle
File size: 2,950 Bytes
444a952 a79a2b8 444a952 a79a2b8 444a952 a79a2b8 444a952 a79a2b8 444a952 e1219e3 444a952 a79a2b8 444a952 a79a2b8 444a952 a79a2b8 444a952 a79a2b8 444a952 a79a2b8 444a952 a79a2b8 | 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 | ---
license: apache-2.0
language:
- de
library_name: transformers
pipeline_tag: text-classification
tags:
- reranker
- cross-encoder
- german
- retrieval
- rag
- on-prem
datasets:
- deepset/germandpr
---
<p align="center"><img src="mankei-logo.png" width="200" alt="Mankei"></p>
# Mankei-326M-Reranker
Deutscher Cross-Encoder-Reranker mit **326M Parametern**. Bewertet Query-Passage-Paare und ordnet die Top-k eines Retrieval-Schritts neu — die zweite, präzise Stufe hinter dem [Mankei-326M-Embedder](https://huggingface.co/keyvan-ai/Mankei-326M-Embedder). Für **souveränes RAG on-premise**.
## Benchmark — deutsches Reranking (GermanDPR)
Ausgewertet auf **250 zurückgehaltenen GermanDPR-Fragen** (je 1 relevante + 5 harte Negativ-Passagen; nicht im Training). Metriken: Trefferquote auf Rang 1 (Acc@1) und Mean Reciprocal Rank (MRR).
| Modell | Größe | Acc@1 | MRR |
|---|---:|---:|---:|
| **Mankei-326M-Reranker** | 0,33 B | **92,8 %** | **0,963** |
| bge-reranker-v2-m3 | 0,57 B | 87,2 % | — |
| cross-encoder-german (mmarco) | 0,14 B | 74,0 % | — |
Der spezialisierte deutsche Reranker liegt vor dem multilingualen SOTA-Reranker (bge-reranker-v2-m3) und dem deutschen mMARCO-Cross-Encoder.

## Verwendung
```python
from transformers import AutoModel, AutoTokenizer
from huggingface_hub import hf_hub_download
import torch, torch.nn as nn
repo = "keyvan-ai/Mankei-326M-Reranker"
tok = AutoTokenizer.from_pretrained(repo)
base = AutoModel.from_pretrained(repo, dtype=torch.bfloat16).eval()
head = nn.Linear(base.config.hidden_size, 1)
head.load_state_dict(torch.load(hf_hub_download(repo, "head.pt")))
@torch.no_grad()
def score(query, passages):
x = tok([f"Frage: {query}\nPassage: {p}" for p in passages],
padding=True, truncation=True, max_length=192, return_tensors="pt")
h = base(**x).last_hidden_state
idx = x.attention_mask.sum(1) - 1 # Last-Token-Pooling
return head(h[torch.arange(h.size(0)), idx].float()).squeeze(-1) # höher = relevanter
# Kandidaten aus dem Embedder neu ordnen:
passages = ["Die Kündigung des Mietvertrags ...", "Der Kaufvertrag ...", "München ist ..."]
ranking = sorted(zip(score("Wie kündige ich meine Wohnung?", passages).tolist(), passages), reverse=True)
```
## Rolle im RAG
Zweistufig: der [Embedder](https://huggingface.co/keyvan-ai/Mankei-326M-Embedder) holt die Kandidaten (hoher Durchsatz), der Reranker schärft die Reihenfolge der Top-k. Beide 326M, on-premise, CPU- bis GPU-tauglich.
## Training
Supervidiert auf [GermanDPR](https://huggingface.co/datasets/deepset/germandpr) (CC-BY): **Listwise-Loss** (softmax-Cross-Entropy über die relevante Passage + harte Negative), Last-Token-Pooling + lineare Relevanzschicht (`head.pt` im Repo), LoRA auf dem deutschen Mankei-Basismodell. Die 250 Benchmark-Fragen sind vom Training ausgeschlossen.
|