[NLP] Optimierungsstrategien in RAG-Anwendungen

Rufen Sie Optimierungsstrategien für erweiterte Build-Anwendungen ab

Es gibt keinen einheitlichen Algorithmus, der alle Probleme am besten löst.

Dieser Artikel betrachtet die Retrieval Augmentation Generation (RAG)-Pipeline aus der Sicht eines Datenwissenschaftlers. Es werden mögliche „Hyperparameter“ besprochen, mit denen Sie versuchen können, die Leistung Ihrer RAG-Pipeline zu verbessern. Ähnlich wie zum Beispiel beim Experimentieren im Deep Learning sind Datenerweiterungstechniken keine Hyperparameter, sondern Knöpfe, die angepasst und experimentiert werden können. In diesem Artikel werden auch verschiedene Strategien beschrieben, die Sie anwenden können, die selbst keine Hyperparameter sind.

In diesem Artikel werden die folgenden „Hyperparameter“ behandelt, sortiert nach relevanter Stufe. in der RAG-Pipeline

Während der Aufnahmephase können Sie Leistungsverbesserungen erzielen, indem Sie:

  • Datenreinigung
  • Block
  • eingebettetes Modell
  • Metadaten
  • mehrere Indizes
  • Indexalgorithmus

Während der Inferenzphase (Abruf und Generierung) können Sie Folgendes anpassen:

  • Abfragetransformation
  • Abrufparameter
  • Erweiterte Suchstrategien
  • Modell neu anordnen
  • LLM
  • Just-in-time-Engineering

Beachten Sie, dass dieser Artikel textuelle Anwendungsfälle für RAG behandelt. Bei Multimode-RAG-Anwendungen müssen möglicherweise verschiedene Faktoren berücksichtigt werden.

Einnahmephase

Die Aufnahmephase ist ein vorbereitender Schritt für den Aufbau einer RAG-Pipeline, ähnlich den Datenbereinigungs- und Vorverarbeitungsschritten in ML-Pipelines. Typischerweise umfasst die Aufnahmephase die folgenden Schritte:

  1. Datensammlung
  2. Blockdaten
  3. Erzeugen Sie Vektoreinbettungen von Blöcken
  4. Speichern Sie Vektoreinbettungen und -blöcke in einer Vektordatenbank

Zuerst wird das Dokument in Chunks unterteilt, dann werden die Chunks eingebettet und die Einbettungen in einer Vektordatenbank gespeichert

Die Aufnahmephase der RAG-Pipeline

In diesem Abschnitt werden einflussreiche Techniken und Hyperparameter erläutert, die Sie anwenden und optimieren können, um die Relevanz des während der Inferenzphase abgerufenen Kontexts zu verbessern.

Datenreinigung

Wie bei jeder Data-Science-Pipeline kann die Datenqualität die Ergebnisse in einer RAG-Pipeline erheblich beeinflussen. Bevor Sie mit einem der folgenden Schritte fortfahren, stellen Sie sicher, dass Ihre Daten die folgenden Kriterien erfüllen:

  • Bereinigung: Wenden Sie mindestens einige grundlegende Datenbereinigungstechniken an, die häufig bei der Verarbeitung natürlicher Sprache verwendet werden, z. B. die Sicherstellung, dass alle Sonderzeichen korrekt codiert sind.
  • Genau: Stellen Sie sicher, dass Ihre Informationen konsistent und sachlich korrekt sind, um eine Verwechslung Ihres LLM mit widersprüchlichen Informationen zu vermeiden.

Block

Das Aufteilen von Dokumenten ist ein wichtiger Vorbereitungsschritt in der RAG-Pipeline für externe Wissensquellen, der sich auf die Leistung auswirken kann. Dabei handelt es sich um eine Technik zur Generierung logisch zusammenhängender Informationsteile, typischerweise durch Aufteilen langer Dokumente in kleinere Teile (es können aber auch kleinere Teile zu zusammenhängenden Absätzen zusammengefasst werden).

Eine Sache, die Sie berücksichtigen müssen, istdie Wahl der Chunking-Technologie. In LangChain beispielsweise teilen verschiedene Textteiler Dokumente nach unterschiedlicher Logik auf, z. B. nach Zeichen, Token usw. Es hängt von der Art der Daten ab, die Sie haben. Wenn es sich bei Ihren Eingabedaten beispielsweise um Code handelt, müssen Sie eine andere Chunking-Technik verwenden, als wenn es sich um eine Markdown-Datei handelt.

