Wir haben bereits Foundation-Modelle mit LLMs und Diffusionsmodellen behandelt sowie einen Überblick darüber gegeben, wie große Sprachmodelle in der Praxis in drei zentralen Feldern Anwendung finden: In-Context Learning, Fine-Tuning und Pre-Training.
In diesem Beitrag konzentrieren wir uns auf das Retrieval Augmented Generation (RAG) Framework, das die In-Context-Learning-Fähigkeit von LLMs nutzt und LLMs mit einer externen Datenquelle verbindet, die in den Trainingsdaten nicht vorhanden war.
Was ist RAG und warum sollte man es nutzen?
Large Language Models haben Einschränkungen, wie z. B. ein begrenztes Kontextfenster und ein bestimmtes Aktualitätsdatum. Um diese Einschränkungen zu überwinden, können Retrieval Augmented Generation angewendet werden. Retrieval-Augmented Generation (RAG) folgt dem Ansatz, LLMs mit zusätzlichen Daten aus einer externen Informationsquelle zu versorgen. Dies ermöglicht, präzisere und kontextbezogene Antworten zu geben und gleichzeitig Halluzinationen zu verringern.
LLMs erhalten eine große Datenmenge, um ein breites Spektrum an allgemeinem Wissen zu erlernen, das in dem neuronalen Netz als parametrisches Wissen gespeichert wird. Wenn wir jedoch ein LLM auffordern, eine Ausgabe/Antwort zu generieren, die Informationen benötigt, die nicht in den Trainingsdaten enthalten waren, weil es sich um neuere Informationen, geschützte Daten oder domänenspezifische Daten handelt, kann dies zu Halluzinationen oder zu faktischen Ungenauigkeiten führen. Daher ist es von entscheidender Bedeutung, die Wissenslücke zwischen dem allgemeinen Wissen des LLM und zusätzlichem Wissen zu schließen. So wird das LLM dabei unterstützt, präzisere und kontextbezogene Ergebnisse zu erzielen und Halluzinationen zu verringern.
Wir können neuronale Netze anpassen, um Wissenslücken durch Fine-Tuning zu schließen. Dies ist eine klassische, aber immer noch wirksame Technik, die auch Rechenleistung, technisches Fachwissen, Kosten und eine vergleichsweise geringe Anpassungsfähigkeit an das neue Wissen erfordert. Hier kommt die RAG ins Spiel:
Retrieval: Bezeichnet den Prozess, relevante Informationen oder Dokumente aus einer großen Datenbank im Bezug auf eine bestimmte Eingabe oder Frage zu finden und abzurufen.
Augmented: Bezieht sich auf die Erweiterung oder Verbesserung des Generierungsprozesses durch die Verwendung der abgerufenen Informationen, um eine detailliertere und nützlichere Antwort zu liefern.
Generation: Bezeichnet den Prozess der Erzeugung einer menschenähnlichen Antwort oder eines Textes auf der Grundlage der abgerufenen und verarbeiteten Informationen.
Die RAG kann in zwei Hauptschritte unterteilt werden,
- Retrieval as Dense Vector Retrieval (R): Hier werden Vektoreinbettungen verwendet, um die Suche durchzuführen.
- In-Context Learning (AG): Hier erweitern wir den Kontext der Eingabeaufforderung, indem wir alle gesammelten Informationen in das Kontextfenster des LLM einfügen, um eine Ausgabe/Antwort zu generieren; das ist der Teil des kontextbezogenen Lernens.
Im vorigen Beitrag wurde bereits das In-Kontext-Lernen besprochen. Im Zusammenhang mit RAG werden wir diese In-Kontext-Lernfähigkeit des LLM mit Hilfe des Retrievalprozesses nutzen. Nach dem Retrieval findet eine Augmentation innerhalb des Prompt Templates statt und wird in das LLM eingespeist. Das LLM kommt erst in der allerletzten Phase eines RAG-Systems ins Spiel. Das Retrieval und die Augmentierung finden vor der Generierung statt, die letztendlich die gestellte Frage beantwortet.
Diskutieren wir also den Retrieval-Prozess.
Dense Vector Retrieval:
Retrieval besteht aus 3 Schritten:
- Das Stellen einer Frage.
- Durchsuchen einer oder mehrerer Datenbanken mit Informationen, um nach Dingen zu suchen, die der von uns gestellten Frage ähnlich sind.
- Rückgabe der Information.
Vector Database: Um das zu tun, verwenden wir oft eine Vektordatenbank. Im Allgemeinen nennen wir diese Vektordatenbank einen Index. Es gibt viele verschiedene Arten von Indexen, die Vektordatenbank ist nur ein Typ.
Vector Embedding: Vector embedding ist der Prozess der Darstellung von Wörtern, Sätzen oder ganzen Dokumenten als dichte, niedrigdimensionale Vektoren in einem mathematischen Raum (eine lange Folge von Zahlen). Vector embeddings fassen die semantischen Beziehungen zwischen Wörtern zusammen und ermöglichen es Algorithmen, deren kontextuelle Bedeutung zu verstehen und eine kompakte und aussagekräftige Darstellung von Textdaten zu liefern.
Embedding model: Das embedding model wandelt rohen Text in dense vector representations (Vector embeddings) um, welche semantische Bedeutungen erfassen.
Schritte für den Aufbau einer Vector Datenbank:
- Aufteilung der Dokumente in einzelne Abschnitte
- Erstellen von Einbettungen für jeden Chunk (indem man sie durch ein Einbettungsmodell laufen lässt)
- Speichern dieser Einbettungen in unserer vector database
Diese Datenbank wird uns erlauben, Vektoren zu vergleichen und nach Ähnlichkeiten zu suchen, wenn wir eine Frage stellen. Hier kommt der Retrieval-Aspekt (unter Benutzung eines Frameworks wie Langchainoder LlamaIndex) von RAG ins Spiel. Wenn wir also eine Frage stellen, wandeln wir diese Frage in einen Vector um und suchen in unserer vector database nach ähnlichen Vektoren und geben dann diesen Kontext zurück, bevor wir ihn in unsere Prompts einfügen.
Die benötigten Informationen werden dann wieder in einer natürlichen Sprache (dekodiert) zurückgegeben, sodass Menschen auf natürliche Weise mit LLMs interagieren können.
Wie man die RAG verbessern kann?
Es gibt verschiedene Techniken, um von der einfachen zur fortgeschrittenen RAG zu gelangen. Hier können wir mit grundlegenden Techniken beginnen und dann die fortgeschrittenen Optionen beleuchten.
Einfache/Basistechniken:
- ‘Prompt Engineering’ – Versuch, die im RAG-System verwendeten Prompts zu inspizieren und sie mit fortgeschrittenen Prompt-Techniken anzupassen.
- Die Wahl des richtigen ‘embedding model‘ – Probiere verschiedene Einbettungsmodelle mit unterschiedlichen Spezifikationen aus
- Anpassen der ‘chunk size’ – Beim Ingesting werden die Dokumente in Chunks mit einem bestimmten Überlappungsgrad aufgeteilt. Die Anpassung dieser Werte wirkt sich auf die berechneten Einbettungen aus.
- Hybride Suche – Ergebnisse der ‘vector embedding‘-Ähnlichkeit und der Stichwortsuche werden kombiniert.
- Metadaten Filter – Hier können wir Metadaten anhängen, während wir Dokumente an die Vector Datenbank senden. Diese Metadaten können in späteren Phasen nützlich sein, um die Quellen zu den Antworten zu verfolgen und auch um die Daten vor der Durchführung der Ähnlichkeitssuche zu filtern.
Langchain oder LlamaIndex verfügen über eingebaute Funktionen zur Unterstützung der Implementierung dieser Techniken, sodass das Experimentieren relativ simpel ist.
Fortgeschrittene Techniken:
Fine-tuning Embeddings Model
Mit dieser Methode können wir die Fähigkeit des „Retrieval-Augmented Generation“ (RAG)-Systems verbessern, die relevantesten Dokumente zu identifizieren. Das trägt zu einer allgemeinen Leistungssteigerung des RAG-Systems bei. Unsere besondere Aufmerksamkeit liegt auf der Feinabstimmung, da wir in dem Kontext, in dem wir das RAG-System einsetzen, möglicherweise ein sehr spezielles Vokabular verwenden. Daher möchten wir sicherstellen, dass wir zunächst alle komplexen oder speziellen Ausdrücke verarbeiten können. Um die Feinabstimmung durchzuführen, müssen wir einen Trainings-, Validierungs- und Testdatensatz entwickeln, der aus Paaren von Fragen und zusammenhängenden Kontexten besteht. Anschließend können wir eine Verlustfunktion verwenden, die alle positiven Paare berücksichtigt und den Datensatz automatisch mit negativen Paaren erweitert. Mit anderen Worten: Wir könnten – wenn wir eine Frage stellen – einen falschen, grundsätzlich irrelevanten Kontext zurückgeben, was ein negatives Paar darstellen würde. Nach der Feinjustierung des Embedding-Modells können wir das Modell bewerten und dabei verschiedene Metriken wie die mittlere durchschnittliche Präzision bei K (MAP@K), den normalisierten kumulativen Gewinn bei K (NDCG@K), Präzision, Genauigkeit usw. verwenden, um die Funktionsweise des Abrufprozesses zu überprüfen.
Fine-tuning LLM
Die Feinabstimmung des LLM ist eine weitere fortschrittliche Methode zur Verbesserung des RAG-Systems. Hierbei wird das Basismodell – das ein Chat-Modell oder ein auf Anweisungen abgestimmtes Modell sein kann – mit spezifischen Anweisungsbeispielen trainiert. Diese Beispiele könnten sehr spezifisch für den Bereich, das Produkt oder die Sprache sein, das bzw. die unser RAG-System nutzen soll. Hierdurch wird das Sprachmodell so angepasst, dass es effektiv in der Erzeugung von Ausgaben ist, die mit den Anforderungen des Modells übereinstimmen, und steigert so die Gesamtproduktivität des RAG-Systems. In einem früheren Beitrag habe ich einen kurzen Überblick über die Feinabstimmung gegeben, in Verbindung mit den Fähigkeiten des LLMs. In einem der nächsten Beiträge werde ich tiefer in dieses Thema eintauchen, einschließlich der Techniken RLHF, RLAIF, PEFT, LORA usw. Für den Abschluss ist noch eine weitere fortschrittliche Methode zu erwähnen, die zur Verbesserung des RAG-Systems eingesetzt wird.
Fortgeschrittene ‘retrieval’ Methoden
Es existieren einige fortschrittliche Retrieval-Methoden, die mithilfe von Frameworks wie Langchain, LlamaIndex usw. genutzt werden können:
- Re-Ranking: Hierbei werden die Dokumente neu sortiert und gefiltert, wobei die relevantesten Dokumente an oberster Stelle stehen. Ziel ist es, die Kontexte zu priorisieren, die am ehesten genaue und relevante Antworten liefern.
- Mehrfachanfragen: Die Methode der Mehrfachanfragen ist eine verbesserte Lösung zur Reduzierung der starken Abhängigkeit von Anfragen und zur Verbesserung der Konsistenz der Ergebnisse. Sie ruft mehrere Dokumentensätze ab, die auf unterschiedlichen Interpretationen der ursprünglichen Anfrage basieren. Dies ist besonders vorteilhaft bei unklaren oder unscharf formulierten Anfragen.
- RAG-Fusion: Diese erweiterte Iteration der Methode mit Mehrfachanfragen erweitert eine einzelne Benutzeranfrage zu mehreren verwandten Anfragen. Anschließend wird jede Anfrage verwendet, um eine Vektorsuche durchzuführen und eine Vielzahl von Dokumenten zu finden. Die Dokumente werden dann mit einem Ranking-Algorithmus (Reciprocal Rank Fusion) neu sortiert, um sicherzustellen, dass die relevantesten Informationen hervorgehoben werden.
- Small-to-big Retrieval: Bei diesem Ansatz werden kleinere Texteinheiten während des Abrufprozesses verwendet und dann der größere Textbereich bereitgestellt, zu dem der gefundene Text gehört. Der zurückgegebene Kontext wird erweitert, indem der Bereich um ihn herum betrachtet wird, bevor die endgültige Ausgabe erzeugt wird.
RAG mit Analysieren ‘Retrieval‘ auswerten
Für die Bewertung des RAG-Systems gibt es einige Aspekte, die wir berücksichtigen können, wie ‚Richtigkeit‘, ’semantische Ähnlichkeit‘, ‚Glaubwürdigkeit‘ und ‚Kontextrelevanz‘. Bei der Analyse des Retrievals sind ‚Glaubwürdigkeit‘ und ‚Kontextrelevanz‘ die beiden entscheidenden Metriken. ‚Glaubwürdigkeit‘ misst, ob die Antwort für den Kontext relevant ist. ‚Kontextrelevanz‘ misst, ob der gefundene Kontext und die Antwort für die Frage relevant sind. Wir wollen sicherstellen, dass die gestellte Frage die Richtung vorgibt. ‚Kontextrelevanz‘ und ‚Glaubwürdigkeit‘ sind zwei Metriken, die bei der Analyse von Retrieval wichtig sind. Wenn wir die Generierung analysieren, da wir versuchen, das Retrieval zu verbessern, sollten wir auch bessere Ergebnisse erwarten. Daher möchten wir idealerweise bei allen Bewertungsinstrumenten, die wir verwenden, einen positiven Trend erkennen. ‚Richtigkeit‘ und ’semantische Ähnlichkeit‘ betreffen die Seite der Generierung. Hier vergleichen wir die generierte Antwort mit unserer Referenzantwort. Die Referenzantwort ist die akzeptable Antwort. Wir können hochleistungsfähige Modelle wie GPT-4 verwenden, um die Referenzantwort zu erstellen, wenn wir nicht genügend Personal haben, um den Datensatz für die Baseline zu erstellen.