Dans le RAG, l’important c’est le chunk

Alexis Perrier
3 min readDec 2, 2023

Ce court article explique comment explorer un grand corpus propriétaire en utilisant une stratégie RAG et souligne l’importance de l’étape de découpage du pipeline.

RAGtime

(non, pas le Ragtime de Scott Joplin, désolé pour les amateurs de jazz)

RAG signifie Retrieval Augmented Generation. C’est une technique utilisée pour questionner et explorer de grandes collections de documents. RAG est une manière simple de tirer parti des LLM sur un corpus propriétaire sans recourir à des stratégies d’accord plus coûteuses et complexes.

L’étape de préparation initiale consiste à découper les documents de votre corpus en parties plus petites appelées chunks. Le découpage décompose un grand texte en segments plus petits pour optimiser la pertinence du contenu.

Le découpage est suivi de la phase d’embedding : le calcul d’une représentation vectorielle ou embedding, de chaque chunk. Chaque morceau de texte devient un vecteur.

Il existe plusieurs façons de découper un document et de calculer des embeddings.

Ces embeddings sont ensuite stockés dans une base de données vectorielle telle que weaviate. Une base de données vectorielle a deux rôles principaux :

  1. stocker le texte et les vecteurs associés,
  2. permettre un matching super rapide entre deux embeddings.

En résumé :

  • le texte est divisé en chunks
  • chaque chunk est vectorisé et stocké

Maintenant, nous pouvons commencer à interroger votre corpus.

Comme l’indique son nom, le pipeline RAG se compose alors de 2 étapes : la récupération ou retrieval et la génération.

Récupération

En fonction de votre requête ou question.
- Votre requête est également incorporée.
- La base de données vectorielle trouve les morceaux de texte dans le corpus qui correspondent le plus étroitement à votre requête.

Génération

Les chunks résultants sont utilisés comme information pouvant aider à répondre à votre question à l’aide d’un LLM et d’une requête correctement structurée.

La requête a la structure suivante : rôle, contexte et question :

Agissant en tant que
{insérez un rôle spécifique : enseignant, analyste, geek, auteur, …}
Utilisez les informations suivantes :
{insérez les chunks de texte résultants}
pour répondre à cette question :
{insérez votre question initiale}

C’est la stratégie globale RAG. Sa réussite dépendra de plusieurs facteurs.

  • Le modèle d’embedding : le choix des modèles est vaste. Par exemple, Camembert via huggingface est censé être plus adapté au français, text-embedding-ada-002 est le modèle d’embedding d’OpenAI, Voyage est un autre modèle d’embedding qui montre du potentiel.
  • Le LLM génératif : open source vs OpenAI GPT4, Cohere, Anthropic
  • Et la stratégie de découpage / chunking

Le découpage peut se faire au niveau de la phrase, du paragraphe ou être de taille fixe (voir langChain TextSplitters par exemple). Un certain chevauchement entre les chunks est généralement considéré pour relier les chunks consécutifs. Bien que les autres étapes (embedding, LLM) méritent attention, trouver une bonne stratégie de découpage est là où réside le défi pour obtenir des réponses pertinentes.

Une bonne stratégie de découpage doit capturer à la fois le sens et le contexte. Les chunks courts préserveront le sens mais manqueront de contexte, tandis que les chunks longs auront tendance à lisser les nuances de chaque phrase.

L’embedding d’une phrase se concentre sur son sens spécifique, tandis que l’embedding d’un paragraphe ou d’un document prend en compte le contexte global et les relations entre les phrases, pouvant entraîner une représentation vectorielle plus complète mais avec l’inconvénient de bruit potentiel ou de dilution pour des tailles d’entrée plus importantes.” Merci, chatGPT !

Ainsi, lors de la définition d’une bonne stratégie de découpage, gardez à l’esprit :

  • La longueur des documents initiaux : livres ou courtes phrases, et la longueur et la complexité attendues des requêtes utilisateur.
  • Différents modèles peuvent avoir des performances optimales sur des tailles de chunks spécifiques : modèles de transformation de phrases pour des phrases individuelles, text-embedding-ada-002 pour des chunks avec 256 ou 512 tokens.

L’idée est d’aligner la stratégie de découpage avec les requêtes utilisateur pour établir une corrélation plus étroite entre la requête incorporée et les chunks incorporés.

Conclusion

Le découpage n’est pas un défi qui peut être résolu avec un modèle d’IA. Un simple script Python fera l’affaire. C’est une tâche simple qui se résume à diviser un grand texte en parties plus petites. Mais c’est la fondation qui fera de votre système RAG générer des réponses de qualité.

Lecture complémentaire

--

--

Alexis Perrier

Passionné par les maths, la linguistique et la nature, Editeur du site Moliere.love