Unsere Aufgabe war es, in kürzester Zeit einen „Proof-of-Concept“ für einen deutschsprachigen Chat-Bot zu entwickeln, der basierend auf einer vorhandenen „Knowledge-Base“ Fragen interner User beantworten kann.
Die Knowledge-Base bestand aus zwei Hauptquellen:
Aus öffentlich verfügbaren und sehr gut strukturierten schweizerischen Gesetzestexten auf kantonaler und Bundesebene im PDF-Format.
Aus internen Kundendokumenten (Weisungen), ebenfalls im PDF-Format. Diese internen Dokumente waren weniger gut strukturiert als die Gesetzestexte und enthielten mehr Grafiken. Zusätzlich gab es noch interne Glossare in tabellarischer Form.
Im Rahmen des Projektes stellten sich insbesondere folgende Fragen:
Wie können wir ein Basis-RAG-System ausgehend von den voreingestellten Default-Einstellungen und -Parametern mit begrenztem Mitteleinsatz optimieren?
An welchen „Stellschrauben“ können wir überhaupt drehen und was sind deren Auswirkungen?
Wann ist das System „gut genug“ für die Anwender?
In der Basisversion wurden die PDF-Dokumente mit dem „FormRecognizerService“ von Microsoft vor der Weiterverarbeitung in das HTML-Format extrahiert. Wir vermuteten jedoch, dass eine Extraktion in das Markdown-Format zu einer besseren Leistung des RAG-Systems führen würde.
Für das Experiment verwendeten wir den „DocumentIntelligenceClient“ von Microsoft in der neuesten Version, wobei wir Markdown als Output-Format wählten. Im Ergebnis erbrachte die Verwendung von Markdown allein jedoch keine messbare Verbesserung gegenüber der Basisversion.
In der Basisversion wurden die aus den Dokumenten extrahierten Texte anhand gängiger Satzzeichen wie „.“, „!“, „?“, „;“, „:“ usw. in Schnipsel mit der vorgegebenen Größe von 1024 Tokens zerteilt. Dies hatte zur Folge, dass der Text unabhängig von der Struktur des jeweiligen Dokumentes gesplittet wurde: Der zusammengehörende Inhalt eines Textabschnitts, der aus mehreren Sätzen besteht, wurde so unter Umständen auf verschiedene Schnipsel aufgeteilt, was suboptimal erschien.
Wir wählten deshalb ein Vorgehen, bei dem der Text zunächst nach den Überschriften der Abschnitte und erst in einem zweiten Schritt bei den dann noch zu großen Chunks nach den gängigen Satzzeichen gesplittet wird. Zu kleine Schnipsel setzten wir hierbei wieder bis zur Zielgröße zusammen.
Dieses Experiment erwies sich als erfolgreich und erzielte einen um sechs Prozentpunkte höheren RAGAS-Score als die Basisversion.
Wir vermuteten, dass das für die Antwort-Generierung verwendete GPT-4-Modell besser mit englischsprachigen Anfragen und Dokumenten umgehen könnte als mit unseren deutschsprachigen. Deshalb erwogen wir eine Übersetzung der Anfragen und Dokumente ins Englische sowie eine Rückübersetzung der Antworten ins Deutsche. Da dies jedoch aufwändige Anpassungen erfordern und die Übersetzungen auch einen Qualitätsverlust bewirken könnten, entschieden wir uns schließlich gegen die Übersetzung.
Stattdessen fanden wir heraus, dass Deutsch mittlerweile von der Lucene-Suche im Azure AI Search Index unterstützt wird, wenn man die Felder entsprechend konfiguriert. Folglich wählten wir diesen Weg und kombinierten ihn mit einer Anpassung in der Suchmethodik, wie im Folgenden beschrieben.
Standardmäßig werden bei RAG-Systemen sowohl die Anfrage als auch die in der Datenbank gespeicherten Dokumentschnipsel in numerische Vektoren (sogenannte Embeddings) umgewandelt. Das RAG-System sucht dann die für die Anfrage relevanten Schnipsel, indem es diejenigen Schnipsel-Vektoren mit der geringsten „Distanz“ zum Anfrage-Vektor identifiziert.
Wir haben uns gefragt, ob eine semantische Lucene-Suche in deutscher Sprache besser abschneiden würde als die Standard-Vektorsuche, da das standardisierte Embedding-Modell von OpenAI möglicherweise für unsere Dokumente und den Kontext nicht optimal sein könnte.
Diese Vermutung erwies sich als zutreffend und unser Experiment erzielte einen um sechs Prozentpunkte höheren RAGAS-Score als die Basisversion.
Unsere Experimente haben gezeigt, dass es sich lohnen kann, je nach genauer Aufgabe und Kontext, Anpassungen an der Default-Konfiguration der vorhandenen Basis-RAG-Systeme durchzuführen. Mit der Kombination unserer Experimente konnten wir einen Anstieg im RAGAS-Score von gut zehn Prozentpunkten erzielen.
Wir bieten umfangreiche Unterstützung im Bereich Artificial Intelligence & Machine Learning an. Wenn Sie an einer Optimierung Ihrer Systeme oder an anderen AI- und ML-Projekten interessiert sind, stehen wir Ihnen gerne zur Verfügung.