Il chunking converte contenuti di pagina normalizzati grezzi in unità di recupero. Scelte sbagliate gonfiano i costi, con troppi frammenti, degradano il recall, con blocchi troppo grandi, o diluiscono la precisione, con fratture sui confini. Non esiste un metodo migliore universale; la strategia si allinea alla struttura del corpus, alla sua volatilità e ai pattern di query. Questa guida mappa lo spazio di progettazione, i trade-off, il workflow di valutazione e le leve di ottimizzazione per pipeline RAG di produzione.
Perché il chunking conta
Obiettivi:
- Massimizzare la probabilità che i fatti rilevanti compaiano nel recupero top-k.
- Preservare coesione semantica affinché le risposte generate siano fondate.
- Ottimizzare l’uso dei token, evitando di incorporare ripetutamente boilerplate.
- Abilitare aggiornamenti incrementali deterministici con ID chunk stabili.
Un chunking disallineato emerge come alta ridondanza, basso Recall@k, fatti allucinati ai confini e spesa embedding gonfiata.
Chunking a finestra fissa
Finestre semplici da N token, per esempio 500 token. Pro: deterministico, facile da implementare, comportamento di aggiornamento stabile. Contro: i confini tagliano i concetti; serve sovrapposizione ridondante per ridurre il troncamento, con crescita dei costi. Usalo con parsimonia: è una buona baseline per contenuti eterogenei o poco strutturati dove i segnali semantici sono inaffidabili.
Finestre scorrevoli sovrapposte
Una dimensione finestra W con sovrapposizione O, per esempio 500 / 50 token, riduce il troncamento dei fatti ai confini. Oltre circa il 15%, la sovrapposizione produce guadagni di recall decrescenti mentre compone la dimensione dell’indice. Traccia duplication_ratio = distinct_token_count / total_token_count per ridurre O.
Rilevamento dei confini semantici
Segmenta lungo segnali strutturali: titoli H2/H3, gruppi di liste, blocchi codice, confini di tabella. Applica limiti min/max di token, unendo fratelli troppo piccoli e dividendo sezioni troppo grandi. Benefici: maggiore coesione, meno sovrapposizioni. Rischi: markup malformato, gerarchia dei titoli incoerente. Mitiga con riparazione della gerarchia e fallback a divisione per paragrafi quando i titoli mancano.
Chunking gerarchico
Indice a due livelli: embedding di sezioni grossolane, per esempio un’intera sezione tutorial, più subchunk fini. Flusso di recupero: ANN grossolano → filtro sulle prime N sezioni → recupero fine dentro di esse. Vantaggi: riduce lo spazio di ricerca globale per corpus grandi, migliora la latenza. Complessità: più parti in movimento, serve logica di scoring a cascata.
Chunking adattivo / dinamico
Regola le dimensioni dei chunk in base a densità semantica locale e segnali strutturali. Logica di esempio: parti dalla sezione del titolo; se >800 token, dividi per cluster di paragrafi valutati per somiglianza semantica; se <120 token, unisci al fratello successivo a meno che la divergenza di tema superi la soglia. Richiede un pre-pass di embedding o somiglianza; paghi il costo una volta in ingestione per una migliore efficienza di recupero nel lungo periodo.
Considerazioni sugli embedding
Mantieni metadati: token_count, model_version, content_hash. Evita il troncamento: pre-calcola i token e dividi prima della chiamata al modello. I modelli densi degradano con boilerplate eccessivo; rimuovi artefatti di navigazione prima del chunking. Monitora vector_density, cioè termini unici / token, per far emergere frammenti a basso segnale, candidati alla riunione.
Metodi di valutazione
Benchmark per strategia:
| Metrica | Scopo |
|---|---|
| Recall@k | Conservazione dei fatti |
| Precision@k | Rumore nel contesto |
| Chunk Count | Indicatore di costo |
| Duplication Ratio | Taratura della sovrapposizione |
| Avg Tokens per Chunk | Uso della finestra |
| Latency (Retrieval) | Efficienza dell’indice |
Esegui su un set di query gold; adotta la strategia solo se i guadagni di recall superano costi e delta di latenza.
Playbook di implementazione
- Baseline: 500 fissi + 10% di sovrapposizione; raccogli benchmark.
- Introduci confini semantici: sostituisci le finestre dove i titoli sono affidabili; misura di nuovo.
- Aggiungi un livello gerarchico se il corpus supera 250k chunk o la latenza supera il target.
- Distribuisci logica adattiva per sezioni ad alta varianza di dimensione.
- Rivalutazione trimestrale: confronta costo per delta di qualità con le nuove capacità dei modelli.
Salva il diff del manifest dei chunk a ogni iterazione per il rollback.
Punti chiave
- I confini semantici di solito battono le finestre fisse pure in precisione/costo.
- La sovrapposizione è una manopola: misura la duplicazione, non indovinare.
- Il recupero gerarchico aiuta a scalare senza crescita lineare della latenza.
- ID chunk stabili abilitano refresh incrementali sicuri degli embedding.
- Valuta i cambi di strategia come deploy di codice: benchmark, confronto, log.