0Pricing
AI Engineering Academy · Lezione

Perché il chunking ingenuo danneggia il retrieval

Analizzi i problemi reali di retrieval causati da un chunking inadeguato, comprese le risposte suddivise tra i confini dei chunk e il contesto perso negli header e nei titoli delle sezioni.

Perché il chunking ingenuo danneggia il retrieval è una lezione AI Engineering Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Engineering Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Engineering Academy include 4 lezioni in totale.

Il costo di un chunking inadeguato

Il chunking è il processo di suddivisione dei documenti in parti più piccole prima di inserirle in un vector store. Il modo in cui suddivide il testo determina quale contesto sarà disponibile durante il recupero. Un chunking inadeguato è una delle cause più comuni e rilevanti dei malfunzionamenti dei sistemi RAG.

Risposte suddivise tra i confini

Immagini un documento che dice: "La politica sui rimborsi prevede 30 giorni dalla data di acquisto. I clienti devono includere la ricevuta originale." Se uno splitter di dimensione fissa taglia dopo "acquisto.", le due frasi finiscono in chunk diversi. Una query sulla politica dei rimborsi potrebbe recuperare solo la prima metà, impedendo al modello di menzionare il requisito della ricevuta.

Contesto perso a causa delle intestazioni

I documenti usano spesso le intestazioni delle sezioni per fornire significato. Consideri una tabella intitolata "Prezzi dei piani Enterprise" seguita da righe di numeri. Se l'intestazione e la tabella finiscono in chunk diversi, il chunk recuperato contenente la tabella presenta numeri privi di etichetta: il modello non può rispondere correttamente a "Qual è il prezzo Enterprise?".

Problemi del chunking di dimensione fissa

Il chunking di dimensione fissa suddivide il testo ogni N caratteri o token, indipendentemente dai confini delle frasi. È rapido e semplice, ma interrompe spesso le frasi a metà. Un chunk che termina con 'The model was trained on' e il chunk successivo che inizia con 'a dataset of 500 billion tokens' non hanno alcun significato presi singolarmente.

from langchain.text_splitter import CharacterTextSplitter

# Naive fixed-size: may break mid-sentence
splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=0)
chunks = splitter.split_text(document_text)
print(f'Created {len(chunks)} chunks')
print('First chunk:', chunks[0])

La sovrapposizione non è sempre utile

Una soluzione comune consiste nell'aggiungere la sovrapposizione tra chunk, ripetendo gli ultimi N token di un chunk all'inizio di quello successivo. Questo aiuta con le frasi suddivise, ma introduce ridondanza e può confondere i retriever quando vengono recuperati due chunk molto simili. La sovrapposizione è un rimedio temporaneo, non una soluzione ai problemi strutturali del chunking.

# Overlap helps partially but adds redundancy
splitter = CharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50  # last 50 chars repeated in next chunk
)
chunks = splitter.split_text(document_text)

Misurare il tasso di errore del recupero

Può misurare quanto il chunking danneggi il recupero creando un piccolo set di valutazione di riferimento: un elenco di domande con i relativi passaggi corretti noti. Verifichi quindi con quale frequenza il passaggio corretto si trova tra i chunk recuperati nei primi k risultati. Un tasso di riscontro basso spesso rivela problemi di chunking prima ancora di esaminare la qualità della generazione.

def hit_rate(queries_and_answers, retriever, k=5):
    hits = 0
    for query, expected_text in queries_and_answers:
        results = retriever.retrieve(query, k=k)
        retrieved_texts = [r.page_content for r in results]
        if any(expected_text in text for text in retrieved_texts):
            hits += 1
    return hits / len(queries_and_answers)

Problemi con il codice e i dati strutturati

I file di codice, JSON e le tabelle hanno unità logiche — funzioni, oggetti, righe di tabella — che non dovrebbero essere suddivise. Dividere la definizione di una funzione Python tra due chunk significa che nessuno dei due è comprensibile autonomamente. Un retriever che trova il secondo chunk vede codice privo di argomenti e di contesto.

