← Homelab

Ein Vektor für ein ganzes Buch: Chunking wird unausweichlich

Seit dem Ingestion-Service bekommt jede Notiz genau eine Zahlenreihe, egal wie lang sie ist. Bei kurzen Notizen ist das unproblematisch. Bei einem ganzen Buch nicht.

4 Min. Lesezeit
Ein Vektor für ein ganzes Buch: Chunking wird unausweichlich
Inhalt · 7 Abschnitte
  1. Was Chunking ist und warum es nötig wird
  2. Der Verlust in Zahlen
  3. Die Lösung: an der Struktur trennen
  4. Die zweite Überraschung: der Ortswechsel
  5. Das Ergebnis
  6. Fazit
  7. Ausblick

Seit dem Ingestion-Service bekommt jede Notiz genau eine Zahlenreihe, egal wie lang sie ist. Bei kurzen Notizen ist das unproblematisch. Bei einem ganzen Buch nicht. Beim Blick auf eine Grafik mit gängigen Verfahren zum Aufteilen langer Texte fiel auf, dass das System bisher ohne solches Chunking auskommt. Dieser Teil misst, wie groß der Verlust tatsächlich war, beschreibt die Lösung und einen Ortswechsel, den man aus früheren Teilen kennt.

Was Chunking ist und warum es nötig wird

Ein Embedding-Modell hat ein begrenztes Aufnahmefenster: Es kann nur eine bestimmte Textmenge auf einmal verarbeiten. Was darüber hinausgeht, wird abgeschnitten oder gar nicht erst gelesen. Und selbst bei einem Text, der noch passt, gilt: Eine einzige Zahlenreihe für ein ganzes Buch beschreibt bestenfalls das Gesamtthema, nicht die einzelne Stelle, nach der jemand später sucht. Chunking bedeutet deshalb, einen langen Text in überschaubare Abschnitte, die Chunks, zu zerlegen und jeden für sich in eine Zahlenreihe zu übersetzen. Man kann es mit einem Buch vergleichen, das nicht als ein einziger Zettel im Karteikasten steckt, sondern mit einer Karte pro Kapitel.

Der Verlust in Zahlen

Für Notizen zu Büchern gab es schon bei der Integration eine harte Grenze: Nach 4.000 Zeichen war Schluss, der Rest floss nicht ein. Wie viel damit verloren geht, hatte damals niemand geprüft. Die Nachmessung ergab: 37 von 80 Buchnotizen, also 46 Prozent, überschritten die Grenze, teils massiv. Am Extremfall, einer Notiz mit fast 1,9 Millionen Zeichen, zeigte sich das Problem am deutlichsten. Der Schnitt bei Zeichen 4.000 lag noch im Vorwort. Das erste Kapitel beginnt erst bei Zeichen 544.476, die markierten Kindle-Highlights sogar erst bei Zeichen 1.644.904. Praktisch nichts von dem, was in diesem Buch wichtig war, steckte im Embedding.

Die Lösung: an der Struktur trennen

Die Notizen haben bereits eine Struktur, nämlich Überschriften. Das Chunking nutzt sie: Zuerst wird an vorhandenen Überschriften getrennt. Ist ein Abschnitt danach immer noch zu lang, greift ein zweites Verfahren, das den Text in Stücke von höchstens 4.000 Zeichen zerlegt, mit einer kleinen Überlappung, damit an den Schnittstellen nichts verloren geht. Jeder Chunk trägt außerdem den Titel der Notiz als Kontext, damit er auch für sich allein verständlich bleibt. Bewusst verzichtet habe ich auf Verfahren, die die Trennstellen erst per Modell suchen lassen. Sie würden pro Abschnitt zusätzliche Berechnungen kosten, obwohl die Struktur schon vorhanden ist.

Das hat zwei Folgen. Die Datenbank speichert nun eine Zeile pro Chunk statt pro Notiz. Und die Suche holt zuerst mehr Kandidaten und fasst sie danach pro Notiz auf den besten Treffer zusammen. So sieht der Redakteur weiterhin eine Zeile pro Notiz und nicht zehn Abschnitte desselben Buchs.

Die zweite Überraschung: der Ortswechsel

Der erste Testlauf auf der produktiven Maschine zeigte rund vier Sekunden pro Chunk, deutlich mehr als erwartet. Bei rund 15.800 erwarteten Chunks wären das zweistellige Stunden gewesen. Ich habe den Re-Ingest deshalb wieder auf dem Gaming-PC gefahren, ganz ohne Grafikkarte. Schon im Modellvergleich hatte sich diese Variante für das gewählte Modell als die schnellere erwiesen. Auf dem Gaming-PC dauerte ein Chunk nur rund 0,41 Sekunden, etwa zehnmal weniger. Der volle Lauf war in 1 Stunde und 40 Minuten fertig, das Ergebnis kam als Datenbank-Dump zurück auf die produktive Maschine. Der portable Stack macht auch hier den Unterschied: Der Gaming-PC bleibt kein Teil des Systems, springt aber bei großen Nachläufen ein.

Das Ergebnis

Aus 1.854 Notizen wurden 15.812 Chunks, davon allein 6.330 aus den 80 Buchnotizen. Die Suchqualität blieb stabil: Die bekannte Kontrollanfrage lieferte weiter denselben Spitzenreiter, mit 0,848 statt zuvor 0,849. Es ging also nicht um bessere Treffer, sondern um Vollständigkeit. Der Auslöser-Fall ist behoben: Die Notiz mit fast 1,9 Millionen Zeichen liegt jetzt als 694 Chunks vor. Eine gezielte Frage zu einem Konzept aus Kapitel 11 findet den passenden Abschnitt, während dieser Inhalt vorher hinter der Grenze komplett unsichtbar war.

Fazit

Ein Embedding pro Notiz funktioniert, solange Notizen kurz sind. Bei langen Texten wird aus einer Vereinfachung ein stiller Datenverlust, den erst die Nachmessung sichtbar machte. Genau das war die offene Frage aus dem Konzept: ob jede Notiz als Ganzes oder in Abschnitten gespeichert wird. Die Antwort lautet: in Abschnitten.

Ausblick

Der Stack zieht im nächsten Teil ein zweites Mal um, diesmal auf eigene, dafür angeschaffte Hardware. Danach geht es darum, den Zugang zum Werkzeug abzusichern, damit nicht jeder Schlüssel alles darf.

Porträt Moritz Conjé

Geschrieben von

Moritz Conjé

Senior Projektmanager & Konzepter für Verwaltungsdigitalisierung

Projektmanager bei Dataport AöR, zertifiziert nach PRINCE2 Agile und IPMA Level D. Ich führe Teams zwischen Fachbereich, Management und IT und ordne Technik für Entscheidungen ein.

Meine Rolle in dieser Serie: Konzeption, Planung, Steuerung und Abnahme – die technische Umsetzung erfolgt KI-gestützt.

Beitrag teilen
LinkedIn Xing

Weiterlesen

Mehr aus der Serie KI-Diskurs

Alle 21 Teile

Remote Claude nutzt LiteLLM

Remote Claude nutzt LiteLLM

Im Beitrag über das Gateway habe ich einen zentralen Zugang gebaut, über den KI-Werkzeuge die Suche und das Regelwerk meines Second Brains erreichen. Zwei Wochen später fiel mir auf, dass ihn noch niemand benutzte. Den Anstoß gab etwas ganz anderes: ...
Eine eigene Statuszeile fürs Terminal: mehr Überblick bei der Arbeit mit Claude Code

Eine eigene Statuszeile fürs Terminal: mehr Überblick bei der Arbeit mit Claude Code

Wer täglich mit einer KI im Terminal arbeitet, kennt das Problem: Wie ausgelastet die laufende Sitzung gerade ist, wie nah man an ein Nutzungslimit kommt oder was sie bereits gekostet hat, bleibt normalerweise unsichtbar. Man merkt es meist erst, wen ...
Fähigkeiten ergänzen: passende Skills für die Rollen und Aufgaben finden

Fähigkeiten ergänzen: passende Skills für die Rollen und Aufgaben finden

Ein KI-Assistent kann schon ohne Erweiterungen erstaunlich viel. Für ein konkretes Projekt reicht „erstaunlich viel" aber selten als Arbeitsweise. Beim Aufbau des Second Brain kamen zuletzt drei sehr unterschiedliche, eigenständige Projekte zusammen: ...