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
| 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. | |