Ein Reranker hinzufügen zu pipeline
Ein Reranker ist ein Cross-Encoder, der jedes Paar aus Frage und Textabschnitt erneut liest und die von der Vektorsuche zurückgegebenen Kandidaten neu sortiert: Es werden zunächst viele Textabschnitte abgerufen (20 bis 100), von denen die besten 3 bis 5 für das Modell ausgewählt werden. Für französische Texte ist BAAI/bge-reranker-v2-m3 (Apache-2.0-Lizenz, etwa 568 Millionen Parameter) der einfachste Einstieg: lokal auf einer GPU oder sogar auf einer CPU, sofern der Umfang überschaubar bleibt.
Embeddings finden Passagen, die einer Frage inhaltlich nahekommen, aber nicht unbedingt solche, die sie beantworten. Der Reranker behebt diesen Mangel, indem er jedes Frage-Passage-Paar in einem einzigen Rechenschritt bewertet. Dieser Leitfaden erklärt, wann sich seine Kosten lohnen, welches Modell Sie für Französisch wählen sollten, wie Sie ihn mit dreißig Zeilen Code einbinden und wie Sie anhand Ihrer eigenen Dokumente überprüfen, ob er die Ergebnisse tatsächlich verbessert.
#Reranker: Wozu er in einer RAG-Pipeline dient
Ein Reranker nimmt eine Frage und eine Textpassage entgegen, liest beide gemeinsam und gibt einen Relevanzwert zurück; anschließend werden die Kandidaten nach absteigendem Wert sortiert, und nur die besten werden an das Sprachmodell weitergegeben. In einer lokalen RAG-Pipeline wird er zwischen der Vektordatenbank (ChromaDB, Qdrant, Weaviate) und dem LLM eingefügt: Die Vektorsuche liefert beispielsweise 30 Textpassagen, von denen der Reranker 5 auswählt. Die offizielle Modellbeschreibung von BAAI erklärt es so: Im Gegensatz zu einem Embedding-Modell erhält der Reranker die Frage und das Dokument als Eingabe und erzeugt direkt einen Ähnlichkeitswert statt eines Vektors. Der Nutzen ist am deutlichsten, wenn die richtige Antwort unter den Kandidaten zu finden ist, aber nicht ganz oben steht: Textpassagen, die das richtige allgemeine Thema behandeln, ohne die konkrete Frage zu beantworten, belegen die ersten Plätze, und das Modell erzeugt dann eine Antwort, die an der Frage vorbeigeht oder erfunden ist. Wenn die richtige Antwort nicht unter den Kandidaten ist, kann ein Reranker nichts ausrichten: Er sucht nicht, er sortiert.
Ein Embedding erzeugt für jedes Dokument einen Vektor, unabhängig von der gestellten Frage, und die Distanz misst die allgemeine thematische Nähe. Zwei Passagen zum selben Thema können daher ähnliche Scores erzielen, obwohl nur eine die Antwort enthält. Der Cross-Encoder betrachtet das Paar als Ganzes: Er erkennt, ob das gesuchte Datum, der gesuchte Name oder die gesuchte Bedingung in der Passage vorkommt. Bei dieser Beurteilung des einzelnen Paars ist er präziser, aber auch aufwendiger, weil pro Paar ein Durchlauf durch den Transformer nötig ist statt nur einer Berechnung pro Dokument.
#Bi-Encoder und Cross-Encoder: Warum man beide kombiniert
Ihre Dokumente, Ihre KI: ein zuverlässiges lokales RAG für Ihre PDFs, Notizen und E-Mails – ohne Daten in die Cloud zu senden.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
- Bi-Encoder (Embedding)
- Codiert die Frage und jedes Dokument getrennt; die Dokumentvektoren werden einmal bei der Indexierung berechnet, sodass sich die Suche auf einen Vergleich von Vektoren reduziert. Schnell, für Millionen von Textpassagen geeignet.
- Cross-Encoder (reranker)
- Kodiert die Frage und die Textpassage gemeinsam und gibt einen Score aus. Keine Berechnung lässt sich wiederverwenden: Sie muss für jede Frage und jeden Kandidaten erneut durchgeführt werden. Präzise, aber nicht auf das gesamte Korpus anwendbar.
Die Dokumentation von Sentence Transformers erläutert die Überlegung dahinter: Tausende oder Millionen von Paaren zu bewerten wäre recht langsam. Deshalb verwendet man den Retriever, um eine Menge von Kandidaten zusammenzustellen, beispielsweise etwa hundert, die der Cross-Encoder anschließend neu ordnet. Dieses zweistufige Verfahren entspricht dem klassischer Suchmaschinen. Es erklärt auch die wichtigste Einstellung: Die Anzahl der abgerufenen Kandidaten bestimmt sowohl den Recall (je mehr Kandidaten man einbezieht, desto wahrscheinlicher ist es, dass die richtige Antwort darunter ist) als auch die Latenz (jeder zusätzliche Kandidat erfordert einen Durchlauf durch den Cross-Encoder).
#Welches Reranking-Modell für Französisch wählen?
Für die Auswahl sind drei Kriterien entscheidend: Sprache, Lizenz und Speicher. Die unten aufgeführten Größenangaben stammen aus den Modellbeschreibungen auf Hugging Face. Beachten Sie, dass die Dateigröße von der Präzision der Gewichte abhängt: F32 bei bge-reranker-v2-m3 (etwa 4 Byte pro Parameter), F16 bei mxbai.
| Modell | Sprachen | Angegebene Größe | Lizenz | Urteil für Französisch |
|---|---|---|---|---|
| BAAI/bge-reranker-v2-m3 | Multilingual | 0,6 Milliarden Parameter, Modellgewichte in F32 (etwa 2,3 GB) | Apache 2.0 | Standardwahl: mehrsprachig, leichtgewichtig, mit guter Tool-Unterstützung |
| BAAI/bge-reranker-v2-gemma | Multilingual | 3 Milliarden Parameter, Gewichte in F32 (ca. 10 GB) | Apache 2.0 | Anspruchsvollen Fällen mit dedizierter GPU vorbehalten; Reranker auf Basis von Gemma-2B |
| mixedbread-ai/mxbai-rerank-large-v1 | Englisch | 0,4 Milliarden Parameter, Gewichte in F16 | Apache 2.0 | Für ein französischsprachiges Korpus vermeiden: Die Modellkarte nennt Englisch als Sprache |
| Cohere Rerank | Multilingual | Gehosteter Dienst | Kommerziell | Nicht relevant für eine 100 % lokale Pipeline: Die Passagen verlassen Ihr Gerät |
Die Modellkarte von bge-reranker-v2-m3 beschreibt das Modell als leichtgewichtigen Reranker mit starken mehrsprachigen Fähigkeiten, der einfach bereitzustellen und bei der Inferenz schnell ist; die Modellkarte von bge-reranker-v2-gemma sieht das Modell für mehrsprachige Kontexte vor und nennt gute Ergebnisse sowohl auf Englisch als auch bei mehrsprachigen Aufgaben. Zwei nützliche Korrekturen gegenüber häufig gelesenen Angaben: Die Datei von bge-reranker-v2-m3 ist über 2 GB groß, nicht 560 MB (568 Millionen Parameter in F32), und mxbai-rerank-large-v1 ist ein englischsprachiges Modell, das Sie für französische Dokumente nicht auswählen sollten. Nach dem Laden mit halber Präzision belegt das m3-Modell etwa 1,1 GB für die Gewichte (568 Millionen Parameter × 2 Byte, Berechnung dieses Leitfadens); hinzu kommen die Aktivierungen des verarbeiteten Batches.
#Die Pipeline vor und nach dem Reranker
Zwei Parameter steuern das Ganze: k_retrieve, die Anzahl der Kandidaten, die die Vektordatenbank zurückgibt, und k_final, die Anzahl der Textpassagen, die an das LLM übergeben werden. Ein k_final von 3 bis 5 eignet sich für die meisten lokalen Modelle mit 7 bis 14 Milliarden Parametern; darüber hinaus wird das Kontextfenster ohne klaren Nutzen gefüllt, und die Verarbeitungszeit des Prompts steigt. k_retrieve hängt von der Schwierigkeit des Korpus ab: 20 ist ein guter Wert für einen ersten Versuch, 50 bis 100 eignen sich bei vagen Fragen oder wenn das Korpus viele ähnliche Textpassagen enthält. Der Leitfaden zum Kontextfenster erläutert im Detail, welche Kosten zusätzliche Textpassagen im Prompt verursachen.
#Implementierung: sentence-transformers, FlagEmbedding, llama.cpp
#Mit sentence-transformers
Die Klasse CrossEncoder lädt das Modell und bewertet Paare. Ihre Methode rank akzeptiert direkt die Frage und die Liste der Dokumente und gibt die besten zurück; der Parameter top_k begrenzt die Anzahl der Ergebnisse (ohne ihn werden alle Dokumente zurückgegeben).
#Mit FlagEmbedding, der Bibliothek der Modellautoren
Die Modellbeschreibung verwendet die Bibliothek FlagEmbedding. Sie erläutert, dass sich der Rohwert mit einer Sigmoidfunktion und normalize=True auf einen Wert zwischen 0 und 1 abbilden lässt und dass use_fp16=True die Berechnung auf Kosten einer leichten Qualitätseinbuße beschleunigt. Beachten Sie, dass der Rohwert keine absolute Skala hat und bei themenfremden Passagen oft negativ ist; nur die Reihenfolge zählt, sofern Sie keinen Schwellenwert festlegen.
#Mit llama.cpp, ohne Python
Der llama.cpp-Server bietet einen Reranking-Endpunkt, der standardmäßig deaktiviert ist. Laut Dokumentation erfordert dieser ein Reranking-Modell; als Beispiel wird bge-reranker-v2-m3 genannt. Der Server wird dafür mit den Optionen --embedding und --pooling rank gestartet. Eine GGUF-Version des Modells ist erforderlich. Diese Option empfiehlt sich, wenn Ihr Software-Stack bereits auf llama.cpp basiert und Sie die Installation von PyTorch vermeiden möchten. Prüfen Sie die genaue Option in der installierten Version: Die Dokumentation weist darauf hin, dass sich dieser Endpunkt noch ändern könnte.
#Mit LlamaIndex
#Kosten: Latenz, Speicher, Länge der Abschnitte
Konkrete Latenzwerte sind nicht garantiert: Die Latenz hängt von der Grafikkarte, der numerischen Präzision (FP16 oder FP32), der Anzahl der Kandidaten und der Länge der Textpassagen ab. Merken Sie sich die Größenverhältnisse. Die Reranking-Zeit steigt linear mit der Anzahl der Paare: Von 20 auf 100 Kandidaten zu wechseln, verfünffacht den Arbeitsaufwand. Sie steigt auch mit der Länge der Textpassage, da jedes Paar vollständig kodiert wird. Messen Sie auf Ihrem Rechner mit Ihren Textpassagen, statt sich auf einen Wert aus einem Blog zu verlassen: Messen Sie die Dauer von hundert echten Anfragen und betrachten Sie die mediane Dauer sowie den ungünstigsten Fall.
- Anzahl der Kandidaten
- Erster Ansatzpunkt. Beginnen Sie mit 20, messen Sie den Recall und erhöhen Sie nur dann auf 50, wenn gute Antworten weiterhin nicht in der Kandidatenmenge enthalten sind.
- Präzision
- use_fp16=True (FlagEmbedding) oder das Laden mit halber Präzision reduziert den Speicherbedarf und beschleunigt die Berechnung, laut Modellbeschreibung mit einer leichten Leistungseinbuße.
- Batchgröße
- Die Methode rank von sentence-transformers verarbeitet standardmäßig 32 Paare pro Batch. Reduzieren Sie die Batchgröße auf 8 oder 16, wenn der Speicher knapp ist, und erhöhen Sie sie, wenn die GPU nicht ausgelastet ist.
- Maximale Länge
- 512 Tokens pro Paar (Wert von max_length in den offiziellen Beispielen). Ein längerer Abschnitt wird abgeschnitten: Wenn Ihre Chunks diese Länge überschreiten, wird das Ende des Abschnitts nicht gelesen. Verkürzen Sie die Chunks, bevor Sie die Grenze erhöhen.
- CPU oder GPU
- Auf der CPU funktioniert der Reranker, aber jede Anfrage mit 20 bis 50 Kandidaten dauert Sekunden; für einen internen Dokumentenassistenten ist das akzeptabel, für einen interaktiven Chat weniger.
#Reranker und Aufteilung in Textabschnitte: Die beiden Einstellungen beeinflussen sich gegenseitig
Ein Cross-Encoder bewertet eine ganze Passage. Wenn die Passage drei Themen vermischt, fällt ihr Score für alle drei entsprechenden Fragen mittelmäßig aus; ist sie zu kurz, geht der Kontext verloren, anhand dessen sie als Antwort erkannt werden könnte. Die Aufteilung in mittelgroße Passagen mit leichter Überlappung gibt dem Reranker genügend Material, ohne seine maximale Eingabelänge zu überschreiten. Wenn Sie die Chunk-Größe ändern, wiederholen Sie den Recall-Test: Der optimale Wert für k_retrieve und der Nutzen des Rerankers ändern sich damit ebenfalls. Der Leitfaden zu Chunking-Strategien erläutert diese Entscheidungen im Detail.
Ein weiteres Zusammenspiel betrifft die hybride Suche. Wenn die Stichwortsuche (BM25) und die Vektorsuche zusammengeführt werden, ist die Kandidatenauswahl vielfältiger. Dadurch hat der Reranker bessere Chancen, eine gute Antwort zu finden, die jede der beiden Methoden allein verfehlt hätte. Der Reranker bildet die letzte Stufe, die hybride Suche die zweite: Sie ergänzen einander, statt einander zu ersetzen.
#Die Verbesserung anhand Ihrer Dokumente messen
Die in Blogs angegebenen Verbesserungen variieren je nach Korpus vom Einfachen bis zum Fünffachen, und kein allgemeiner Wert lässt sich auf Ihren Korpus übertragen. Bei einem stark strukturierten Korpus (sauber aufbereitete technische Dokumentation) ist die reine Vektorsuche bereits gut; bei einem verrauschten Korpus (E-Mails, Notizen, schlecht extrahierte PDFs) ist der Unterschied deutlicher. Das lässt sich nur durch eine Evaluierung feststellen.
- 0130 bis 50 Fragen zusammenstellenVerwenden Sie echte Fragen von Nutzern und ordnen Sie jeder Frage die Passage zu, die die Antwort enthält (eine Kennung genügt).
- 02Recall@5 ohne Reranker messenPrüfen Sie für jede Frage, ob die richtige Passage unter den ersten 5 Ergebnissen der Vektordatenbank enthalten ist.
- 03Den Recall bei 5 mit einem Reranker messenRufen Sie 20 Kandidaten ab, ordnen Sie sie neu nach Relevanz und zählen Sie erneut die relevanten Textpassagen unter den ersten 5.
- 04Auch die Latenz vergleichenNotieren Sie den Median der Ende-zu-Ende-Laufzeit. Ein Gewinn von einigen Punkten beim Recall rechtfertigt nicht unbedingt eine zusätzliche Sekunde Wartezeit.
- 05Fehler analysierenPrüfen Sie bei jeder falsch beantworteten Frage, ob die richtige Antwort unter den 20 Kandidaten war. Falls nicht, liegt das Problem in einem vorgelagerten Schritt: bei der Aufteilung, den Embeddings oder der Textextraktion.
#Ist ein Reranker erforderlich? Entscheidungskriterien
| Situation | Entscheidung |
|---|---|
| Korpus aus einigen Dutzend sauber aufbereiteter Dokumente, die Top-5-Ergebnisse der Vektorsuche sind bereits gut | Nein, messen Sie zuerst |
| Gute Antwort häufig zwischen dem 6. und 30. Platz | Ja: Dies ist ein typisches Anwendungsszenario |
| Vage Fragen, verrauschtes oder sehr heterogenes Korpus | Ja, mit 30 bis 50 Kandidaten |
| Interaktiver Chat auf einer Maschine ohne GPU | Vorsicht: Messen Sie die CPU-Latenz und reduzieren Sie auf 10 bis 20 Kandidaten |
| Die richtige Antwort fehlt selbst unter den ersten 50 Kandidaten | Nein: Korrigieren Sie zuerst die Aufteilung in Chunks, die Embeddings oder die Extraktion |
#Häufige Fragen zum Reranking
Ersetzt ein Reranker die Vektorsuche?+
Welchen Reranker für Dokumente auf Französisch wählen?+
Wie viele Kandidaten sollte man neu bewerten und ordnen?+
Ist eine GPU für einen Reranker erforderlich?+
Kann ein Reranker mit Ollama verwendet werden?+
Wie kann man überprüfen, ob der Reranker meine Ergebnisse wirklich verbessert?+
- Hybride Suche: BM25 + Vektorsuche
- Chunking-Strategien
- Die besten Embedding-Modelle für Französisch
- Das Kontextfenster verstehen
- Lokales RAG mit ChromaDB und Ollama
- Quelle: Hugging-Face-Modellseite von BAAI/bge-reranker-v2-m3
- Quelle: Datenblatt von BAAI/bge-reranker-v2-gemma
- Quelle: Sentence Transformers, Retrieve & Re-Rank
- Quelle: Dokumentation des llama.cpp-Servers
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.