Améliorer les performances des RAGs : aperçu des techniques de chunking augmenté

Publié le mardi 18 février 2025 | Etalab

  • Thématiques :
    • Data

Les grands modèles de langage (LLM) sont désormais omniprésents, offrant des outils puissants qui peuvent être intégrés de manière fluide à nos données grâce à la magie des RAGs (Retrieval-Augmented Generation). Dans cet article, nous allons explorer certains domaines clés pour voir comment améliorer les performances de récupération de données pertinentes avec :

  • Les différents modèles d’embedding : e5, BGE and Solon
  • Les techniques d’augmentation de chunks : Comment ajouter du ‘contexte' et de l’information à nos chunks pour les rendre plus pertinents et facile d’accès pour le RAG
  • Le reranking: Les rerankers sont-ils une bonne addition à une pipeline RAG ?

En testant ces composants, nous espérons découvrir des informations précieuses sur la façon de tirer le meilleur parti des LLMs dans des applications concrètes.

Augmentation des chunks : ajouter du contexte pour améliorer la récupération de documents

Les données que nous utiliserons pour cet article proviennent de service-public.fr et contiennent principalement des guides et des réponses aux questions administratives françaises. Toutes les données utilisées peuvent être trouvées (Ouvre une nouvelle fenêtre) ici.

Le chunking ou segmentation est une technique de traitement du langage naturel qui consiste à diviser un texte en unités plus petites et significatives, appelées "segments". Ces segments se composent généralement de mots ou de phrases qui véhiculent une idée ou un concept spécifique dans le contexte du texte. La segmentation aide à organiser et structurer l'information, ce qui permet aux modèles d'analyser et de comprendre plus facilement le contenu.

