Getty Images
So bereiten Sie Daten für Retrieval-Augmented Generation vor
Da eine genaue Datenabfrage für RAG-Systeme entscheidend ist, müssen Entwicklungsteams effektive Strategien zur Datenvorverarbeitung in ihrer RAG-Pipeline implementieren.
Retrieval-Augmented Generation (RAG) verbindet generative KI mit Unternehmensdaten. Ohne eine geeignete RAG-Datenpipeline findet das RAG-System jedoch möglicherweise nicht die genauesten Daten, um Benutzeranfragen zu beantworten.
Die Datenqualität ist in RAG-Systemen von größter Bedeutung. Daher umfasst die Erstellung einer erfolgreichen RAG-Anwendung Datenvorverarbeitungsaufgaben wie Inhaltsfilterung, Textnormalisierung, Chunking, Metadaten-Tagging und Einbettungsgenerierung.
Um eine ordnungsgemäße Datenaufbereitung sicherzustellen, müssen RAG-Entwicklungsteams verstehen, wie RAG Daten durchsuchbar macht, Strategien zur Datenvorverarbeitung wie Chunking-Methoden untersuchen und lernen, wie man eine RAG-Datenpipeline aufbaut – von der Auswahl und Bereinigung der Daten bis hin zur Einbettung und Speicherung in einer Vektordatenbank.
Wie RAG Daten durchsuchbar macht
RAG hilft generativen KI-Diensten beim Zugriff auf externe Daten, indem es einen Vektorspeicher oder eine Datenbank mit bestimmten Suchmechanismen verwendet.
Um unstrukturierte Daten – wie beispielsweise ein Dokument – in einen Vektorspeicher aufzunehmen, müssen Teams die Daten zunächst über ein Einbettungsmodell einbetten.
Eine Einbettung wandelt Text in numerische Vektoren um – eine Liste von Dezimalzahlen, die Text, wie Wörter oder Sätze, in einer für Computer verständlichen Weise darstellen.
Betrachten Sie beispielsweise den folgenden Absatz aus einem Dokument:
Wir haben Copilot letzte Woche eingeführt und die Akzeptanz ist hervorragend. Erste Messungen zeigen einen Rückgang des Ticketvolumens um 32 Prozent und einen Anstieg der Self-Service-Lösungen um 27 Prozent innerhalb der ersten 48 Stunden. Die Finanzabteilung schätzt die jährlichen Einsparungen auf 1,4 Millionen Euro, wenn sich dieser Trend fortsetzt.
Die Einbettung dieses Absatzes in Vektoren, die den Text darstellen, sieht wie folgt aus:
[0,81, -0,23, 0,45, 0,12, -0,67, 0,94, 0,30, -0,55, 0,76, 0,10]
Dies ist ein stark vereinfachtes Beispiel. Wenn Teams beispielsweise ein Einbettungsmodell wie das OpenAI-Modell text-embedding-3-small verwenden, ergibt dies einen 1536-dimensionalen Vektor. Es gibt mehrere Einbettungsmodelle von verschiedenen Anbietern. Hugging Face hat eine Einbettungs-Rangliste, die die Stärken und Schwächen verschiedener Einbettungsmodelle zeigt.
Diese Vektoren und der Originaltext werden in einem Vektorspeicher wie Pinecone oder Weaviate gespeichert. Die Daten im Vektorspeicher können etwa so aussehen:
{
„id”: „unique-id-123”,
„values”: [0,81, -0,23, ..., 0,789], // der Vektor (Einbettung)
„metadata”: {
„text”: „ Wir haben Copilot letzte Woche eingeführt und die Akzeptanz ist hervorragend ...“,
‘source’: ”Dokument A“,
”page": 3
}
}
Wenn ein Benutzer eine Frage zu den Daten stellen möchte, sendet er den Prompt über einen Orchestrator – wie LangGraph, LangChain oder Semantic Kernel –, der dann mithilfe einer Suchmethode eine Anfrage an den Vektorspeicher sendet. Die Suchmethode kann zwei oder mehr Teile relevanter Inhalte zurückgeben und diese Informationen an das große Sprachmodell (LLM) weiterleiten, das eine Antwort für den Benutzer generiert.
Warum Chunking wichtig ist
Chunking ist eine Standardmethode der Vorverarbeitung, bei der ein Datensatz in kleinere Abschnitte, sogenannte Chunks, unterteilt wird. Da Vektorspeicher nicht alle Originaldaten speichern können, müssen diese in Chunks aufgeteilt werden.
Der Copilot-Absatz kann beispielsweise in zwei Abschnitte unterteilt werden:
Chunk 1:
Wir haben Copilot letzte Woche eingeführt und die Akzeptanz ist hervorragend.
Chunk 2:
Erste Messungen zeigen einen Rückgang des Ticketvolumens um 32 Prozent und einen Anstieg der Self-Service-Lösungen um 27 Prozent innerhalb der ersten 48 Stunden. Die Finanzabteilung schätzt die jährlichen Einsparungen auf 1,4 Millionen Euro, wenn sich dieser Trend fortsetzt.
Das Problem bei diesem Ansatz ist, dass einige Teile ihre ursprüngliche Bedeutung verlieren können. Wenn ein Benutzer beispielsweise im RAG-System nach Copilot fragt, würde der Suchmechanismus nur den ersten Teil zurückgeben, nicht den zweiten, da zwischen den beiden keine Korrelation besteht. Ohne den zweiten Teil erhält der Benutzer nicht den zusätzlichen Kontext und die Informationen über die Akzeptanz von Copilot.
Hier können Chunking-Strategien helfen, Daten so zu zerlegen, dass sie in den Vektorspeicher passen und ihre ursprüngliche Bedeutung in einer RAG-Engine beibehalten.
4 Chunking-Strategien
Ohne geeignete Strategien können RAG-Systeme Daten falsch zerlegen. Es stehen verschiedene Chunking-Methoden zur Verfügung, darunter Chunking mit fester Größe, Chunking mit variabler Größe basierend auf dem Inhalt, regelbasiertes Chunking und Sliding Window Chunking.
1. Chunking mit fester Größe
Bei dieser Methode wird der Text unabhängig vom Inhalt in gleich große Segmente unterteilt, zum Beispiel 400 Wörter oder 800 Zeichen pro Chunk.
2. Chunking mit variabler Größe basierend auf dem Inhalt
Hier wird der Text nach natürlichen Grenzen unterteilt, zum Beispiel Satzendezeichen, Zeilenumbrüche oder strukturelle Hinweise, die von Tools zur Verarbeitung natürlicher Sprache (Natural Language Processing, NLP) identifiziert werden, die das Layout und die Bedeutung von Dokumenten analysieren.
3. Regelbasierte Chunking
Dieser Ansatz stützt sich auf die intrinsische Struktur oder die sprachlichen Grenzen des Dokuments. Typische Methoden sind das Chunking nach Sätzen oder Absätzen unter Verwendung vordefinierter Regeln.
4. Sliding Window Chunking
Bei dieser Technik werden überlappende Chunks erzeugt, indem ein Fenster mit fester Größe durch den Text geschoben wird. Beispielsweise kann jeder Chunk 500 Wörter enthalten, wobei der nächste Chunk 300 Wörter weiter beginnt, sodass sich die Chunks um 200 Wörter überlappen.
Für den Copilot-Absatz würde ein Sliding-Window- oder regelbasierter Ansatz sicherstellen, dass der Absatz seine Bedeutung nicht verliert, da beide Inhalte im selben Chunk verfügbar sind.
6 Schritte der RAG-Datenpipeline
Ein weiterer Aspekt, der bei RAG-Systemen zu berücksichtigen ist, ist die Aktualisierung der Daten. Wenn es sich bei den Originaldaten beispielsweise um ein Word-Dokument handelt, bevor sie in einen Vektorspeicher eingebettet werden, könnten die Daten schnell an Wert verlieren, wenn sie nicht regelmäßig aktualisiert werden.
Außerdem müssen Dokumente, die nicht direkt eingebettet werden können, wie zum Beispiel PDF-Dateien, in ein textfreundliches Format konvertiert werden, um sie in den Vektorspeicher zu übertragen.
Daher ist es entscheidend, eine Datenpipeline aufzubauen, die den Prozess der kontinuierlichen Einbettung neuer Daten aus verschiedenen Quellen und Dateitypen in den Vektorspeicher automatisieren kann.
Eine RAG-Datenpipeline besteht in der Regel aus den folgenden sechs Schritten:
1. Auswahl und Erfassung des Korpus
Wählen Sie je nach Anwendungsfall die relevantesten Datenquellen und Inhalte aus.
2. Datenvorverarbeitung und -analyse
Bereinigen und standardisieren Sie die Rohdaten, damit sie für die Einbettung und den Abruf bereit sind. Ein häufig verwendetes Tool ist MarkItDown. Es unterstützt PDF, PowerPoint und viele andere Dateiformate und kann den Inhalt in das Markdown-Format konvertieren, was die Strukturierung beim Chunking erleichtert.
3. Anreicherung
Entfernen Sie störende Inhalte und fügen Sie den Daten hilfreiche Metadaten hinzu, zum Beispiel den Dokumenttitel am Anfang, damit dieser während des Chunking-Prozesses verfügbar ist.
4. Filterung
Entfernen Sie alle irrelevanten oder wenig wertvollen Dokumente, die den Anwendungsfall nicht unterstützen.
5. Chunking
Teilen Sie die bereinigten Daten in kleinere, logische Chunks auf, um die Abrufleistung zu verbessern. Frameworks wie LangChain bieten verschiedene Chunking-Methoden, beispielsweise LangChain CharacterTextSplitter.
6. Einbettung
Konvertieren Sie jeden Chunk in einen Vektor und speichern Sie ihn in einem Vektorspeicher.
Teams können einen Großteil dieses Prozesses mit Cloud-Diensten und Frameworks automatisieren. Azure KI-Suche, ein Cloud-Vektorspeicher- und Suchdienst von Microsoft, bietet beispielsweise eine Zeitplanfunktion, die Daten automatisch aus einem Speicherkonto abruft, sie nach einem vordefinierten Zeitplan einbettet und in Azure AI Search einfügt.