Eenheid 3 / 11

Chunking en documentvoorbereiding

Winst:

  • Evalueer numeriek de chunkgrootte, overlap en semantische chunking-afwegingen
  • Het kiezen van de juiste chunking-strategie voor verschillende documenttypen (PDF, tabel, code, chatlogboek)
  • Verbeter de ophaalkwaliteit en filtering door metadata aan elk deel toe te voegen

Dit is de meest over het hoofd geziene maar meest beslissende stap in RAG: hoe je het document opsplitst. Dit heet chunken. Zelfs als u hetzelfde document aan hetzelfde model geeft, retourneert het ophalen vanwege slechte chunking het verkeerde stuk en zal het model nooit een goed antwoord opleveren. In dit onderdeel behandelen we fragmentatiestrategieën, hoe we deze kunnen aanpassen aan het documenttype en hoe we betekenisvolle metadata aan elk fragment kunnen toevoegen.

Waarom versnipperen we?

Er zijn drie redenen. Ten eerste zetten inbeddingsmodellen tekst tot een bepaalde lengte om in een betekenisvolle vector; Als een heel hoofdstuk van veertig pagina's in één enkele vector wordt gepropt, wordt de betekenis 'wazig'. Ten tweede willen we het model alleen dat deel geven dat nodig is als context; het hele document overhandigen is duur en leidt af. Ten derde moet de zoekeenheid klein en doelgericht zijn om het ophalen nauwkeurig te kunnen uitvoeren.

Dus chunk is de kleinste ophaaleenheid. Het mag niet te groot of te klein zijn, precies goed.

Chunkgrootte en overlapbalans

Er zijn twee hoofdinstellingen: chunkgrootte (hoeveel tokens/woorden zullen er in een chunk zitten) en overlap (het gedeelte dat wordt gedeeld door aangrenzende chunks).

Zeer kleine stukjes (bijvoorbeeld 100 tokens): gericht maar losgekoppeld van de context. Hij zegt "gedurende 14 dagen", maar wat 14 dagen zijn, staat in de vorige zin. Zeer grote stukken (bijvoorbeeld 2000 tokens): behoudt de context, maar er zijn veel threads doorheen gemengd; de inbedding raakt in de war en irrelevante onderwerpen komen bij elkaar.

Overlap lost het grensprobleem op. Als een zin precies op de grens van twee delen valt, wordt deze zonder overlapping in tweeën gedeeld en gaat de betekenis ervan verloren. Overlapping van 50-100 tokens zorgt ervoor dat de informatie die binnen de limiet valt, in ten minste één deel intact blijft.

Grootte van het stuk

Voordeel

Nadeel

passende inhoud

Klein (100-250 tokens)

Hoge gevoeligheid, gefocust

De context kan breken

FAQ, korte artikelen, definities

Medium (300-600 tokens)

Saldo; de meeste scenario's

Procedures, beleidsteksten

Groot (800-1500 tokens)

Contextintegriteit

wazige inbedding

Verhalende, lange uitleg

Tip: Als je niet weet waar je moet beginnen, begin dan met een stuk van 400-500 tokens en een overlap van 50-80 tokens; meet en pas vervolgens aan met uw eigen gegevens. De "juiste" maat is niet universeel, deze hangt af van de context.

Chunking-strategieën

Vaste grootte: Snijdt de tekst bij elke N tokens bij. Het is eenvoudig en snel, maar kan midden in een zin worden onderbroken.

Gebaseerd op scheidingstekens (recursief/scheidingsteken): Verdeeld op basis van alinea- en vervolgens zinsgrenzen; Het behoudt de integriteit van de betekenis beter. De meeste productiesystemen beginnen hiermee.

Semantische chunking: Er wordt gekeken naar de inbedding van de zinnen en verdeelt deze waar de onderwerpverandering plaatsvindt. Het is de hoogste kwaliteit maar duurste methode; Bij grote volumes stijgen de transactiekosten.

Structuurbewust: gebruikt de documentstructuur, zoals koppen, secties en tabellen. Als u bijvoorbeeld een Markdown-document opsplitst in koppen, zorgt u ervoor dat elk onderdeel een eigen kop heeft.

Aanpassing per documenttype

Niet elk document is hetzelfde. Strategie verschilt per type:

  • PDF/beleidstekst: op bladwijzers gebaseerd, middelgroot. Wis paginaboven-/onderherhalingen (koptekst/voettekst).
  • Tabellen: Haal de zin niet uit zijn context; bewaar elke rij met kopinformatie ("Artikel: X, Prijs: Y, Voorraad: Z"). Het converteren van de onbewerkte tabel naar platte tekst is vaak essentieel.
  • Code: gesplitst op functie-/klassegrenzen; Knip een functie niet uit de weg.
  • Chat/ticketopname: opgesplitst per bericht of gespreksronde; Zorg dat u weet wie wat heeft gezegd.

# op haakjes gebaseerde chunking (conceptuele) chunks = bol( tekst, target_size=450, # token overlap=70, # token haakjes=["\n\n", "\n", ". ", " "] # paragraaf eerst, woord laatste)

Voeg metadata toe aan elke track

Chunking is niet alleen maar ‘verdelen’; is om elk stuk te verrijken. Elke tag die je aan de track koppelt, is goud waard voor toekomstig filteren en bronvermelding.

