Phase der RAG-Blockanreicherung
Nachdem Sie Ihre Dokumente in eine Sammlung von Abschnitten aufgeteilt haben, besteht der nächste Schritt darin, jeden Abschnitt zu bereichern, indem Sie ihn bereinigen und mit Metadaten anreichern. Durch das Bereinigen der Blöcke können Sie bessere Übereinstimmungen für semantische Abfragen in einer Vektorsuche erzielen. Durch das Hinzufügen von Metadaten können Sie Suchvorgänge von Abschnitten unterstützen, die über semantische Suchvorgänge hinausgehen. Sowohl das Bereinigen als auch das Erweitern umfassen das Erweitern des Schemas für den Block.
In diesem Artikel werden verschiedene Möglichkeiten zum Erweitern Ihrer Blöcke erläutert, einschließlich einiger gängiger Reinigungsvorgänge, die Sie auf Blöcken ausführen können, um Vektorvergleiche zu verbessern. Außerdem werden einige allgemeine Metadatenfelder beschrieben, die Sie Ihren Blöcken hinzufügen können, um den Suchindex zu erweitern.
Dieser Artikel ist Teil einer Reihe. Hier ist die Einführung.
Das folgende Codebeispiel zeigt Datenblöcke, die mit Daten angereichert sind.
Bereinigen von Daten
Das Chunking Ihrer Daten hilft Ihrer Arbeitsbelastung, die relevantesten Datenblöcke zu finden, in der Regel durch die Vektorisierung dieser Blöcke und deren Speicherung in einer Vektordatenbank. Eine optimierte Vektorsuche gibt nur die Zeilen in der Datenbank zurück, die die nächstgelegenen semantischen Übereinstimmungen mit der Abfrage aufweisen. Das Ziel der Datenbereinigung besteht darin, Näheübereinstimmungen zu unterstützen, indem potenzielle Unterschiede beseitigt werden, die nicht wesentlich für die Semantik des Textes sind. Im Folgenden finden Sie einige gängige Reinigungsverfahren.
Anmerkung
Sie sollten den ursprünglichen, nicht bereinigten Block als Abfrageergebnis zurückgeben, sodass Sie ein zusätzliches Feld hinzufügen sollten, um die bereinigten und vektorisierten Daten zu speichern.
Implementieren Sie Strategien zur Kleinschreibung. Durch die Kleinschreibung können großgeschriebene Wörter, z. B. Wörter am Satzanfang, mit den entsprechenden Wörtern innerhalb eines Satzes abgeglichen werden. Einbettungen werden in der Regel zwischen Groß- und Kleinschreibung unterschieden, also „Cheetah“ und „cheetah“ würden zu einem anderen Vektor für dasselbe logische Wort führen. Beispielsweise ist für die eingebettete Abfrage „Was ist schneller, ein Gepard oder ein Puma?“ die eingebettete Abfrage „Geparden sind schneller als Pumas“ eine bessere Übereinstimmung als „Geparden sind schneller als Pumas“. Bei einigen Kleinschreibungsstrategien werden alle Wörter kleingeschrieben, einschließlich Eigennamen, während bei anderen Strategien nur die ersten Wörter in Sätzen kleingeschrieben werden.
Stoppwörter entfernen. Stoppwörter sind Wörter wie "a", "an" und "die". Sie können Stoppwörter entfernen, um die Dimensionalität des resultierenden Vektors zu verringern. Wenn Sie Stoppwörter im vorherigen Beispiel entfernen, sind "ein Gepard ist schneller als ein Puma" und "der Gepard ist schneller als der Puma" vektoriell gleich "Gepard schneller Puma". Es ist jedoch wichtig zu verstehen, dass einige Stoppwörter semantische Bedeutung haben. Beispielsweise könnte 'nicht' als Stoppwort betrachtet werden, aber eine signifikante semantische Bedeutung haben. Sie müssen testen, um die Wirkung des Entfernens von Stoppwörtern zu bestimmen.
Beheben von Rechtschreibfehlern. Ein falsch geschriebenes Wort stimmt nicht mit dem richtig geschriebenen Wort im Einbettungsmodell überein. Beispielsweise ist "Geapard" nicht mit "Gepard" in der Einbettung identisch. Sie sollten Rechtschreibfehler beheben, um dieses Problem zu beheben.
Unicode-Zeichen entfernen. Durch das Entfernen von Unicode-Zeichen lässt sich das Rauschen in Ihren Datenblöcken verringern und die Dimensionalität reduzieren. Wie Stoppwörter können einige Unicode-Zeichen relevante Informationen enthalten. Es ist wichtig, Tests durchzuführen, um die Auswirkungen des Entfernens von Unicode-Zeichen zu verstehen.
Text normalisieren. Das Normalisieren von Text gemäß Standards wie der Erweiterung von Abkürzungen, der Umwandlung von Zahlen in Wörter und der Erweiterung von Kontraktionen, z. B. das Erweitern von Kontraktionen wie 'Ich bin's' auf 'Ich bin es' kann dazu beitragen, die Leistung von Vektorsuchen zu erhöhen.
Erweitern von Blöcken
Semantische Suchanfragen für die vektorisierten Abschnitte funktionieren gut für einige Arten von Abfragen, aber nicht für andere. Je nach den Abfragearten, die Sie unterstützen müssen, müssen Sie Ihre Blöcke möglicherweise mit zusätzlichen Informationen erweitern. Die zusätzlichen Metadatenfelder werden alle in derselben Zeile wie Ihre Einbettungen gespeichert und können in der Suchlösung entweder als Filter oder als Teil einer Suche verwendet werden.
Die folgende Abbildung zeigt den JSON-Code vollständig erweiterter Inhalte und beschreibt, wie die Metadaten von einer Suchplattform verwendet werden können.
Die Metadatenspalten, die Sie hinzufügen müssen, hängen von Ihrer Problemdomäne ab, einschließlich des Datentyps, über den Sie verfügen, und den Typen von Abfragen, die Sie unterstützen möchten. Sie müssen die Benutzererfahrung, die verfügbaren Daten und die Ergebnisqualität analysieren, die Sie erreichen möchten. Von dort aus können Sie ermitteln, welche Metadaten Ihnen dabei helfen können, die Anforderungen Ihrer Workload zu erfüllen.
Im Folgenden finden Sie einige allgemeine Metadatenfelder sowie den ursprünglichen Textabschnitt, einige Anleitungen zu ihren potenziellen Verwendungsmöglichkeiten sowie Tools oder Techniken, die häufig zum Generieren der Metadateninhalte verwendet werden.
ID Eine ID identifiziert einen Block eindeutig. Eine eindeutige ID ist während der Verarbeitung nützlich, um zu bestimmen, ob ein Block bereits im Store vorhanden ist. Eine ID kann ein Hash eines Schlüsselfelds sein. Tools: Eine Hashbibliothek.
Titel. Ein Titel ist ein nützlicher Rückgabewert für einen Block. Er enthält eine kurze Zusammenfassung des Inhalts im Block. Die Zusammenfassung kann auch hilfreich sein, um eine indizierte Suche abzufragen, da sie Schlüsselwörter für den Abgleich enthalten kann. Tools: Ein Sprachmodell.
Zusammenfassung. Die Zusammenfassung ähnelt dem Titel darin, dass es sich um einen gemeinsamen Rückgabewert handelt und sie in indizierten Suchvorgängen verwendet werden kann. Zusammenfassungen sind im Allgemeinen länger als Titel. Tools: Ein Sprachmodell.
Umformulierung des Abschnitts. Die Neuphrasierung eines Abschnitts kann als Vektorsuchfeld hilfreich sein, da sie Sprachvariationen erfasst, wie zum Beispiel Synonyme und Paraphrasierungen. Tools: Ein Sprachmodell.
Schlüsselwörter. Schlüsselwortsuchen sind nützlich für Daten, die nicht untextual sind, für die Suche nach einer genauen Übereinstimmung und wenn ein bestimmter Begriff oder Wert wichtig ist. Beispielsweise kann ein Autohersteller über Rezensionen oder Leistungsdaten für jedes seiner Modelle mehrere Jahre verfügen. „Überprüfung für Produkt X im Jahr 2009“ ist semantisch wie „Überprüfung für Produkt X im Jahr 2010“ und „Überprüfung für Produkt Y im Jahr 2009“. In diesem Fall ist es effektiver, Schlüsselwörter für das Produkt und das Jahr abzugleichen. Tools: Ein Sprachmodell, RAKE, KeyBERT, Multi-Rake.
Entitäten. Entitäten sind bestimmte Informationen, z. B. Personen, Organisationen und Standorte. Wie Schlüsselwörter eignen sich Entitäten gut für genaue Übereinstimmungssuchen oder wenn bestimmte Entitäten wichtig sind. Tools: spaCy, Stanford Named Entity Recognizer (NER, Scikit-Learn, Natural Language Toolkit (NLTK).
Bereinigter Textblock. Der Text des bereinigten Blocks. Tools: Ein Sprachmodell.
Fragen, die der Block beantworten kann. Manchmal ist die eingebettete Abfrage keine genaue Übereinstimmung mit dem eingebetteten Abschnitt. Die Abfrage kann beispielsweise relativ auf die Blockgröße klein sein. Es könnte besser sein, die Fragen so zu formulieren, dass der Block sie beantworten kann, und anschließend eine Vektorsuche zwischen der tatsächlichen Abfrage des Benutzers und den vordefinierten Anfragen durchzuführen. Tools: Ein Sprachmodell.
Quelle. Die Quelle des Blocks kann als Rückgabe für Abfragen hilfreich sein. Durch zurückgeben der Quelle kann der Querier die ursprüngliche Quelle zitieren.
Sprache. Die Sprache des Blocks kann als Filter in Abfragen nützlich sein.
Die Kosten für die Erweiterung
Die Verwendung einiger Sprachmodelle zum Ergänzen von Abschnitten kann teuer sein. Sie müssen die Kosten für jede Anreicherung, die Sie in Betracht ziehen, berechnen und mit der geschätzten Anzahl der Blöcke im Laufe der Zeit multiplizieren. Sie sollten diese Informationen zusammen mit dem Testen der angereicherten Felder verwenden, um die beste Geschäftsentscheidung zu treffen.