Strategies de decoupage de texte
Le decoupage de texte est une etape critique du pipeline RAG. Une mauvaise strategie peut injecter du contexte non pertinent dans vos prompts.
Trois strategies principales
Decoupage par taille
Divise le texte en segments de longueur egale. Simple a implementer mais coupe les mots et perd le contexte. La solution : ajouter du chevauchement entre segments.
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
Decoupage par structure
Exploite l’organisation naturelle du document (titres, paragraphes, sections). Excellent quand la structure est garantie.
def chunk_by_section(document_text):
pattern = r'\n## '
return re.split(pattern, document_text)
Limitation : beaucoup de documents n’ont pas de structure coherente.
Decoupage semantique
Analyse le sens et les relations entre phrases pour regrouper le contenu lie. Plus sophistique mais plus couteux en calcul.
Decoupage par phrases (compromis)
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
Guide de choix
| Cas | Strategie recommandee |
|---|---|
| Structure coherente | Par structure |
| Documents mixtes | Par phrases |
| Code ou contenu technique | Par caracteres |
| Format inconnu | Par caracteres |