Die ideale Länge des -Blocks ( chunk_size) hängt von Ihrem Anwendungsfall ab: Wenn es sich bei Ihrem Anwendungsfall um Fragen und Antworten handelt, möchten Sie möglicherweise kürzere spezifische Blöcke , aber wenn es sich bei Ihrem Anwendungsfall um eine Zusammenfassung handelt, benötigen Sie möglicherweise längere Abschnitte. Wenn der Block außerdem zu kurz ist, enthält er möglicherweise nicht genügend Kontext. Ist ein Block hingegen zu lang, kann er zu viele irrelevante Informationen enthalten.

Außerdem müssen Sie „gleitende Fenster“ zwischen Blöcken berücksichtigen ( overlap), um einige zusätzliche Elemente einzuführen Kontext.

eingebettetes Modell

Das Einbettungsmodell ist der Kern des Abrufs. Die Qualität Ihrer Einbettungkann Ihre Suchergebnisse erheblich beeinträchtigen. Im Allgemeinen gilt: Je höher die Dimensionalität der generierten Einbettung, desto genauer ist die Einbettung.

Um mehr über die verfügbaren alternativen Einbettungsmodelle zu erfahren, können Sie sichdie Bestenliste des Large Scale Text Embedding Benchmark (MTEB) ansehen, die 164 eingebettete Texte abdeckt Modell (zum Zeitpunkt des Schreibens).

Während Sie das generische Einbettungsmodell sofort verwenden können, ist es in einigen Fällen notwendig, das Einbettungsmodell an Ihren spezifischen Anwendungsfall anzupassen< a i=2> Könnte sinnvoll sein, um später extraterritoriale Probleme zu vermeiden. Laut von LlamaIndex durchgeführten Experimenten kann eine Feinabstimmung des Einbettungsmodells die Leistung der Abrufbewertungsmetriken um 5–10 % verbessern .

Beachten Sie, dass Sie nicht alle eingebetteten Modelle feinabstimmen können (z. B. OpenAItext-ebmedding-ada-002kann derzeit keine Feinabstimmung vornehmen<). a i=3>).

Metadaten

Wenn Sie Vektoreinbettungen in einer Vektordatenbank speichern, können Sie diese in einigen Vektordatenbanken mit Metadaten (oder nicht vektorisierten Daten) speichern. Die Verwendung der Einbettung von Metadaten-Annotationsvektoren erleichtert die zusätzliche Nachbearbeitung von Suchergebnissen, wie z. B. Metadatenfilterung< a i=4>[1,3,8,9]. Sie können beispielsweise Metadaten wie Datumsangaben, Kapitel- oder Unterkapitelverweise hinzufügen.

mehrere Indizes

Wenn Metadaten nicht ausreichen, um zusätzliche Informationen zur logischen Trennung verschiedener Kontexttypen bereitzustellen, sollten Sieversuchen, mehrere Indizes zu verwenden. Sie können beispielsweise unterschiedliche Indizes für unterschiedliche Dokumenttypen verwenden. Beachten Sie, dass Sie beim Abrufen einige Indexrouten einbeziehen müssen.

Indexalgorithmus

Um schnelle Ähnlichkeitssuchen im großen Maßstab zu ermöglichen, verwenden Vektordatenbanken und Vektorindexbibliotheken die Suche nach ungefähren nächsten Nachbarn (ANN) anstelle der Suche nach k-nächsten Nachbarn (kNN). Wie der Name schon sagt, nähert sich der ANN-Algorithmus den nächsten Nachbarn an und ist daher möglicherweise nicht so genau wie der kNN-Algorithmus. .

Sie können verschiedene ANN-Algorithmen ausprobieren, wie zum BeispielFacebook Faiss (Clustering), Spotify Annoy (Baum), Google ScaNN (Vektorkomprimierung) undHNSWLIB (Nachbargraph). Darüber hinaus verfügen viele ANN-Algorithmen über Parameter, die Sie anpassen können, z. B. HNSWs ef, efConstruction und maxConnections.

Darüber hinaus können Sie die Vektorkomprimierung für diese Indizierungsalgorithmen aktivieren. Ähnlich wie beim ANN-Algorithmus führt die Vektorkomprimierung zu einem gewissen Genauigkeitsverlust. Abhängig von der Wahl des Vektorkomprimierungsalgorithmus und seiner Abstimmung können Sie diesen jedoch auch optimieren.

In der Praxis wurden diese Parameter jedoch während des Benchmarkings von den Forschungsteams von Vektordatenbanken und Vektorindexbibliotheken und nicht von den Entwicklern des RAG-Systems abgestimmt. Wenn Sie jedoch versuchen möchten, mithilfe dieser Parameter das letzte bisschen Leistung herauszuholen, empfehle ich, mit diesem Artikel zu beginnen:

Inferenzphase (Abruf und Generierung)

Die Hauptkomponenten der RAG-Pipeline sind die Abrufkomponente und die Generierungskomponente. Dieser Abschnitt konzentriert sich auf Strategien zur Verbesserung des Abrufs (Abfragetransformationen, Abrufparameter, erweiterte Abrufstrategien und Neuordnungsmodelle), da dies das wirkungsvollere der beiden ist. Es werden aber auch einige Strategien zur Verbesserung der Produktion (LLM und Just-in-Time-Engineering) kurz vorgestellt.

Standard-RAG-Architektur

Die Inferenzphase der RAG-Pipeline

Abfragetransformation

Da die Suchabfrage, die zusätzlichen Kontext in der RAG-Pipeline abruft, ebenfalls im Vektorraum eingebettet ist, wirkt sich ihr Wortlaut auch auf die Suchergebnisse aus. Wenn Ihre Suchanfrage keine zufriedenstellenden Suchergebnisse liefert, können Sie daher verschiedene Techniken zur Abfragetransformation ausprobieren, wie zum Beispiel:

  • Umformulieren:Formulieren Sie die Abfrage mit LLM um und versuchen Sie es erneut.
  • Hypothetical Document Embedding (HyDE):Verwenden Sie ein LLM, um eine hypothetische Antwort auf eine Suchanfrage zu generieren, und verwenden Sie beide zum Abrufen.
  • Unterabfrage:Teilen Sie eine längere Abfrage in mehrere kürzere Abfragen auf.

Abrufparameter

Der Abruf ist ein wichtiger Teil der RAG-Pipeline. Als Erstes sollten Sie überlegen, ob die semantische Suche für Ihren Anwendungsfall ausreichend ist oder ob Sie eine Hybridsuche ausprobieren möchten.

Im letzteren Fall müssen Sie versuchen, die Aggregation von spärlichen und dichten Abrufmethoden in einer Hybridsuche zu gewichten. Daher wird Must durch Anpassen des Parameters alpha zur Steuerung der Gewichtung zwischen Semantik (alpha = 1 ) und schlüsselwortbasierter Suche (alpha = 0 ) geändert nötig sein.

Darüber hinausspielt auch die Anzahl der abzurufenden Suchergebnisse eine wichtige Rolle. Die Anzahl der abgerufenen Kontexte wirkt sich auf die Länge des verwendeten Kontextfensters aus. Wenn Sie ein Reranking-Modell verwenden, müssen Sie außerdem berücksichtigen, wie viel Kontext Sie in das Modell einspeisen.

Beachten Sie, dass das von der semantischen Suche verwendete Ähnlichkeitsmaß zwar ein Parameter ist, der geändert werden kann, Sie jedoch nicht damit experimentieren sollten, sondern es entsprechend dem verwendeten Einbettungsmodell festlegen sollten (z. B. text-embedding-ada-002Unterstützt Kosinusähnlichkeit odermulti-qa-MiniLM-l6-cos-v1Unterstützt Kosinusähnlichkeit, Skalarprodukt und euklidische Distanz) ).

Erweiterte Suchstrategien

Technisch gesehen könnte dieser Abschnitt ein eigener Artikel sein. Diese Übersicht halten wir so prägnant wie möglich.

Die Grundidee dieses Abschnitts besteht darin, dass die zum Abrufen verwendeten Blöcke nicht unbedingt dieselben Blöcke sind, die zur Generierung verwendet werden. Idealerweise würden Sie kleinere Teile zum Abrufen einbetten, aber einen größeren Kontext abrufen.

  • Satzfenster-Abruf:Ruft nicht nur verwandte Sätze ab, sondern auch Fenster mit entsprechenden Sätzen vor und nach dem abgerufenen Satz.
  • Automatische Zusammenführungssuche:Dokumente werden in einer Baumstruktur organisiert. Zum Zeitpunkt der Abfrage können unabhängige, aber verwandte kleinere Blöcke zu einem größeren Kontext zusammengeführt werden.

Modell neu anordnen

Während die semantische Suche den Kontext basierend auf der semantischen Ähnlichkeit mit der Suchabfrage abruft, bedeutet „am ähnlichsten“ nicht unbedingt „am relevantesten“. Reranking-Modelle (wie das Reranking-Modell von Cohere) können dabei helfen, irrelevante zu eliminieren, indem für jeden abgerufenen Kontext eine Bewertung der Abfragerelevanz berechnet wird. Suchergebnisse.

„Am ähnlichsten“ bedeutet nicht unbedingt „am relevantesten“

Wenn Sie ein Reranking-Modell verwenden, müssen Sie möglicherweise die Größe der Neuordnungseingabe,die Anzahl der Suchergebnisse und die Neuordnung, die Sie eingeben möchten, ändern in das LLM. Anzahl der sortierten Ergebnisse.

Wie beim Einbetten von Modellen möchten Sie möglicherweise versuchen, den Reorderer genau auf Ihren spezifischen Anwendungsfall abzustimmen.

LLM

LLM ist die Kernkomponente, die Antworten generiert. Ähnlich wie bei eingebetteten Modellen können Sie je nach Ihren Anforderungen aus mehreren LLMs wählen, z. B. offene oder proprietäre Modelle, Inferenzkosten, Kontextlänge usw.

Wie beim Einbetten oder Neuanordnen von Modellen möchten Sie möglicherweise eine FeinabstimmungLLM versuchen, um bestimmte Formulierungen oder Töne einzubeziehen.

Just-in-time-Engineering

Wie Sie Ihre Eingabeaufforderung formulieren oder strukturieren, hat erheblichen Einfluss auf den Abschluss des LLM.

请仅根据搜索结果给出您的答案,不要考虑其他任何内容!
很重要!您的答案必须基于所提供的搜索结果。
请解释为什么您的答案基于搜索结果!

Außerdem kann die Verwendungeiner kleinen Anzahl von Beispielen in Ihren Eingabeaufforderungen die Qualität Ihrer Arbeit verbessern.

Wie unter „Abrufparameter“ erwähnt, ist die Anzahl der Kontexte, die in die Eingabeaufforderung eingegeben werden, ein Parameter, den Sie ausprobieren sollten. Obwohl sich die Leistung der RAG-Pipeline mit zunehmender Anzahl relevanter Kontexte verbessern kann, kann es auch zu einem „Lost-in-the-Middle“-Effekt kommen, wenn der relevante Kontext in der Mitte vieler Kontexte platziert wird , LLM kann den relevanten Kontext nicht identifizieren. Kontext.

verallgemeinern

Da immer mehr Entwickler Erfahrungen mit dem Prototyping von RAG-Pipelines sammeln, wird es immer wichtiger, Strategien zu diskutieren, um RAG-Pipelines in eine serienreife Leistung zu bringen. In diesem Artikel werden die verschiedenen „Hyperparameter“ und andere Regler erläutert, die Sie in Ihrer RAG-Pipeline je nach der jeweiligen Phase anpassen können:

In diesem Artikel werden die folgenden Strategien zur Kürzung der Aufnahme behandelt:

  • Datenbereinigung: Stellen Sie sicher, dass die Daten sauber und korrekt sind.
  • Blockierung: Wählen Sie eine Blockierungstechnik, Blockgröße ( chunk_size) und Blocküberlappung ( overlap).
  • Einbettungsmodell: Auswahl an Einbettungsmodellen, inkl. Abmessungen und ob eine Feinabstimmung erfolgen soll.
  • Metadaten: Ob Metadaten verwendet werden sollen und welche Metadaten ausgewählt werden sollen.
  • Mehrere Indizes: Entscheiden Sie, ob Sie mehrere Indizes für verschiedene Datensätze verwenden möchten.
  • Indexierungsalgorithmen: Die Auswahl und Abstimmung von ANN- und Vektorkomprimierungsalgorithmen kann angepasst werden, wird jedoch normalerweise nicht von Praktikern angepasst.

Und die folgenden Strategien zur schlussfolgernden Kürzung (Abruf und Generierung):

  • Abfragetransformation: Versuchen Sie es mit Umschreiben, HyDE oder Unterabfrage.
  • Suchparameter: Auswahl der Suchtechnologie (alphawenn die Hybridsuche aktiviert ist) und die Anzahl der abgerufenen Suchergebnisse.
  • Erweiterte Suchstrategien: Ob erweiterte Suchstrategien wie Satzfenster oder automatische Zusammenführungssuchen verwendet werden sollen.
  • Reranking-Modell: Ob ein Reranking-Modell verwendet werden soll, Auswahl des Reranking-Modells, Anzahl der in das Reranking-Modell eingegebenen Suchergebnisse und ob eine Feinabstimmung des Reranking-Modells erfolgen soll.
  • LLM: Auswahl des LLM und ob eine Feinabstimmung erfolgen soll.
  • Just-in-time-Engineering: Probieren Sie verschiedene Formulierungen und einige Beispiele aus.

おすすめ

転載: blog.csdn.net/sikh_0529/article/details/134921044