Ich diskutiere einen bestimmten Schritt der RAG -Pipeline: den Dokumentenabrufschritt. Dieser Schritt ist für die Leistung eines Lappensystems von entscheidender Bedeutung, wenn man bedenkt, dass es für ein LLM schwierig ist, die relevantesten Dokumente zu erhalten, die Fragen des Benutzers korrekt zu beantworten. Ich werde den traditionellen Ansatz zum Abholen der relevantesten Dokumente, einige Techniken zur Verbesserung und die Vorteile diskutieren, die Sie aus einem besseren Dokumentenabruf in Ihrer Lag -Pipeline sehen werden.

Gemäß meinem letzten Artikel über Anreicherung des LLM -Kontextes mit MetadatenIch werde mein Hauptziel für diesen Artikel schreiben:

Mein Ziel In diesem Artikel soll hervorgehoben werden, wie Sie die relevantesten Dokumente für Ihre KI -Suche abrufen und filtern können.

Diese Abbildung zeigt eine traditionelle Lag -Pipeline. Sie beginnen mit der Benutzerabfrage, die Sie mit einem Einbettungsmodell codieren. Anschließend vergleichen Sie diese Einbettung mit der vorberechtigten Einbettung des gesamten Dokumentkorpus. Normalerweise werden die Dokumente in Stücke aufgeteilt, wobei sich eine gewisse Überlappung zwischen ihnen überlappt, obwohl einige Systeme auch nur mit ganzen Dokumenten arbeiten. Nach der Berechnung der Einbettungsähnlichkeit behalten Sie nur die relevantesten Dokumente, wobei ok eine Nummer ist, die Sie selbst auswählen, normalerweise eine Zahl zwischen 10 und 20. Der Schritt, die relevantesten Dokumente angesichts der semantischen Ähnlichkeit abzurufen, ist das Thema des heutigen Artikel. Nachdem Sie die relevantesten Dokumente abgerufen haben, füttern Sie sie zusammen mit der Benutzerabfrage in eine LLM, und das LLM gibt schließlich eine Antwort zurück. Bild des Autors.

Inhaltsverzeichnis

Warum ist ein optimales Dokumentenabruf wichtig?

Es ist wichtig zu verstehen, warum das Dokument für jede Lag -Pipeline so kritisch ist. Um dies zu verstehen, müssen Sie auch einen allgemeinen Umriss des Flusses in einer Lappenpipeline haben:

  1. Der Benutzer geht in seine Abfrage ein
  2. Die Abfrage ist eingebettet, und Sie berechnen die Einbettung der Ähnlichkeit zwischen der Abfrage und jedem einzelnen Dokument (oder ein Teil des Dokuments)
  3. Wir holen die relevantesten Dokumente, die auf der Einbettung der Ähnlichkeit basieren
  4. Die relevantesten Dokumente (oder Brocken) werden in ein LLM eingespeist und werden aufgefordert, die Benutzerfrage angesichts der bereitgestellten Brocken zu beantworten
Diese Abbildung zeigt das Konzept der Einbettung der Ähnlichkeit. Auf der linken Seite haben Sie die Benutzerabfrage mit „Fassungsvereinbarung des Mietvertrags“. Diese Abfrage ist in den Vektor eingebettet, den Sie unter dem Textual content sehen. Darüber hinaus haben Sie im oberen Mitte das verfügbare Dokumentkorpus, in dem in diesem Fall vier Dokumente vorliegen, die alle Einbettungen vorberechnet haben. Anschließend berechnen wir die Ähnlichkeit zwischen der Abfrageeinbettung und jedem der Dokumente und kommen mit einer Ähnlichkeit heraus. In diesem Beispiel, Okay = 2, füttern wir die beiden relevantesten Dokumente in unserem LLM für die Beantwortung von Fragen. Bild des Autors.