# Verrijkt deel (conceptueel){ "text": "Jaarlijks betaald verlof is 14 dagen met 1-5 dienstjaren...", "metadata": { "source": "ik_el_kitabi_v7.pdf", "section": "5.2 Jaarlijks verlof", "page": 23, "date": "2025-06", "department": "IK", "privacy": "intern" }}

Een andere krachtige techniek is het toevoegen van een contextuele koptekst: het schrijven van de titel van het hoofdstuk waartoe het behoort aan het begin van elk stuk. Dus zelfs een onsamenhangend stuk als 'Voor 14 dagen' is zowel beter verankerd als betekenisvoller dan 'Jaarlijks verlof - 14 dagen'.

Zwakke chunking/sterke chunking

Zwak (blind hardcut, geen metadata):

Kort de tekst om de 1000 tekens af. Bewaar alleen de tekst.# Resultaat: tabellen worden in het midden gesplitst, "14 dagen" blijft zonder context,# het is niet bekend uit welk document het komt, er kan geen filter worden gemaakt.

Krachtig (structuurbewust + header + metadata):

Verdeel het document in kopjes; voeg een sectietitel toe aan elk onderdeel; voeg bron-, pagina-, datum- en privacy-metagegevens toe; converteer tabelrijen naar platte tekst met hun kopteksten. # Resultaat: gericht, contextueel, filterbaar, bronbaar.

Drie mini-hoesjes

Geval 1 — Schilderramp. Een financieel team verdeelde de prijslijst van 200 pagina's blindelings; tabelrijen werden willekeurig gesplitst. "Wat is de prijs van product X?" Het model las de verkeerde regel en gaf de verkeerde prijs op (9 van de 12 gevallen klopte niet). Toen ik de tabelrijen converteerde naar platte tekst in het formaat "Product: … | Prijs: … | Eenheid: …" nam de fout af tot 0 van de 12.

Geval 2 – Extreem groot stuk. In een wiki bestaat elke pagina uit één stuk (sommigen zeggen 3.000 tokens). De inbedding is wazig omdat er op één pagina "verlof", "overuren" en "salaris" staan; Ook bij de verlofvraag kwam de arbeidstijdenparagraaf aan de orde. Toen de pagina's op titel in middelgroot formaat werden verdeeld, steeg de herinnering@5 van 64% naar 91%.

Geval 3 — Afgekapte zin zonder overlap. Vaste korting van 250 token voor een juridisch team, geen overlap. Een kritische definitie viel precies op de grens van twee delen en werd in tweeën gesplitst; Noch het een, noch het ander bevat het volledige antwoord. Toen er 60 token-overlapping werd toegevoegd, bleef dezelfde definitie in één stuk intact en werd het juiste antwoord geretourneerd.

Veel voorkomende fouten

  • Blinde vaste snede: splitst zinnen en tabellen in het midden; betekenis gaat verloren.
  • De overlap op nul laten: informatie die op de grens valt, wordt verdeeld en gaat verloren.
  • Geen metadata toevoegen: filteren en bronweergave worden onmogelijk.
  • Tabellen onbewerkt laten: het model kan de tabelstructuur niet oplossen; Converteer regels naar platte tekst.
  • Eén strategie opleggen: PDF, code en tabel worden niet op dezelfde manier gesplitst; Pas je aan aan het genre.
Let op: stel Chunking niet één keer in en vergeet het. Meet de ophaalkwaliteit opnieuw wanneer er nieuwe documenttypen binnenkomen (tickets van een nieuw systeem, gescande PDF's). Slechte invoergegevens betekenen een slechte reactie ("garbage in, garbage out").

Samengevat

  • Chunk is de kleinste ophaaleenheid; Niet te groot en niet te klein – het moet in evenwicht zijn volgens de inhoud.
  • De chunkgrootte geeft de focus-contextbalans aan; Overlap beheert grensverlies.
  • Bracket-gebaseerde en structuurbewuste chunking is het startpunt van de meeste generatiesystemen; semantische chunking is van goede kwaliteit, maar duur.
  • Typen als tabel, script en chat vereisen hun eigen strategieën; Converteer tabellen naar platte tekst.
  • Voeg bron/datum/hoofdstuk/privacy-metagegevens en sectietitel toe aan elk nummer; Dit is de basis van filteren en citeren.

Applicatie taak

Verdeel een sectie van het document dat u kiest op drie verschillende manieren: (1) kleine stukjes van 200 tokens, (2) middelgrote stukken van 500 tokens (overlapping van 70 tokens), (3) enkele grote stukken. Stel voor elke strategie dezelfde drie vragen, markeer handmatig welk onderdeel je moet inbrengen en noteer de redenering voor welke strategie het beste werkt voor dat document. Voeg vervolgens minimaal vier metadatavelden en een ‘hoofdstuktitel’ toe aan elke track. Als het document een tabel bevat, converteert u een tabelrij naar platte tekst in de indeling 'veld:waarde'.

controlelijst

  • [ ] Ik zie dat chunk de kleinste eenheid is voor het ophalen en dat de grootte de balans tussen focus en context is.
  • [ ] Ik weet waarom Overlap grensverlies voorkomt.
  • [ ] Ik kan onderscheid maken tussen op haakjes gebaseerde, semantische en structuurbewuste chunking.
  • [ ] Ik kan de strategie voor tabel, code en chat aanpassen.
  • [ ] Ik versterk de vindbaarheid door metadata en hoofdstuktitel aan elk nummer toe te voegen.