Fig1. Visualisation de la segmentation d’un texte (https://huggingface.co/spaces/m-ric/chunk_visualizer)

Pour le chunking préliminaire, nous utilisons la fonction ‘RecursiveCharacterTextSplitter’ de Langchain avec une longueur maximale de 4000 caractères, ce qui semble être une taille raisonnable pour un futur LLM (à la fin de la pipeline RAG) avec une longueur de contexte de 8k tokens, auquel nous pourrons fournir 4 à 5 chunks comme contexte par requête.


Pour évaluer la performance de différents types de chunks, nous allons essayer les approches suivantes :

  • Baseline : La référence consistera en des chunks simples sans aucun en-tête ou information ajoutée. Le text de base a simplement été prédécoupé.
  • Baseline augmentée : Tous les autres RAGs consisteront en la baseline à laquelle seront ajoutées certaines informations que nous avons sur chaque article de notre base de données. Ainsi, nous ajouterons en en-tête de chaque chunk des données telles que le titre du document parent, la date du document parent, l'URL du document parent ou encore le thème.
  • Keywords : Les RAGs que nous évaluerons et qui auront Keywords dans leurs noms consisteront en la baseline augmentée + les 10 principaux mots-clés (trouvés à l'aide de TF-IDF) du document parent (encore une fois, ajoutés dans en en-tête).
  • Potential questions : Des questions potentielles auxquelles un chunk doit pouvoir répondre.

L'objectif principal d'une RAG est de trouver des documents pertinents qui devraient aider un modèle à répondre à une question donnée. En partant de ce principe, nous essayerons une troisième approche consistant à ajouter des « questions potentielles » — des questions auxquelles un chunk donné peut répondre — à chaque chunk, toujours dans l’en-tête. Pour générer ces questions, nous donnons chaque chunk que nous avons créé à un LLM (mistral 7B — OpenHermes), avec le prompt suivant :

En t'inspirant du texte ci-dessous, réponds uniquement avec une liste de 2-3 questions très précises et détaillées que l'on pourrait poser sur ce texte et dont la réponse se trouve dans ce texte. Si le texte est très court ne réponds qu'avec une ou deux questions. N'inventes pas des questions qui ne veulent rien dire, si tu n'as qu'une seule question c'est très bien aussi. Les questions ne doivent pas être vagues, et pouvoir être associées très facilement à ce texte si on les comparait à d'autres questions pour d'autres textes. Si une question porte sur l'article de manière générale, le numéro ou l'id de l'article doit être contenu dans la question. Les questions doivent contenir les éléments importants comme des dates ou des numéros si besoin. Voici des exemples pour t’aider: Mauvaises questions qu'on ne veut pas: ["De quoi parle ce texte ?", "Qui est mentionné ici ?"] (trop vague) Bonne question: ["Quel groupe est concerné par la décision XX-XXX-XX ?"] (net et précis) Voilà le texte: {article}

Prompt 1 - Create potential questions

Nous allons maintenant pouvoir tester la baseline et la baseline augmentée à laquelle nous pourrons ajouter — ou non — des keywords et/ou questions potentielles, donnant un total de 5 types de chunks différents :

- Baseline
- Without keywords — without questions (baseline augmentée)
- With keywords — without questions
- Without keywords — with questions
- With keywords - with questions

Modèles d’embedding : Représentation du text

L’embedding d’un texte est le processus de représentation des données textuelles, telles que des mots, des phrases ou des documents, sous forme de vecteurs numériques denses dans un espace vectoriel de haute dimension. Ces représentations vectorielles visent à capturer les significations sémantiques et contextuelles du texte, où des textes similaires sont mappés à des vecteurs proches les uns des autres dans l'espace vectoriel.

Fig2. Embeddings: from text to vectors

Dans cet article, nous comparons 3 modèles d’embedding :
- intfloat/e5-large: (Ouvre une nouvelle fenêtre) https://arxiv.org/pdf/2402.05672
- BAAI/bge-m3: (Ouvre une nouvelle fenêtre) https://arxiv.org/pdf/2402.03216
- OrdalieTech/Solon-embeddings-large-0.1

Le modèle e5-large est un modèle d’embedding développé par Microsoft. Il génère des intégrations de haute qualité en utilisant un pré-entraînement contrastif faiblement supervisé. Entraîné sur différents jeux de données, ce modèle peut être utilisé pour diverses tâches de traitement du langage naturel, comme la similarité sémantique, la récupération d'informations et le clustering de textes. Il encode le texte d'entrée en représentations vectorielles denses.

Le modèle bge-m3 est un modèle d'embedding de texte multilingue développé par l'Académie de l'intelligence artificielle de Pékin (BAAI). Il prend en charge plus de 100 langues et peut traiter de longues séquences d'entrée allant jusqu'à 8192 tokens. Cela le rend adapté à l'intégration de données textuelles multilingues et de textes longs.

Enfin, le modèle Solon est un modèle d'embedding Français open source SOTA. Les données utilisées dans l'article étant en français, nous devions le tester par rapport à des modèles multilingues robustes.

Reranker

Lors de nos tests, nous explorerons également le reranking ou réordonnancement, une méthode utilisant un modèle reranker, souvent appelé cross-encodeur. Ce modèle évalue la similarité entre chaque paire requête-document, nous permettant de réorganiser les documents en fonction de leur pertinence par rapport à la requête. Après la recherche initiale utilisant les scores de similarité, le reranker est appliqué, permettant une sélection plus large de documents. Par exemple, nous pourrions récupérer les 20 documents les plus similaires, les réordonner, et ne sélectionner que les 5 premiers selon le reranker pour les fournir comme contexte à notre LLM.

Le reranker utilisé dans cet article est crossencoder-electra-base-french-mmarcoFR, un modèle entraîné sur des échantillons d'entraînement français du jeu de données (Ouvre une nouvelle fenêtre) mMARCO.

Evaluation

Pour évaluer la performance de chaque technique de chunking et des modèles d’embedding, nous utiliserons deux ensembles de questions différents :

  • Synthétiques : Parmi les 1733 chunks de notre base de données, 100 ont été donnés à un LLM qui a généré une question spécifique à laquelle le contenu du segment devrait pouvoir répondre.
  • Humaines : 20 chunks de la base de données ont été choisis aléatoirement par nos soins, à partir desquels nous avons créé des questions plus complexes auxquels le contenu des segments devrait pouvoir répondre.

Nous avons adopté un prompt similaire à celui de la "Prompt 1" pour générer des questions synthétiques. Il est intéressant de noter que l’on pourrait remarquer des similarités, voire des questions presque identiques, entre l'ensemble des questions synthétiques et les questions potentielles ajoutées dans l'en-tête pour les RAGs contenant des questions potentielles. Bien que cette observation soit valide, il est important de noter que dans des scénarios réels, certaines questions posées approcheront inévitablement les questions potentielles pré-générées. En fait, ce chevauchement est l'un de leurs objectifs.

Le score de précision dans les graphiques représente le pourcentage de documents pertinents (le bon document pour la question) trouvés dans le top 1, top 2, et ainsi de suite.

Rags

Comme expliqué dans la partie « Chunk augmentés », nous allons tester 5 RAGs différents, un pour chaque configuration de chunk. Ajouté à cela, nous allons également tester 2 techniques utilisant les mot-clés pour les RAGs « keywords » :

- Filtered

- Softkeywords

Pour la récupération de document pertinent, nous utilisons la fonction de Langchain `similarity_search_with_score`. La technique « filtered » consistera à appliquer un filtre en amont en ne gardant que les documents contenant au moins un mot-clé (parmi la liste de mot-clés contenue en header du chunk) en commun avec la question posé. Par conséquent, le score de similarité ne sera alors calculé que pour les documents partageant des mots-clés avec la question posée.

Cette approche garantit que l'évaluation de la similarité est effectuée exclusivement dans le contexte des mots-clés pertinents partagés entre la question et les documents.

La technique softkeywords consiste à tester les RAGs contenant des mot-clés dans les headers des chunks mais sans les utilisés pour du pré-filtre. Pour ces derniers, les mot-clés n’impact en réalité que l’étape d’embedding des chunks.

Finalement, les 7 différents RAGs sont les suivants :

Fig3. Les 7 différents types de chunks

Table1. Résumé des RAGs testés.

Résultats

Embeddings E5

En utilisant le modèle d’embedding E5, nous avons créé les 7 RAGs présentés dans la section précédente et avons exécuté les 100 questions synthétiques sur la fonction de similarité de recherche de Lanchain. Pour chacun de nos résultats, la précision est définie par le fait que le segment « vrai » ait été trouvé en 1ère, 2ème, 3ème, 4ème, 5ème position ou pas du tout (6ème position ou plus).

Fig4. E5 - Évaluation sur les questions synthétiques. (Voir l’annexe pour le résumé des résultats)

Les termes « raw » et « clean », affichés sous le graphique, indiquent si la question a été utilisée dans sa forme originale ou avec les stop words supprimés avant d'entrer dans la pipeline. Divers tests indiquent que la suppression des stop words (« clean ») de la question n'a pas eu d'influence significative sur les résultats. Par conséquent, nous avons choisi de ne pas nous attarder sur cet aspect.

Fig5. E5 - Évaluation sur les questions synthétiques - Cumsum sur les 5 premiers documents retrouvés.

Tout d'abord, nous observons que la référence (baseline — segments simples sans informations supplémentaires) est surpassée par tous les autres types de chunks. L'ajout de mots-clés, particulièrement avec des questions potentielles, semble améliorer significativement les performances, le filtrage par mots-clés surpassant son équivalent « softkeywords ». Cependant, il convient de noter que cette technique (filtrage par mots-clés) est intrinsèquement « destructrice », car de nombreux documents sont ignorés s'ils ne contiennent aucun des mots-clés de la question. Les meilleurs résultats sont obtenus avec les RAGs contenant des questions potentielles + des mots-clés dans les en-têtes, avec et sans pré-filtrage en utilisant les mots-clés. Leurs scores de précision sont respectivement de 95,1 % et 92,1 % pour la récupération des chunks dans les 5 premiers documents en utilisant le score de similarité.

Embeddings BGE

En utilisant la même logique que pour la partie précédente, nous avons testé les 100 questions synthétiques sur les RAGs issus de l’embedding BGE.

Fig6. BGE - Évaluation sur les questions synthétiques.

Les résultats ici sont assez explicites, car il semble que BGE surpasse E5 pour chaque type de chunk. Nous présenterons une comparaison plus détaillée dans la section suivante. Tout comme E5, la baseline semble être la moins efficace, ce qui confirme que l'ajout d'informations, voire de mots-clés et de questions potentielles, aide dans l'étape de récupération de documents pertinents.

La somme cumulative de la précision pour les cinq premiers documents est présentée ci-dessous.

Fig7. BGE - Évaluation sur les questions synthétiques — Cumsum.

En regardant le top 5 des documents récupérés, tous les RAGs — en excluant la baseline — ont des résultats similaires. Sur le top 2, les meilleurs RAGs sont la baseline augmentée (base + titre etc) et la baseline augmentée avec questions potentielles.

En testant ces mêmes RAGs sur les questions humaines du 2e dataset nous obtenons les résultats suivants :

Fig8. BGE - Évaluation sur les question humaines — Cumsum.

Pour ce dataset, il semblerait que l’ajout de questions potentielles n’ait pas l’impact observé précédemment avec le dataset de question synthétique. Par contre, les mots-clés ont toujours le même impact positif, suivi de près par la technique de soft-keywords.

Solon Embeddings

Pour Solon, les résultats observés sont très proche de BGE, aussi nous n’iront pas dans le détail des analyse car les graphiques de résultats parlent d’eux même. De manière générale, BGE apparaît plus performant et plus robuste que les deux autres modèles d’embeddings, et ce pour presque tous les types de RAGs testés.

Fig9. Solon - Évaluation sur les questions synthétiques.

E5 Vs BGE et Reranker

Pour la comparaison de E5 et BGE en testant le reranker, nous choisissons de garder les baselines ainsi que les RAGs contenant les mots-clés + les questions potentielles. De plus, nous appliquons ici la technique de soft keywords pour ne pas engendrer de perte de documents avec un filtre comme expliqué précédemment. Pour le reranker, nous récupérons d’abord 20 documents via la recherche de similarité, avant de les réordonner avec le reranker et de ne sélectionner que les 5 documents ayant les meilleurs scores selon ce dernier.

Fig10. E5 vs BGE — Avec et sans Reranker.

La baseline de BGE semble avoir une meilleure performance que tous les RAGs issus de E5 sur le top 1, et montre de bons résultats sur l’ensemble du top 5. De plus, l’addition d’un reranker apparaît comme bénéfique, notamment sur l’amélioration des performance de BGE sur le RAG mots-clés + questions potentielles.

Conclusion

Dans cette recherche, nous nous sommes lancés dans une exploration de l'exploitation des techniques de RAG et de chunking pour améliorer les performances de systèmes RAG + LLM. L'utilisation généralisée de grands modèles de langage (LLM) dans diverses applications souligne l'importance d'optimiser leurs capacités pour un traitement efficace des données. Notre étude s'est concentrée sur trois aspects clés : les modèles d'intégration, les techniques d'augmentation des chunks et les méthodes de reranking.

En ce qui concerne les modèles d’embedding, nous avons effectué une analyse comparative de trois modèles importants : e5, BGE et Solon. Chaque modèle présente des caractéristiques et des points forts uniques, BGE démontrant des performances supérieures dans différentes configurations de chunking. L'évaluation des techniques de chunking a révélé que l'incorporation d'informations contextuelles, telles que les mots-clés et les questions potentielles, améliorait de manière significative la précision de la recherche documentaire. Cependant, il est essentiel de reconnaître le compromis inhérent au filtrage par mots-clés, qui peut conduire à l'exclusion de documents pertinents.

En outre, notre étude des mécanismes de reranking a mis en évidence leur efficacité pour affiner les résultats de la recherche en fonction de leur pertinence par rapport à la requête. L'application d’un reranker, en particulier en conjonction avec des embeddings issus de BGE et le chunking augmenté, a produit des améliorations notables dans la précision de la recherche de documents.

Dans l'ensemble, nos résultats soulignent l'importance de prendre en compte différents facteurs, y compris les modèles d'embeddings, les stratégies de chunking et le reranking.

Future researches

Dans le cadre de recherches futures, nous pourrions nous pencher sur d'autres variantes des techniques de chunking afin d'affiner notre compréhension de leur efficacité. Par exemple, l'exploration du potentiel du découpage phrase-par-phrase pourrait fournir des indications sur la granularité de l'information nécessaire pour une recherche optimale de documents. En outre, l'étude d’un chunking comprenant par exemple uniquement les questions potentielles, avec ou sans mots-clés, pourrait également amener à des résultats intéressant. En évaluant systématiquement ces approches alternatives, nous pouvons acquérir une compréhension plus profonde de leurs implications pour l'amélioration de la performance du LLM et de la précision de la recherche d'informations.

Appendix

Table2. Résumé des Rags testés avec les accuracy scores. Sont mis en gras les 2 meilleurs RAGs pour chaque modèle d’embedding. Les résultats présentés proviennent du dataset de questions synthétiques

Par Camille ANDRE, data scientist au sein d'Etalab