Jetzt gibt es einige Aspekte der Pipeline, was wichtig ist. Elemente wie:

  • Welches Einbettungsmodell verwenden Sie
  • Welches LLM -Modell verwenden Sie?
  • Wie viele Dokumente (oder Brocken) holen Sie ab?

Ich würde jedoch argumentieren, dass es wahrscheinlich keinen Aspekt gibt, der wichtiger ist als die Auswahl der Dokumente. Dies liegt daran, dass es ohne die richtigen Dokumente keine Rolle spielt, wie intestine Sie LLM sind oder wie viele Brocken Sie abrufen, ist die Antwort am wahrscheinlichsten falsch.

Das Modell wird wahrscheinlich mit einem etwas schlechteren Einbettungsmodell oder einem etwas älteren LLM funktionieren. Wenn Sie jedoch nicht die richtigen Dokumente abrufen, fällt Ihre Lag -Pipeline aus.

Traditionelle Ansätze

Ich werde zunächst einige traditionelle Ansätze verstehen, die heute verwendet werden, wobei ich hauptsächlich die Einbettung der Ähnlichkeit oder der Key phrase -Suche anhand einbettet.

Ähnlichkeit einbetten

Die Verwendung von Ähnlichkeiten, um die relevantesten Dokumente abzurufen, ist heute der Ansatz. Dies ist ein solider Ansatz, der in den meisten Anwendungsfällen anständig ist. RAG mit dem Einbetten von Ähnlichkeitsdokumenten Abruf ist genau so, wie ich oben beschrieben habe.

Die Key phrase -Suche wird häufig auch zum Abrufen relevanter Dokumente verwendet. Traditionelle Ansätze wie TF-IDF oder BM25 werden bis heute mit Erfolg verwendet. Die Key phrase -Suche hat jedoch auch ihre Schwächen. Beispielsweise holt es nur Dokumente, die auf einer genauen Übereinstimmung basieren, was Probleme einführt, wenn eine genaue Übereinstimmung nicht möglich ist.

Daher möchte ich einige andere Techniken diskutieren, mit denen Sie Ihren Dokumentenabrufschritt verbessern können.

Techniken, um relevantere Dokumente zu holen

In diesem Abschnitt werde ich einige fortgeschrittenere Techniken erörtern, um die relevantesten Dokumente abzurufen. Ich werde den Abschnitt in zwei Teile teilen. Der erste Abschnitt behandelt das Optimieren von Dokumentenabruf für den Rückruf und bezieht sich auf das Abrufen möglichst viele der relevanten Dokumente wie möglich aus dem Korpus der verfügbaren Dokumente. In dem anderen Unterabschnitt wird erläutert, wie die Präzision optimiert werden kann. Dies bedeutet, dass die von Ihnen abgerufenen Dokumente tatsächlich korrekt und für die Benutzerabfrage related sind.

Rückruf: Holen Sie sich mehr von den relevanten Dokumenten

Ich werde die folgenden Techniken diskutieren:

  • Kontextabruf
  • Mehr Stücke holen
  • Wiederbelebung

Kontextabruf

Diese Abbildung zeigt die Pipeline für das Kontextabruf. Die Pipeline enthält ähnliche Elemente wie eine herkömmliche Lag -Pipeline mit der Benutzeraufforderung, der Vector -Datenbank (DB), und fordert das LLM mit den relevantesten Teilen von Okay auf. Das Kontextabruf führt jedoch weiter einige neue Elemente ein. Erstens ist der BM25 -Index, in dem alle Dokumente (oder Brocken) für die BM25 -Suche indiziert sind. Wenn eine Suche durchgeführt wird, können wir die Abfrage schnell indexieren und die relevantesten Dokumente gemäß BM25 abrufen. Anschließend behalten wir die relevantesten Dokumente sowohl von BM25 als auch von semantischer Ähnlichkeit (Vektor DB) und kombinieren diese Einbettungen. Schließlich füttern wir wie gewohnt zusammen mit der Benutzerabfrage die relevantesten Dokumente in die LLM und erhalten eine Antwort. Bild des Autors.

