Strategies de decoupage de texte
Le decoupage de texte (chunking) est l’une des etapes les plus critiques d’un pipeline RAG. La facon dont vous decoupez vos documents impacte directement la qualite de tout le systeme. Une mauvaise strategie peut conduire a du contexte non pertinent dans vos prompts, causant des reponses completement fausses.
Trois strategies principales
1. Decoupage par taille
L’approche la plus simple : diviser le texte en chaines de longueur egale. Facile a implementer, fonctionne avec tout type de document.
Inconvenients : les mots sont coupes en pleine phrase, les chunks perdent le contexte du texte environnant, le contenu relie peut etre coupe entre plusieurs chunks.
Avec chevauchement (overlap) : chaque chunk inclut des caracteres des chunks voisins, fournissant du contexte additionnel aux frontieres.
def chunk_by_char(text, chunk_size=150, chunk_overlap=20):
chunks = []
start_idx = 0
while start_idx < len(text):
end_idx = min(start_idx + chunk_size, len(text))
chunk_text = text[start_idx:end_idx]
chunks.append(chunk_text)
start_idx = (
end_idx - chunk_overlap if end_idx < len(text) else len(text)
)
return chunks
2. Decoupage par phrase
Un bon equilibre entre contexte et sens pour la prose :
def chunk_by_sentence(text, max_sentences_per_chunk=5, overlap_sentences=1):
sentences = re.split(r"(?<=[.!?])\s+", text)
chunks = []
start_idx = 0
while start_idx < len(sentences):
end_idx = min(start_idx + max_sentences_per_chunk, len(sentences))
current_chunk = sentences[start_idx:end_idx]
chunks.append(" ".join(current_chunk))
start_idx += max_sentences_per_chunk - overlap_sentences
return chunks
3. Decoupage par section
Quand les documents ont un formatage coherent (Markdown avec des en-tetes clairs) :
def chunk_by_section(document_text):
pattern = r"\n## "
return re.split(pattern, document_text)
Excellents resultats pour les documents bien structures, mais necessite des garanties sur la structure du document.
Choisir la bonne strategie
| Strategie | Ideal pour | Limites |
|---|---|---|
| Par caracteres | Tout type de document, option de secours | Perte de contexte, coupures arbitraires |
| Par phrases | Prose, articles, contenu narratif | Problemes avec le code ou les documents techniques |
| Par sections | Documents structures avec en-tetes | Ne fonctionne pas avec du texte brut non formate |
Le decoupage est souvent un processus iteratif. Commencez simple, testez avec vos documents specifiques, puis affinez en fonction de la qualite des resultats.