Zum Hauptinhalt springen

Übersicht

Text Splitters sind ein entscheidender Bestandteil beim Aufbau von Anwendungen mit großen Sprachmodellen (LLM). Ihre Hauptaufgabe besteht darin, lange Texte in mehrere kürzere Abschnitte zu unterteilen, was nachfolgende Aufgaben wie Text-Einbettungen, retrieval-augmented generation (RAG) und Frage-Antwort-Systeme erleichtert.

Bei LLMs wird die Textaufteilung aus mehreren Hauptgründen vorgenommen:

  • Optimierung von Effizienz und Genauigkeit: Durch das Aufteilen großer Textblöcke in kleinere Abschnitte kann die Relevanz und Genauigkeit der vom LLM erzeugten Einbettungen optimiert werden. Chunking hilft dabei sicherzustellen, dass der eingebettete Inhalt minimale Störungen enthält und gleichzeitig semantische Relevanz beibehält. Beispielsweise enthält bei der semantischen Suche, wenn ein Dokumentenkorpus indexiert wird, jedes Dokument wertvolle Informationen zu bestimmten Themen. Die Anwendung einer effektiven Chunking-Strategie stellt sicher, dass die Suchergebnisse den Kern der Nutzeranfrage genau erfassen.
  • Begrenzung der Kontextfenstergröße: Bei der Verwendung von Modellen wie GPT-4 gibt es eine Grenze für die Anzahl der verarbeitbaren Tokens. Zum Beispiel hat GPT-4 eine Kontextfenstergrößenbegrenzung von 32K Tokens. Obwohl dieses Limit im Allgemeinen kein Problem darstellt, ist es von Anfang an wichtig, die Chunkgröße zu berücksichtigen. Wenn die Text-Chunks zu groß sind, könnten Informationen verloren gehen oder nicht alle Inhalte im Kontext eingebettet werden, was die Leistung und Ausgabe des Modells beeinträchtigen kann.
  • Umgang mit langen Dokumenten: Obwohl Einbettungsvektoren für lange Dokumente den Gesamtkontext erfassen können, übersehen sie möglicherweise wichtige Details zu spezifischen Themen, was zu ungenauen oder unvollständigen Ergebnissen führen kann. Chunking ermöglicht eine bessere Kontrolle über die Extraktion und Einbettung von Informationen und reduziert so das Risiko des Informationsverlusts.

Casibase bietet zur Zeit mehrere Aufteilungsmethoden an, die es dem Anwender ermöglichen, unterschiedliche Verarbeitungsstrategien für verschiedene Textszenarien anzuwenden.

Standard Text Splitter

Der Standard Text Splitter ist darauf ausgelegt, Texte effizient basierend auf der Tokenanzahl und der Textstruktur zu segmentieren. Seine Aufteilungsstrategie umfasst:

  • Zeilenlesung und Absatzerkennung: Der Text wird Zeile für Zeile gelesen, mit aufeinanderfolgenden Leerzeilen zur genauen Bestimmung von Absatzbrüchen verwendet. Darüber hinaus werden natürliche Durchbrüche durch Markierungen sensibel identifiziert, wodurch eine logische und präzise Textsegmentierung gewährleistet wird.
  • Spezielle Behandlung für Code-Blöcke: Codeblöcke mit ``` Symbolen werden separat behandelt. Die Anzahl der Zeilen innerhalb eines Codeblocks bestimmt, ob er als Segment allein stehen kann. Dieser Mechanismus bewahrt die Integrität von Code-Blöcken, während effektiv verhindert wird, dass einzelne Textsegmente die Tokengrenze überschreiten.
  • Beibehaltung der Sentenz-Integrität: Während des gesamten Teilungsprozesses wird die strikte Einhaltung der Satzintegrität gewahrt, wodurch sichergestellt wird, dass die Sätze nie geteilt werden. Diese Funktion garantiert, dass jedes Textsegment eine vollständige Informationseinheit enthält. Unabhängig von der Komplexität des Textes erfolgt die Segmentierung an Satzgrenzen genau, wodurch Unklarheiten und Informationsverluste durch gebrochene Strafen vermieden werden.

Frage-Antwort-Splitter

Der Frage-Antwort-Splitter konzentriert sich auf die pr\u00e4zise Segmentierung von Frage-Antwort-formatierten Texten und bietet die folgenden wesentlichen Vorteile:

  • Pr\u00e4zises Aufteilen von Frage-Antwort-Einheiten: Es wird ein zeilenweises Scanverfahren verwendet, um die Struktur von Frage-Antwort-Texten intelligent zu erkennen. Durch die Bestimmung, ob jede Zeile mit "Q:" oder "A:" beginnt, werden die Grenzen zwischen Fragen und Antworten pr\u00e4zise festgestellt, sodass jedes Frage-Antwort-Paar vollständig segmentiert wird. Dies garantiert die Unabhängigkeit und Vollständigkeit jeder Frage- und Frageeinheit und bietet saubere Daten für die nachfolgende Verarbeitung und Auswertung.
  • Klare und logische Implementierung: Der Code ist einfach und intuitiv, so dass er leicht zu verstehen und zu warten ist. Durch die Verwaltung des Zustands des aktuellen Frage-Antwort-Paares und einer Kennzeichnung, die angibt, ob eine Antwort gesammelt wird, wird der Textsegmentierungsprozess klar gesteuert, wodurch die korrekte Paarung jeder Frage-Antwort-Einheit sichergestellt wird.