Text-Chunker für Embeddings und RAG — Token-Splitter

Teilen Sie langen Text für Embeddings und RAG in token-genaue Abschnitte mit Überlappung. Schneidet an Satz- und Absatzgrenzen, nie mitten im Wort, und zeigt jede Grenze.

Text für Embeddings zerteilen: wo der Schnitt liegt, entscheidet, was Sie zurückbekommen

Retrieval-Systeme scheitern leise. Sie betten einen Korpus ein, verdrahten eine Suche, stellen eine Frage und bekommen etwas zurück, das thematisch benachbart ist und sie nicht beantwortet. Der Reflex ist, das Embedding-Modell oder das Ähnlichkeitsmaß zu beschuldigen. Weit häufiger geschah das Problem vor beidem: der Text wurde in Stücke geschnitten, die nicht je einen vollständigen Gedanken enthalten, und keine noch so kluge Rangfolge holt Bedeutung zurück, die beim Schneiden zerstört wurde.

Dieses Werkzeug teilt Text in token-begrenzte Abschnitte mit Überlappung und schneidet an der bedeutungsvollsten verfügbaren Grenze statt an einem festen Versatz. Es zeigt Ihnen jede Grenze, denn ein schlechter Schnitt ist nur sichtbar, wenn man liest, wo ein Abschnitt endet und der nächste beginnt. Alles läuft in diesem Browser-Tab.

Rekursives Schneiden an Grenzen

Der naive Weg ist, alle N Token zu schneiden. Er ist schnell und er ist falsch, denn eine Token-Grenze hat mit einer semantischen nichts zu tun — Sie schneiden mitten im Satz, manchmal mitten im Wort, und der entstehende Vektor beschreibt ein Bruchstück, das niemand geschrieben hat.

Das Verfahren hier arbeitet eine Leiter von Trennern ab und nimmt den ersten, der kleine genug Stücke ergibt. Der Reihe nach: vor einer Markdown-Überschrift, dann Leerzeilen, dann jeder Zeilenumbruch, dann Satzgrenzen, dann Teilsatzgrenzen an Kommas und Semikolons, dann Leerraum zwischen Wörtern. Erst wenn nichts davon vorhanden ist — ein minifiziertes Bundle, ein einzelnes riesiges Wort — fällt es auf einen Schnitt nach Token-Index zurück.

Praktisch heißt das: Struktur bleibt erhalten, sobald der Text überhaupt welche hat. Ein Dokument mit Überschriften teilt sich an den Abschnitten. Prosa teilt sich an Absätzen, oder an Sätzen, wenn ein Absatz zu lang ist. Eine ununterbrochene Textwand teilt sich an Wörtern. Jeder Abschnitt endet dort, wo ein Mensch ihn beendet hätte, es sei denn, der Text bot dazu keine Gelegenheit.

Wozu Überlappung tatsächlich da ist

Überlappung wiederholt das Ende eines Abschnitts am Anfang des nächsten. Es gibt sie, weil eine Tatsache und das, worauf sie sich bezieht, oft auf verschiedenen Seiten einer Grenze liegen. „Die Migration lief über Nacht. Sie scheiterte an der dritten Tabelle.“ Schneiden Sie zwischen diesen Sätzen, enthält der zweite Abschnitt ein Scheitern ohne Subjekt, der erste eine Migration ohne Ausgang. Keiner von beiden wird brauchbar gefunden. Mit Überlappung nimmt der zweite Abschnitt seinen Bezug mit.

Der Preis ist Verdopplung: überlappende Token werden mehr als einmal gespeichert, eingebettet und durchsucht. Zehn bis fünfzehn Prozent der Abschnittsgröße ist der übliche Kompromiss, und dort liegen die Voreinstellungen. Die Statistikleiste meldet genau, wie viele Token die Überlappung hinzugefügt hat: der Zielkonflikt wird eine Zahl statt eines Gefühls.

Eine Absicherung ist wissenswert: eine Überlappung gleich groß wie der Abschnitt oder größer hieße, dass jeder Abschnitt mit allem beginnt, womit der vorige endete, und das Verfahren käme nie voran. Dieser Wert wird eingefangen, statt hängen zu bleiben.

