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
Reranker 326M v2 (92,8% Acc@1) + Querverweise aktualisiert
Browse files
README.md
CHANGED
|
@@ -4,7 +4,6 @@ language:
|
|
| 4 |
- de
|
| 5 |
library_name: transformers
|
| 6 |
pipeline_tag: text-classification
|
| 7 |
-
base_model: keyvan-ai/Mankei-1B-Chat
|
| 8 |
tags:
|
| 9 |
- reranker
|
| 10 |
- cross-encoder
|
|
@@ -14,32 +13,24 @@ tags:
|
|
| 14 |
- on-prem
|
| 15 |
datasets:
|
| 16 |
- deepset/germandpr
|
| 17 |
-
model-index:
|
| 18 |
-
- name: Mankei-1B-Reranker
|
| 19 |
-
results:
|
| 20 |
-
- task:
|
| 21 |
-
type: text-classification
|
| 22 |
-
name: Passage Reranking
|
| 23 |
-
dataset:
|
| 24 |
-
type: deepset/germandpr
|
| 25 |
-
name: GermanDPR (held-out)
|
| 26 |
-
metrics:
|
| 27 |
-
- type: accuracy
|
| 28 |
-
value: 0.877
|
| 29 |
-
name: Accuracy
|
| 30 |
---
|
| 31 |
|
| 32 |
<p align="center"><img src="mankei-logo.png" width="200" alt="Mankei"></p>
|
| 33 |
|
| 34 |
-
# Mankei-
|
| 35 |
|
| 36 |
-
Cross-Encoder-Reranker
|
| 37 |
|
| 38 |
-
##
|
| 39 |
-
|
| 40 |
|
| 41 |
-
|
| 42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
## Verwendung
|
| 45 |
```python
|
|
@@ -47,18 +38,27 @@ from transformers import AutoModel, AutoTokenizer
|
|
| 47 |
from huggingface_hub import hf_hub_download
|
| 48 |
import torch, torch.nn as nn
|
| 49 |
|
| 50 |
-
|
| 51 |
-
|
|
|
|
| 52 |
head = nn.Linear(base.config.hidden_size, 1)
|
| 53 |
-
head.load_state_dict(torch.load(hf_hub_download(
|
| 54 |
|
|
|
|
| 55 |
def score(query, passages):
|
| 56 |
x = tok([f"Frage: {query}\nPassage: {p}" for p in passages],
|
| 57 |
-
padding=True, truncation=True, max_length=
|
| 58 |
-
|
| 59 |
-
idx = x.attention_mask.sum(1) - 1
|
| 60 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
```
|
| 62 |
|
|
|
|
|
|
|
|
|
|
| 63 |
## Training
|
| 64 |
-
|
|
|
|
| 4 |
- de
|
| 5 |
library_name: transformers
|
| 6 |
pipeline_tag: text-classification
|
|
|
|
| 7 |
tags:
|
| 8 |
- reranker
|
| 9 |
- cross-encoder
|
|
|
|
| 13 |
- on-prem
|
| 14 |
datasets:
|
| 15 |
- deepset/germandpr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
---
|
| 17 |
|
| 18 |
<p align="center"><img src="mankei-logo.png" width="200" alt="Mankei"></p>
|
| 19 |
|
| 20 |
+
# Mankei-326M-Reranker
|
| 21 |
|
| 22 |
+
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**.
|
| 23 |
|
| 24 |
+
## Benchmark — deutsches Reranking (GermanDPR)
|
| 25 |
+
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).
|
| 26 |
|
| 27 |
+
| Modell | Größe | Acc@1 | MRR |
|
| 28 |
+
|---|---:|---:|---:|
|
| 29 |
+
| **Mankei-326M-Reranker** | 0,33 B | **92,8 %** | **0,963** |
|
| 30 |
+
| bge-reranker-v2-m3 | 0,57 B | 87,2 % | — |
|
| 31 |
+
| cross-encoder-german (mmarco) | 0,14 B | 74,0 % | — |
|
| 32 |
+
|
| 33 |
+
Der spezialisierte deutsche Reranker liegt vor dem multilingualen SOTA-Reranker (bge-reranker-v2-m3) und dem deutschen mMARCO-Cross-Encoder.
|
| 34 |
|
| 35 |
## Verwendung
|
| 36 |
```python
|
|
|
|
| 38 |
from huggingface_hub import hf_hub_download
|
| 39 |
import torch, torch.nn as nn
|
| 40 |
|
| 41 |
+
repo = "keyvan-ai/Mankei-326M-Reranker"
|
| 42 |
+
tok = AutoTokenizer.from_pretrained(repo)
|
| 43 |
+
base = AutoModel.from_pretrained(repo, dtype=torch.bfloat16).eval()
|
| 44 |
head = nn.Linear(base.config.hidden_size, 1)
|
| 45 |
+
head.load_state_dict(torch.load(hf_hub_download(repo, "head.pt")))
|
| 46 |
|
| 47 |
+
@torch.no_grad()
|
| 48 |
def score(query, passages):
|
| 49 |
x = tok([f"Frage: {query}\nPassage: {p}" for p in passages],
|
| 50 |
+
padding=True, truncation=True, max_length=192, return_tensors="pt")
|
| 51 |
+
h = base(**x).last_hidden_state
|
| 52 |
+
idx = x.attention_mask.sum(1) - 1 # Last-Token-Pooling
|
| 53 |
+
return head(h[torch.arange(h.size(0)), idx].float()).squeeze(-1) # höher = relevanter
|
| 54 |
+
|
| 55 |
+
# Kandidaten aus dem Embedder neu ordnen:
|
| 56 |
+
passages = ["Die Kündigung des Mietvertrags ...", "Der Kaufvertrag ...", "München ist ..."]
|
| 57 |
+
ranking = sorted(zip(score("Wie kündige ich meine Wohnung?", passages).tolist(), passages), reverse=True)
|
| 58 |
```
|
| 59 |
|
| 60 |
+
## Rolle im RAG
|
| 61 |
+
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.
|
| 62 |
+
|
| 63 |
## Training
|
| 64 |
+
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.
|