# Bad: splits code arbitrarily
bad_chunk_1 = 'def calculate_price(item, qty'  # incomplete!
bad_chunk_2 = ', discount):\n    return item.price * qty * (1 - discount)'

# Good: keep the full function together
good_chunk = 'def calculate_price(item, qty, discount):\n    return item.price * qty * (1 - discount)'

Documenti lunghi e perdita del contenuto centrale

Le ricerche sugli LLM mostrano il fenomeno del "lost in the middle": quando vengono recuperati molti chunk e inseriti in un prompt, il modello presta attenzione al contenuto vicino all'inizio e alla fine, ma tende a ignorare quello centrale. Un chunking inadeguato che produce molti chunk piccoli e di bassa qualità peggiora il problema, diluendo il segnale rilevante.

Diagnosticare manualmente i chunk inadeguati

Un rapido metodo diagnostico consiste nello stampare un campione casuale dei Suoi chunk e leggerli. Si chieda: Questo chunk è significativo se considerato isolatamente? Se un utente ponesse una domanda, il modello potrebbe rispondere basandosi solo su questo chunk? I chunk che fanno riferimento a pronomi non definiti ('He said that...'), contengono codice incompleto o numeri privi di contesto sono segnali d'allarme.

import random

def audit_chunks(chunks, sample_size=10):
    sample = random.sample(chunks, min(sample_size, len(chunks)))
    for i, chunk in enumerate(sample):
        print(f'--- Chunk {i+1} ({len(chunk)} chars) ---')
        print(chunk[:300])
        print()

Quando la dimensione dei chunk è eccessiva

Chunk molto grandi danneggiano la precisione del recupero. Un chunk di 2000 token su un argomento ampio può corrispondere a molte query, ma fornire all'LLM troppo rumore. Il modello deve trovare l'ago nel pagliaio all'interno di quel chunk. Chunk più piccoli e focalizzati migliorano la precisione, a costo di poter perdere parte del contesto circostante.

Strategie per risolvere questi problemi

Alternative migliori al chunking ingenuo di dimensione fissa includono: la suddivisione ai confini delle frasi, che non interrompe mai una frase a metà; il chunking semantico, che suddivide il testo ai confini degli argomenti; il chunking parent-child, che preserva un contesto più ampio; e la suddivisione consapevole della struttura del documento, che rispetta le funzioni del codice, i tag HTML e le intestazioni Markdown. Le prossime lezioni illustrano ciascuna di queste strategie.

Verifica rapida

Verifichi la Sua comprensione delle modalità di errore del chunking illustrate in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: il chunking ingenuo di dimensione fissa interrompe i confini delle frasi e delle sezioni, la sovrapposizione è una soluzione parziale, ma aggiunge ridondanza e la qualità dei chunk determina direttamente il tasso di riscontro del recupero. Ora esploreremo il chunking semantico, che suddivide il testo ai confini naturali degli argomenti utilizzando la similarità tra embedding.

Domande Frequenti

La lezione «Perché il chunking ingenuo danneggia il retrieval» è gratuita?

Sì — il testo completo di «Perché il chunking ingenuo danneggia il retrieval» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Engineering Academy, passa a CoddyKit PRO. Il corso AI Engineering Academy include 4 lezioni in totale.

Cosa imparerò in «Perché il chunking ingenuo danneggia il retrieval»?

Analizzi i problemi reali di retrieval causati da un chunking inadeguato, comprese le risposte suddivise tra i confini dei chunk e il contesto perso negli header e nei titoli delle sezioni. Eserciti AI Engineering Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Engineering Academy?

Non è richiesta alcuna esperienza precedente. AI Engineering Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Perché il chunking ingenuo danneggia il retrieval»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Engineering Academy?

Sì. Ogni lezione AI Engineering Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché il chunking ingenuo danneggia il retrieval
  2. Chunking semantico con la similarità degli embedding
  3. Retrieval parent-child e small-to-big
  4. Strategie specifiche per documenti di codice e HTML
← Torna a AI Engineering Academy