Kontextabruf ist eine von Anthropic im September 2024 eingeführte Technik. Ihr Artikel behandelt zwei Themen: Hinzufügen von Kontext zum Dokumentieren von Brocken und die Kombination der Schlüsselwortsuche (BM25) mit semantischer Suche, um relevante Dokumente abzurufen.

Um den Dokumenten einen Kontext hinzuzufügen, nehmen sie jedes Dokumentanteil und fordern ein LLM auf, angesichts des Chunks und des gesamten Dokuments, um den Chunk um sowohl Informationen aus dem angegebenen Chunk als auch im relevanten Kontext aus dem gesamten Dokument umzuschreiben.

Wenn Sie beispielsweise ein Dokument in zwei Stücke unterteilt haben. Wenn Chunk One wichtige Metadaten wie Adresse, Datum, Ort und Uhrzeit enthält, und der andere Chunk enthält Informationen zu einem Mietvertrag. Die LLM könnte den zweiten Teil umschreiben, um sowohl den Mietvertrag als auch den relevantesten Teil des ersten Teils einzuschließen, in diesem Fall die Adresse, der Ort und das Datum.

Anthropic erläutert auch die Kombination der semantischen Suche und der Key phrase -Suche in ihrem Artikel, das Abrufen von Dokumenten mit beiden Techniken und verwendet einen priorisierten Ansatz, um die von jeder Technik abgerufenen Dokumente zu kombinieren.

Mehr Stücke holen

Ein einfacherer Ansatz, um mehr von den relevanten Dokumenten abzurufen, besteht darin, einfach mehr Stücke zu holen. Je mehr Stücke Sie holen, desto höher ist Ihre Wahrscheinlichkeit, die relevanten Stücke zu holen. Dies hat jedoch zwei Hauptabgriffen:

  • Sie werden wahrscheinlich auch irrelevantere Brocken erhalten (Impacting Recall)
  • Sie erhöhen die Menge an Token, die Sie Ihrem LLM füttern, was sich negativ auf die Ausgangsqualität der LLM auswirken kann

Umruft erneut zu erinnern

Das Neuaufbau ist auch eine leistungsstarke Technik, mit der die Präzision und das Abrufen relevanter Dokumente an eine Benutzerabfrage erhöht werden können. Wenn Sie Dokumente basieren, die auf semantischer Ähnlichkeit basieren, weisen Sie allen Brocken eine Ähnlichkeitsbewertung zu und halten in der Regel nur die obersten ok ähnlichen Brocken (ok ist normalerweise eine Zahl zwischen 10 und 20, aber es variiert für verschiedene Anwendungen). Dies bedeutet, dass ein Reranker versuchen sollte, die relevanten Dokumente in die relevantesten Dokumente zu stellen und gleichzeitig irrelevante Dokumente aus derselben Liste zu halten. Ich denke, Qwen Reranker ist ein gutes Modell; Es gibt jedoch auch viele andere Reranker da draußen.

Präzision: Filtern Sie irrelevante Dokumente weg

  • Wiederbelebung
  • LLM -Überprüfung

Präzision neu sein

Wie im letzten Abschnitt zum Rückruf erläutert, können Reranker auch zur Verbesserung der Präzision verwendet werden. Reranker erhöhen den Rückruf, indem sie relevante Dokumente in die oberste Okay -Liste der relevanten Dokumente hinzufügen. Auf der anderen Seite werden die Reranker die Präzision verbessern, indem sie sicherstellen, dass die irrelevanten Dokumente nicht in der Liste der relevantesten Dokumente von Okay fernhalten.

LLM -Überprüfung

Die Verwendung von LLM, um die Relevanz der Chunk (oder Dokument) zu beurteilen, ist auch eine leistungsstarke Technik, um irrelevante Stücke wegzufiltern. Sie können einfach eine Funktion wie unten erstellen:

