Vai al contenuto

Strategie di chunking per RAG

Progettare chunking ad alta precisione per RAG su siti web: strategie fisse, semantiche, gerarchiche, adattive e valutazione.

chunking • rag • retrieval • embeddings

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:

MetricaScopo
Recall@kConservazione dei fatti
Precision@kRumore nel contesto
Chunk CountIndicatore di costo
Duplication RatioTaratura della sovrapposizione
Avg Tokens per ChunkUso 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

  1. Baseline: 500 fissi + 10% di sovrapposizione; raccogli benchmark.
  2. Introduci confini semantici: sostituisci le finestre dove i titoli sono affidabili; misura di nuovo.
  3. Aggiungi un livello gerarchico se il corpus supera 250k chunk o la latenza supera il target.
  4. Distribuisci logica adattiva per sezioni ad alta varianza di dimensione.
  5. 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.