Dokumentenkonverter
Der Dokumentenkonverter von LangChain dient hauptsächlich dazu, den Inhalt des Textes aufzuteilen und einen großen Artikel in mehrere kleinere Inhaltsfragmente zu zerlegen. Dies geschieht, da große Modelle in der Regel Grenzen für die Länge der Eingabe haben und den gesamten Inhalt nicht an die KI übermitteln können. Selbst wenn einige große Modelle eine sehr große Eingabelänge zulassen, ist es aus Kostengründen nicht praktikabel, einen so langen Inhalt an die KI zu übergeben. Schließlich steigen mit längerem Inhalt die Kosten für die API-Aufrufe (selbst bei Open-Source-Modellen, die lokal bereitgestellt werden, erfordert langer Inhalt mehr GPU-Speicher und verlangsamt die Inferenz). Der vernünftige Ansatz besteht darin, relevante Inhaltsfragmente als Hintergrundinformationen und Eingabeaufforderungen zu verbinden, wenn das AI-Modell angefragt wird.
LangChain verfügt über viele integrierte Dokumentenkonverter, die den Dokumenteninhalt leicht aufteilen, kombinieren und filtern können.
Textaufteiler
Bei der Bearbeitung großer Textblöcke muss der Text in Abschnitte unterteilt werden. Obwohl es einfach klingt, gibt es hier viele potenzielle Komplexitäten. Idealerweise möchten Sie semantisch zusammenhängende Textabschnitte zusammenhalten. Der Begriff "semantisch zusammenhängend" kann hier vom Texttyp abhängen.
Auf hoher Ebene funktioniert der Textaufteiler wie folgt:
- Teilen Sie den Text in kleine, semantisch sinnvolle Blöcke (normalerweise Sätze) auf.
- Beginnen Sie damit, diese kleinen Blöcke zu größeren zu kombinieren, bis eine bestimmte Größe erreicht ist (gemessen an einer bestimmten Funktion).
- Sobald diese Größe erreicht ist, behandeln Sie den Block als eigenen Textabschnitt und beginnen Sie mit einem neuen Textblock mit einer gewissen Überlappung (um den Kontext zwischen den Blöcken aufrechtzuerhalten).
Das bedeutet, dass Sie den Textaufteiler entlang zweier verschiedener Achsen anpassen können:
- Wie der Text aufgeteilt werden soll
- Wie die Größe der Blöcke gemessen werden soll
Beispiel
Der standardmäßig empfohlene Textaufteiler ist der RecursiveCharacterTextSplitter. Dieser Textaufteiler akzeptiert eine Liste von Zeichen. Er versucht, Blöcke auf der Grundlage des ersten Zeichens zu erstellen. Wenn ein Block jedoch zu groß ist, wird er zum nächsten Zeichen übergehen und so weiter. Standardmäßig versucht er, die folgenden Zeichen aufzuteilen: ["\\\n\\\n", "\\\n", " ", ""]
.
Neben der Kontrolle darüber, welche Zeichen aufgeteilt werden können, können Sie auch mehrere andere Dinge steuern:
-
length_function
: Wie die Länge eines Blocks berechnet werden soll. Standardmäßig wird nur die Anzahl der Zeichen gezählt, aber häufig werden hier Tokenzähler übergeben. -
chunk_size
: Die maximale Größe Ihrer Blöcke (gemessen an der Länge der Funktion). -
chunk_overlap
: Die maximale Überlappung zwischen den Blöcken. Eine gewisse Überlappung kann helfen, die Kontinuität zwischen den Blöcken aufrechtzuerhalten (z. B. durch ein gleitendes Fenster). -
add_start_index
: Ob die Startposition jedes Blocks im Originaldokument in den Metadaten enthalten sein soll.
with open('../../state_of_the_union.txt') as f:
state_of_the_union = f.read()
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 100,
chunk_overlap = 20,
length_function = len,
add_start_index = True,
)
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print(texts[1])
page_content='..Ignorierten Text..' metadaten={'start_index': 0}
page_content='..Ignorierten Text..' metadaten={'start_index': 82}
Weitere Transformationen
Filtern redundanter Dokumente, Übersetzen von Dokumenten, Extrahieren von Metadaten und mehr
Neben der Aufteilung von Dokumenten können wir auch andere Transformationen am Dokumenteninhalt vornehmen. Mit EmbeddingsRedundantFilter
können wir ähnliche Dokumente identifizieren und redundanten Inhalt filtern. Durch Integrationen wie doctran können wir Operationen wie das Übersetzen von Dokumenten von einer Sprache in eine andere, das Extrahieren der erforderlichen Eigenschaften und deren Hinzufügung zu Metadaten sowie das Umwandeln von Gesprächen in eine Reihe von Q/A-formatierten Dokumenten durchführen.