← KI-Engineering und Agentic AI
Retrieval-Forschung · laufend QASPER-Benchmark

Vierstufige hybride RAG-Pipeline für wissenschaftliche Fragen

Die Forschung hinter diesem Chatboard: wie sich die eine passende Textstelle unter 47 810 findet, und wann das System zugibt, dass es keine gibt, statt eine Antwort zu erfinden.

0,8373
ALCE-Zitationsgenauigkeit
84 Fragen, Lauf vom 04.04.2026
0,7151
ALCE-Zitations-Recall
nach der Korrektur an extract_final_answer
0,7150
Faithfulness (RAGAS)
1 Zeitüberschreitung übersprungen
0,5882
Context Recall (RAGAS)
Umstieg auf ColBERT v2 läuft

Die Aufgabenstellung

Wer einen Bestand an Papern der Sprachverarbeitung abfragt, braucht eine Antwort, die sich bis zu einer bestimmten Textstelle in einem bestimmten Dokument zurückverfolgen lässt. Ein einfacher Prompt bleibt weit darunter: Modelle erfinden Quellen, mischen Befunde aus verschiedenen Papern und beschreiben eine Methodik, die in der Quelle nie stand, alles in derselben sicher klingenden Sprache.

Die technische Formulierung ist eine extraktiv-generative Frage-Antwort-Aufgabe in offener Domäne. Zu einer Frage in natürlicher Sprache und einem großen Bestand an Volltexten holt das System die passendsten Textstellen und erzeugt eine kurze Antwort mit Zitaten im Text, die auf die Quelldokumente zeigen. Die Evaluation läuft auf dem QASPER-Benchmark (Dasigi u. a., 2021), 5 049 Frage-Antwort-Paare über Volltexte der Sprachverarbeitung.

Die Datenaufbereitung

Ein eigener QasperChunker teilt den Rohtext der Paper in überlappende Chunks von 500 Tokens (10 % Überlappung, etwa 50 Tokens). Jeder Chunk trägt einen Kopf: Title: <Titel des Papers>. Section: <Abschnittsüberschrift>. Dieser Kopf verankert den Chunk in seiner Herkunft, sowohl für den Stichwortabgleich mit BM25 als auch für die ColBERT-Bewertung. Nimmt man ihn heraus, verlieren kurze Chunks das Signal, das sie unterscheidet.

Der Bestand, der dabei entsteht, umfasst 47 810 Chunks, abgelegt als flacher FAISS-Index (IndexFlatIP, FP16-Vektoren mit 768 Dimensionen), daneben ein serialisiertes BM25-Modell aus einem Korpus, der mit NLTK segmentiert, um Stoppwörter bereinigt und nach Porter gestemmt wurde.

Die 4 Stufen

Stufe 0. HyDE-Query-Erweiterung. Eine Anfrage unter 10 Wörtern löst Hypothetical Document Embeddings aus: das Modell schreibt eine Textstelle, die die Frage beantworten würde, und diese Textstelle wird anstelle der rohen Anfrage zur dichten Query. Das schließt die Wortschatzlücke zwischen einer kurzen Frage und dem dichten wissenschaftlichen Text im Index.

Stufe 1. Hybrides Retrieval (beste 60, RRF k=60). Das dichte Retrieval nutzt allenai/specter2_base (768 Dimensionen, FP16) mit seinem Retrieval-Adapter. SPECTER2 trainiert auf dem globalen Zitationsgraphen, also landen Paper A und Paper B nahe beieinander, wenn A B zitiert, unabhängig vom gemeinsamen Wortschatz, und das Embedding erfasst die wissenschaftliche Absicht statt des Jargons an der Oberfläche. Das dünnbesetzte Retrieval über rank-bm25 (NLTK, Porter-Stemming) deckt ab, was die dichte Suche verfehlt: exakte Treffer auf markante Methodennamen und Abkürzungen. Reciprocal Rank Fusion (k=60) führt die 2 Ranglisten zusammen, ohne Scores zu normalisieren, die nie auf derselben Skala lagen.

Stufe 2. ColBERT-v2-Reranking (beste 7). ColBERT legt je Token ein Embedding offline ab und bewertet ein Paar aus Query und Textstelle mit MaxSim: für jedes Query-Token die höchste Kosinusähnlichkeit gegen ein beliebiges Token der Textstelle, danach die Summe über die Query-Tokens. In wissenschaftlichem Text hängt die Relevanz oft an einem einzigen Fachbegriff, der exakt passt, und MaxSim auf Token-Ebene fängt das dort auf, wo ein Bi-Encoder auf Satzebene es wegmittelt.

Stufe 3. Das CRAG-Relevanz-Gate. Das beste Logit des Rerankers wird gegen eine kalibrierte Schwelle geprüft. Darunter antwortet das System „unzureichender Kontext“, statt aus schwacher Beleglage zu generieren. Das Skript calibrate_crag.py setzt die Schwelle in 2 Betriebsarten: F1-max, das 300 Kandidaten auf einem Raster durchsucht, oder ein Perzentil-Fallback, der die Schwelle auf das P-te Perzentil der Verteilung von best_rerank_score legt und ohne RAGAS-Label auskommt.

Stufe 4. Generierung. Die besten 7 Textstellen gehen an Llama-3.1-8B-Instruct über vLLM auf einem dynamisch zugeteilten GPU-Pool (Tensor-Parallelität über mehrere GPUs, ein Anteil von 50 % des VRAM auf einer einzelnen GPU und ein Ollama-Fallback auf der CPU). Der Prompt verlangt Reasoning nach Chain-of-Thought, gefolgt von einem <Final Answer>-Block mit Zitaten [Doc N] im Text. extract_final_answer() entfernt den Reasoning-Block, bevor RAGAS und ALCE bewerten, und diese eine Korrektur hob den ALCE-Recall von etwa 0,057 auf etwa 0,84.

Der Evaluationsrahmen

Alles läuft lokal, ohne externe API-Aufrufe. Zwei Rahmenwerke teilen sich einen einzigen SLURM-Job. RAGAS (Es u. a., 2023) bewertet Retrieval und Generierung über ein Modell als Richter, auf Context Precision, Context Recall, Faithfulness und Answer Relevancy, und der Richter ist Llama-3.1-8B-Instruct, bedient von derselben vLLM-Instanz, die auch generiert. ALCE (Gao u. a., 2023, EMNLP) bewertet die Verankerung auf Zitationsebene über lokale NLI-Entailment-Prüfung: für jeden Satz im Block der endgültigen Antwort entscheidet es, ob die zitierte Textstelle die Aussage wirklich stützt.

Der Context Recall (0,5882) ist der offene Engpass. Der Retrieval-Stack bringt für etwa 41 % der Fragen den maßgeblichen Beleg nicht nach oben, und der Umstieg auf ColBERT v2 zielt genau darauf, über MaxSim auf Token-Ebene, das gegenüber abweichenden Fachbegriffen weniger empfindlich ist. Die Ergebnisse dieses Laufs stehen aus.

  • SPECTER2
  • FAISS
  • BM25
  • RRF
  • ColBERT v2
  • CRAG
  • HyDE
  • Llama-3.1-8B
  • vLLM
  • RAGAS
  • ALCE
  • QASPER
  • nomic-embed-text-v1.5
  • SLURM