def is_relevant_chunk(chunk_text: str, user_query: str) -> bool:
    """
    Confirm if the chunk textual content is related to the person question
    """

    immediate = f"""
    Given the offered person question, and chunk textual content, decide whether or not the chunk textual content is related to reply the person question.
    Return a json response with {
        "related": bool
    }
    <user_query>{user_query}</user_query>
    <chunk_text>{chunk_text}</chunk_text>
    """
    return llm_client.generate(immediate)

Anschließend füttern Sie jedes Stück (oder Dokument) durch diese Funktion und behalten nur die Brocken oder Dokumente, die von der LLM als related beurteilt werden.

Diese Technik hat zwei Hauptabgrenzen:

  • LLM Kosten
  • LLM -Reaktionszeit

Sie werden viele LLM -API -Anrufe senden, die zwangsläufig erhebliche Kosten entstehen. Darüber hinaus dauert das Senden von so vielen Anfragen Zeit, was Ihrer Lag -Pipeline eine Verzögerung verleiht. Sie sollten dies mit der Notwendigkeit einer schnellen Antworten auf die Benutzer ausgleichen.

Vorteile der Verbesserung des Dokumentenabrufs

Die Verbesserung des Dokumentabrufschritts in Ihrer Lag -Pipeline hat zahlreiche Vorteile. Einige Beispiele sind:

  • Bessere LLM -Frage zur Beantwortung der Leistung
  • Weniger Halluzinationen
  • Öfter in der Lage, die Fragen der Benutzer korrekt zu beantworten
  • Im Wesentlichen erleichtert es den Job der LLMs

Insgesamt steigt die Fähigkeit Ihres Fragenbeantwortungsmodells in Bezug auf die Anzahl der erfolgreich beantworteten Benutzeranfragen. Dies ist die Metrik, die ich empfehle, um Ihr Lappensystem zu bewerten, und Sie können mehr über LLM -Systembewertungen in meinem Artikel über lesen Bewertung von 5 Millionen Dokumenten mit automatischen Evalen.

Weniger Halluzinationen sind ebenfalls ein unglaublich wichtiger Faktor. Halluzinationen sind eines der wichtigsten Probleme, mit denen wir mit LLMs konfrontiert sind. Sie sind so schädlich, weil sie das Vertrauen der Benutzer in das Frage-Antworten-System senken, wodurch sie weniger wahrscheinlich sind, dass sie Ihre Anwendung weiterhin verwenden. Es ist jedoch wertvoll, die Menge an Halluzinationen zu minimieren, die das Lag -System erzeugt.

Weniger irrelevante Dokumente (Präzision) vermeiden auch die Probleme von Kontext aufblähen (zu viel Lärm im Kontext) oder sogar Kontextvergiftung (falsche Informationen in den Dokumenten angegeben).

Zusammenfassung

In diesem Artikel habe ich besprochen, wie Sie den Dokumentenabrufschritt Ihrer Lag -Pipeline verbessern können. Ich begann zu diskutieren, wie ich glaube, dass der Dokumentenabrufschritt der wichtigste Teil der Rag -Pipeline ist, und Sie sollten Zeit damit verbringen, diesen Schritt zu optimieren. Darüber hinaus habe ich diskutiert, wie herkömmliche Lag -Pipelines relevante Dokumente durch semantische Suche und Keywordsuche abrufen. Weiter diskutierte ich über Techniken, die Sie verwenden können, um sowohl die Präzision als auch den Rückruf von abgerufenen Dokumenten mit Techniken wie dem Kontextabruf und der LLM -Chunk -Überprüfung zu verbessern.

👉 Finden Sie mich in Socials:

🧑‍💻 Sich in Verbindung setzen

🔗 LinkedIn

🐦 X / Twitter

✍️ Medium

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert