Naar hoofdinhoud gaan

Context Rollover Batching

Context rollover is een consistentiefunctie op documentniveau die een venster van eerdere vertalingen meeneemt naar volgende batches, waardoor het LLM "kortetermijngeheugen" heeft over batchgrenzen heen.

Waarom Het Bestaat

Bij het vertalen van grote bestanden (100+ sleutels of lange Markdown-documenten) verdeelt champollion het werk in batches. Zonder rollover wordt elke batch onafhankelijk vertaald — het LLM heeft geen geheugen van wat het in de vorige batch heeft vertaald. Dit veroorzaakt:

  • Terminologiedrift: Dezelfde Engelse term wordt in verschillende batches anders vertaald (bijv. "dashboard" → "tableau de bord" in batch 1, "panneau" in batch 3)
  • Coreferentiefout: Voornaamwoorden en verwijzingen die batchgrenzen overspannen verliezen hun antecedent
  • Registerinconsistentie: De toon kan tussen batches verschuiven (formeel → informeel → formeel)

Dit is een goed gedocumenteerd probleem in de MT-literatuur. De sliding window-aanpak wordt gevalideerd door onderzoek naar machinale vertaling op documentniveau (ACL, WMT-workshops).

Hoe Het Werkt

Het Sliding Window

Wanneer contextRollover is ingeschakeld, onderhoudt de vertaalpijplijn een venster van recent vertaalde sleutel-waardeparen. Na het voltooien van elke batch wordt een deel van de uitvoer (standaard: 20% van batchSize) meegenomen naar de prompt van de volgende batch als "referentievertalingen."

Batch 1: Translate keys 1-80 → LLM sees: system prompt + keys 1-80
Batch 2: Translate keys 81-160 → LLM sees: system prompt + [16 reference translations from batch 1] + keys 81-160
Batch 3: Translate keys 161-240 → LLM sees: system prompt + [16 reference translations from batch 2] + keys 161-240

De referentievertalingen worden in het gebruikersbericht ingevoegd met een duidelijk label:

--- Previous translations for context (do NOT re-translate these) ---
"nav.dashboard": "Tableau de bord"
"nav.settings": "Paramètres"
"header.welcome": "Bienvenue sur la plateforme"
---

{
"content.main_heading": "Getting Started with Your Dashboard",
...
}

Selectiestrategie

Twee modi voor het kiezen welke vertalingen worden meegenomen:

StrategieGedragHet beste voor
tail (standaard)Laatste N vertalingen uit de vorige batchSequentiële documenten, Markdown-inhoud
diverseKiest vermeldingen die verschillende sleuteltypen omvatten (knoppen, koppen, beschrijvingen)Grote JSON-bestanden met gemengde UI-elementtypen

Tokenbudget

Het rollover-venster verbruikt invoertokens. Champollion berekent de geschatte tokenkosten en waarschuwt als het venster meer dan 15% van het geschatte contextvenster van het model overschrijdt. De waarschuwing bevat een aanbevolen verlaging:

[WARN] Rollover window is ~2400 tokens (18% of model context).
Consider reducing rolloverSize to 0.15 or lowering batchSize.

Globale Context Pre-Pass

Een optionele eerste LLM-aanroep die wordt uitgevoerd vóór het begin van de vertaling. Het LLM analyseert de volledige broninhoud en produceert:

  1. Documentsamenvatting — beschrijving van 2-3 zinnen van wat er wordt vertaald
  2. Benoemde entiteiten — productnamen, technische termen en eigennamen met aanbevolen behandeling
  3. Terminologieconsistentielijst — sleuteltermen die het LLM heeft geïdentificeerd als vereisend consistente vertaling

Deze globale context wordt ingevoegd in het systeembericht van elke batch, waardoor elke batch bewust is van het volledige document, ook al ziet het slechts een deel ervan.

Pre-Pass Model

De globale contextextractie maakt gebruik van een afzonderlijke, goedkope LLM-aanroep (standaard: google/gemini-3.5-flash bij temperatuur 0.1), ongeacht het geconfigureerde vertaalmodel van de gebruiker. Dit is een metadataextractietaak, geen vertaaltaak — snelheid en kosten zijn belangrijker dan creatieve uitvoer.

Inhoud Opsplitsen

Voor lange Markdown-documenten (inhoudsvertaling) kan de tekst het effectieve contextvenster van het LLM overschrijden, of het model kan de uitvoer afkappen. Inhoud opsplitsen verdeelt het document in overlappende segmenten die elk onafhankelijk worden vertaald en vervolgens opnieuw worden samengevoegd.

Splitsstrategie

Het opsplitsen volgt een prioriteitscascade — het probeert eerst het meest semantisch betekenisvolle splitspunt:

  1. Kopgrenzen##- en ###-markeringen creëren natuurlijke vertaaleenheden. Elke sectie is voldoende op zichzelf staand voor onafhankelijke vertaling, en koppen geven het LLM structurele context over wat het vertaalt.
  2. Alineagrenzen — als een enkele kopsectie de chunkgrootte overschrijdt, splitsen bij dubbele regeleinden (\n\n). Alinea's zijn de op één na beste grens omdat ze volledige gedachten vertegenwoordigen.
  3. Zinsgrenzen — laatste redmiddel voor extreem lange alinea's (bijv. grote tabellen, dichte proza). Splitst bij punt-spatiegrens met respect voor afkortingen.

Beveiligde blokken (codefences, shortcodes — zie Hoe Sync Werkt) worden nooit over chunks gesplitst. Als een beveiligd blok zou worden doorgesneden, verschuift het splitspunt ervoor of erna.

Automatische Opsplitsingstriggers

Opsplitsen wordt op twee manieren geactiveerd:

TriggerGedrag
contentChunkSize ingesteld in configuratieSplitst proactief alle documenten die dat aantal tokens overschrijden
Model retourneert finish_reason: "length"Splitst automatisch als terugvaloptie, ook zonder configuratie

De terugvaltrigger betekent dat opsplitsen werkt als veiligheidsnet, zelfs als u het niet configureert — als het model afkapt, probeert champollion het automatisch opnieuw met chunks.

Configuratie

  • contentChunkSize: Maximaal aantal tokens per chunk (standaard: null = volledige tekst verzenden; stel in op bijv. 4000 voor lange documenten)
  • contentOverlap: Overlapping in tokens tussen chunks (standaard: 200). De overlapping zorgt voor vloeiende overgangen bij chunkgrenzen.

Wanneer opsplitsen actief is, wordt context rollover automatisch toegepast tussen chunks — de vertaalde uitvoer van de laatste alinea van de vorige chunk wordt toegevoegd aan de prompt van de volgende chunk.

champollion.config.json
{
"contentChunkSize": 4000,
"contentOverlap": 200
}

Voor het volledige systeem voor veerkracht bij inhoudsvertaling (diagnostisch opnieuw proberen, modelterugval, foutregistratie), zie Inhoudsveerkracht.

Configuratie

Snel Starten

champollion.config.json
{
"contextRollover": true,
"globalContext": true,
"contentChunkSize": 4000,
"contentOverlap": 200
}

Volledige Opties

champollion.config.json (advanced)
{
"contextRollover": {
"size": 0.2,
"strategy": "tail",
"maxTokens": null
},
"globalContext": {
"model": "google/gemini-3.5-flash",
"maxEntities": 20,
"temperature": 0.1
},
"contentChunkSize": 4000,
"contentOverlap": 200,
"contentFallbackChain": [
"google/gemini-2.5-flash",
"anthropic/claude-sonnet-4"
]
}
VeldTypeStandaardBeschrijving
contextRolloverboolean | objectfalseSliding window rollover inschakelen
contextRollover.sizenumber0.2Fractie van batchSize om mee te nemen (0.0–1.0)
contextRollover.strategystring"tail"Selectiestrategie: "tail" of "diverse"
contextRollover.maxTokensnumber | nullnullHarde limiet op rollover-tokenbudget
globalContextboolean | objectfalseGlobale context pre-pass inschakelen
globalContext.modelstring"google/gemini-3.5-flash"Model voor de pre-pass-aanroep
globalContext.maxEntitiesnumber20Maximaal aantal te extraheren benoemde entiteiten
globalContext.temperaturenumber0.1Temperatuur voor de pre-pass-aanroep
contentChunkSizenumber | nullnullMaximaal aantal tokens per inhouds-chunk (null = geen opsplitsing)
contentOverlapnumber200Overlappingstokens tussen inhouds-chunks
contentFallbackChainstring[][]Terugvalmodellen voor inhoudsvertaling wanneer het geconfigureerde model structureel faalt

Wanneer Te Gebruiken

ScenarioAanbeveling
Kleine JSON-bestanden (< 50 sleutels)Niet nodig — enkele batch, geen grensoverschrijdende problemen
Grote JSON-bestanden (100+ sleutels)Schakel contextRollover in voor terminologieconsistentie
Lange Markdown-documentenSchakel contextRollover + contentChunkSize + globalContext in
Technische documentatieSchakel globalContext in voor entiteitsextractie
UI-teksten met gemengd registerGebruik contextRollover met strategy: "diverse"

Implementatiestatus

FunctieStatus
Sliding window rollover (sleutel-waarde)🔲 Gepland
Sliding window rollover (inhoud)🔲 Gepland
Globale context pre-pass🔲 Gepland
Inhoud opsplitsen🔲 Gepland
Automatisch opsplitsen bij afkapping🔲 Gepland
diverse selectiestrategie🔲 Gepland

Literatuur

Deze functie is gebaseerd op gepubliceerd onderzoek naar machinale vertaling op documentniveau:

  • Sliding window-aanpak: Gevalideerd voor het verbeteren van BLEU-, chrF- en COMET-scores bij het gebruik van LLM's voor vertaling (ACL 2023–2025 workshops over machinale vertaling op documentniveau)
  • Multi-knowledge fusion: Het injecteren van documentsamenvatingen en entiteitslijsten als globale context verbetert de terminologieconsistentie in lange documenten
  • Context-Aware Prompting (CAP): Het selecteren van relevante context via aandachtsscores of semantische gelijkenis voor in-context leren

Zie Ook