Die Größe wählen

Die Abschnittsgröße ist ein Zielkonflikt zwischen Genauigkeit und Kontext, und es gibt keine allgemeingültig richtige Antwort:

  • Kleine Abschnitte, um 256 Token, ergeben scharfe Treffer. Ein Vektor über zwei oder drei Sätze wird von dem beherrscht, was diese Sätze sagen. Gut für Frage-Antwort über dichtes Nachschlagematerial. Das Risiko sind Abschnitte, die gut passen, denen aber der umgebende Kontext fehlt, um wirklich zu antworten.
  • Mittlere Abschnitte, um 512, sind die übliche Voreinstellung und der Bereich, in dem sich die meisten Embedding-Modelle am wohlsten fühlen. Ungefähr ein gehaltvoller Absatz.
  • Große Abschnitte, ab 1024, tragen mehr Kontext je Treffer, verdünnen aber den Vektor. Ein Abschnitt, der vier Themen abdeckt, liegt im Mittel aller vier und passt zu keinem davon stark.
  • Sehr große Abschnitte, mehrere tausend Token, hören auf, eine Sucheinheit zu sein, und werden eine Blättereinheit — um ein langes Dokument in aufeinanderfolgenden Durchgängen durch ein Modell zu schicken, statt es zu durchsuchen.

Vier Teilungsstrategien

Intelligentes Teilen ist die oben beschriebene rekursive Leiter und für die meiste Prosa das Richtige. Absätze packt ganze Absätze und teilt nie einen davon, was zu Texten passt, in denen der Absatz bereits die Gedankeneinheit ist und Ihnen ungleiche Größen lieber sind als ein zerbrochener Absatz. Markdown-Überschriften ergibt einen Abschnitt je Kapitel, die natürliche Wahl für Dokumentation, in der eine Überschrift genau benennt, was darunter steht. Zeilen packt ganze Zeilen, für Logs, CSV-Auszüge und Listen, in denen jede Zeile für sich steht.

In jedem Modus wird jede Einheit, die die Grenze weiterhin überschreitet, vor dem Packen vom rekursiven Teiler verkleinert: eine Strategiewahl erzeugt nie einen übergroßen Abschnitt.

Das Zählen und was die Zahl bedeutet

Token werden mit demselben Tokenizer gezählt, mit dem diese Seite Repositories bemisst, aus der Familie, die die Modelle von OpenAI verwenden. Die Zahlen für Claude und Gemini weichen etwas ab — verschiedene Vokabulare segmentieren denselben Text verschieden — folgen einander aber eng genug, um einen Abschnitt gegen ein Limit zu bemessen. Ist Ihr Budget knapp, lassen Sie Luft, statt die Zahl für exakt zu halten.

Beachten Sie außerdem: das angegebene Limit eines Embedding-Modells ist ein harter Abschneidepunkt, kein Zielwert. Überschreiten Sie es, wird das Ende stillschweigend verworfen — ein Fehlerbild, das keine Meldung erzeugt und die Suchgüte auf eine ehrlich gesagt schwer zu diagnostizierende Weise verschlechtert.

Eine Ausgabe, die man weiterverarbeiten kann

Drei Downloads. Klartext mit optionalen --- Chunk n/N ----Kopfzeilen, zum Lesen und Prüfen. JSON als Array von Objekten mit Index, Token-Zahl und Text, für ein Skript, das alles einliest. JSONL mit einem Objekt je Zeile, was strömende Ingestion und die meisten Batch-Embedding-Endpunkte erwarten und was Sie brauchen, wenn der Korpus zu groß ist, um ihn als ein einziges geparstes Array im Speicher zu halten.

Das passt natürlich zum Rest der Seite: wandeln Sie zuerst ein Repository, ein PDF, eine Webseite oder ein Transkript in Text um und zerteilen Sie das Ergebnis dann hier. In keinem der beiden Schritte wird etwas hochgeladen.