Depuis plus d'un an, l'approche RAG (Retrieval-Augmented Generation) connaît un succès considérable qui correspond à l'explosion des LLM pour les entreprises. Sur la base de cette approche, des milliers d'articles ont été
écrits pour montrer la simplicité de son traitement. Cependant, il est important de garder à l'esprit que sous la simplicité de cette approche se cache une quantité considérable de complexité et de
variations possibles.
Nous vous proposons une série d’articles qui explorent les modèles de conception basés sur l'approche Retrieval-Augmented Generation (RAG) pour les systèmes de réponse utilisant de grands modèles de langage
(LLM). Cette série couvre à la fois les fondements théoriques, les avantages, les défis, et les variations pratiques de cette approche, tout en abordant les aspects de performance, de sécurité et d'éthique.
Introduction à l'approche RAG
En mai 2020, Patrick Lewis et al. de FAIR (Facebook AI Research) ont publié un article intitulé Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.
Cet article explore une recette de réglage fin à usage général appelée l'approche RAG, qui combine une mémoire paramétrique (modèle) et non paramétrique (document) pré-entraînée
pour la génération de langage.
L'approche RAG combine un récupérateur pré-entraîné avec un générateur pré-entraîné, tous ajustés de bout en bout. Le récupérateur est un encodeur de requêtes
couplé à un index de documents, et le générateur est un modèle séquence à séquence pré-entraîné. La recherche du produit intérieur maximal (MIPS pour Maximum Inner
Product Search) est utilisée à partir de la requête de l'utilisateur pour trouver les K premiers documents. Pour la prédiction finale, z est traité comme une variable latente et marginalisé sur les prédictions
seq2seq pour différents documents.
Le générateur évalué est un modèle BART-large de FAIR avec 400 millions de paramètres. L'index des documents est un ensemble de segments de 100 mots de Wikipédia, représentant un volume de 21 millions
de documents. Pour l'extraction, ils utilisent la bibliothèque FAISS, un extracteur rapide basé sur une recherche de similarité efficace et le regroupement de vecteurs denses. Ils ont obtenu les meilleurs résultats avec
une dizaine de documents latents (environ 1 000 mots) et, en 2020, ils ont obtenu des résultats de pointe sur les questions/réponses dans un domaine ouvert.
Plusieurs chercheurs ont ensuite travaillé à l'amélioration de certaines parties de cette approche. En décembre 2021, Sebastian Borgeaud, Arthur Mensch, Jordan Hoffmann et d'autres personnes de DeepMind ont publié un
article intitulé "Improving language models by retrieving from trillions of tokens" (
Améliorer les modèles de langage en récupérant des trillions de jetons) expliquant comment un transformateur
amélioré par la récupération (RETRO pour Retrieval-Enhanced TRansfOrmer) peut aider à trouver les segments les plus importants d'une base de connaissances. Cette approche accélère le processus de récupération
et permet de gérer un énorme volume d'informations.
Depuis l'explosion des grands modèles linguistiques tels que GPT4 et bien d'autres, cette approche a été adaptée pour utiliser des accélérateurs et des composants prêts à l'emploi, mais les principes
généraux sont restés les mêmes. L'encodeur de requêtes est remplacé par un modèle d'intégration pré-entraîné tel qu’un BERT et ses équivalents. Le modèle
OpenAI GPT text-embedding-3-large est un encodeur bien connu. Ce modèle OpenAI a une taille d'entrée de 8 191 tokens (environ 6 150 mots en anglais) et une taille de sortie de 1 536 valeurs flottantes (appelées vecteur d'intégration
ou vecteur dense). En tant qu'approche triviale, la recherche est calculée en comparant le vecteur d'entrée avec les documents intégrés en utilisant des techniques de distance (Euclidienne, cosinus, etc.), le générateur
utilise les capacités de généralisation, de compréhension et de génération fournies par les LLM d'aujourd'hui.
Depuis plusieurs mois, nous avons vu apparaître de nouvelles approches utilisant des graphes dans le cadre de la recherche. Vous trouverez de bonnes descriptions dans "Knowledge Graph-Augmented Language Models for Knowledge-Grounded Dialogue Generation"
de KAIST & AITRICS publié en mai 2023 ou "Unifying Large Language Models and Knowledge Graphs : A Roadmap" de l'IEEE
publié en juin 2023. Cette nouvelle approche consiste à apporter au modèle un ensemble de triplets (sujet-prédicat-objet) issus de l'analyse de la question et du contexte. Le nombre de triplets est l'ensemble des liens
vers l'entité ou les entités concernées, ainsi que tous les liens vers les objets dans une stratégie multi-sauts.
L'une des particularités de ces systèmes est qu'ils doivent non seulement répondre aux questions lorsque la réponse se trouve dans l'entrée, mais aussi distinguer les cas où aucune réponse n'est disponible
selon les passages donnés et s'abstenir de répondre. En fin de compte, dans cette tâche générative de réponses, le système évolue vers une tâche de compréhension de la lecture par
la machine (MRC pour Machine Reading Comprehension), qui est finalement un ancien défi d'IA qui demande à la machine de déterminer les réponses correctes aux questions sur la base d'un passage donné
Avantages et défis de l'approche RAG
L'approche RAG présente un certain nombre d'avantages par rapport à l'approche du livre fermé.
La réponse à des questions fermées exige qu'un modèle réponde directement à une question sans avoir accès à des connaissances externes. C'est ainsi que ChatGPT fonctionnait généralement,
et c'est pourquoi cette solution était limitée dans sa capacité à répondre à des questions sur des faits postérieurs à une date (NB : la nouvelle version de ChatGPT est désormais
capable d'ingérer des informations externes). L'un des principaux avantages de l'approche RAG est que les connaissances peuvent être directement mises à jour, révisées et étendues. Le LLM utilisé dans
le générateur n'est alors sélectionné que pour ses capacités linguistiques et non pour les connaissances paramétriques contenues dans ses données. L'accès à l'information peut être
géré en amont en fonction du rôle et du profil de l'utilisateur, et la catégorie de connaissances peut être adaptée en fonction des connaissances du questionneur.
Lorsque la réponse n'est pas correcte, il est plus facile d'auditer le processus car les sources de connaissances peuvent être inspectées et interprétées. Les données qui ont été introduites dans
le générateur peuvent être affinées si nécessaire. Il est également plus facile de détecter si une question pourrait ne pas avoir de réponse en examinant le score de distance (ou score de similarité)
entre la demande et ce qui est traité. Si le score est inférieur à un seuil, le système peut facilement générer un avertissement indiquant qu'aucune information n'a été récupérée.
Cette vérification des réponses basée sur un seuil (TAV pour Threshold-based Answerable Verification) est également une bonne stratégie pour réduire le nombre de fausses réponses et d'hallucinations.
En fournissant une liste cohérente d'éléments dans l'invite, ce processus réduit les hallucinations, comme l'ont démontré Kurt Shuster et al. de
FAIR dans leur article "Retrieval Augmentation Reduces Hallucination in Conversation" (L'augmentation de la récupération réduit les hallucinations dans la conversation). Comme le notent Patrick Lewis et al. dans leur
article, la génération est plus factuelle et plus spécifique que les approches à livre fermé.
L'article "Dawn After the Dark : An Empirical Study on Factuality Hallucination in Large Language Model" de Junyi Li, Jie Chen
et al. montre que la récupération peut atténuer de manière significative les hallucinations dans les réponses LLM. Cette étude montre également que l'inclusion d'un plus grand nombre de documents dans
le contexte des LLM peut entraîner plus de bruit dans le processus de génération, ce qui conduit à un niveau plus élevé d'hallucinations. Le fait de ne fournir que les informations pertinentes réduit
la taille des données fournies au modèle, ce qui a également pour effet bénéfique de réduire les coûts d'inférence et d'accélérer le temps de réponse.
Il convient de noter que les modèles récents et plus efficaces, tels que le GPT-4o, sont moins sensibles aux défauts de pertinence des documents retrouvés. L'efficacité de la recherche a un impact plus important dans
le cas des petits modèles linguistiques (SLM pour Small Language Model), car ils acquièrent une connaissance limitée du monde et de la sémantique. Pour les SLM et en général, il est préférable
d'être précis dans le processus de recherche, car plus la pertinence entre le document extrait et la question est faible, plus le modèle est susceptible de générer des hallucinations.
L'utilisation de cette approche semble simple puisqu'elle consiste à donner les textes les plus pertinents dans une invite et à générer la réponse, et des kits de développement comme Langchain ou
LlamaIndex permettent à chacun de construire son système "en cinq lignes de code". Derrière cette simplicité
se cachent des défis qui restent complexes à relever pour passer à l'échelle de production. En fin de compte, le principal inconvénient de cette méthode est qu'elle cumule les problèmes. Chaque composant
du flux de travail a ses inconvénients et si l'un d'entre eux fonctionne mal, l'ensemble conduira à des défaillances potentielles du système.
L’approche RAG fonctionne comme suit :
- L'utilisateur pose une question. Cette question peut être complétée par l'historique des conversations et les informations contextuelles de l'utilisateur. Elle peut être contrôlée par des droits et des politiques d’accès à l’information.
- Cette question est traitée pour permettre une recherche des informations les plus utiles dans la base de données. Selon l'approche choisie, ce processus peut être plus ou moins complexe : d'une simple utilisation des techniques de vectorisation à un regroupement de techniques de classification, des améliorations de contexte et une décomposition suivant des règles et des modèles.
- Les N informations les plus pertinentes sont extraites des requêtes de la base de données. Il peut s'agir d'une recherche de similarité vectorielle dans le cas d'une base de données vectorielle ou d'une requête complexe utilisant le langage spécifique de la base de données.
- Une invite est créée sur la base des éléments récupérés et envoyée à un LM (Language Model) pour générer une réponse. Cette invite est spécifique au mécanisme d'apprentissage et complétée par des informations sur le traitement. Selon le cas, plusieurs messages-guides peuvent être créés.
- Cette réponse est ensuite envoyée à l'utilisateur, souvent en mode continu. Des liens vers les sources sont ajoutés pour permettre à l'utilisateur de vérifier les faits.
Les variations de RAG
Dans l'approche RAG, il est donc essentiel de trouver les bonnes informations pour générer les bonnes réponses et produire une synthèse cohérente. Le système ne sera jamais aussi bon que ses intrants, selon l'expression
bien connue des scientifiques des données : "Garbage in, garbage out" (déchets entrants, déchets sortants) ! La sélection d'une mauvaise information peut provoquer des hallucinations, notamment lorsque l'information est
erronée dans le contexte de la question, ou éloignée du sujet, ou lorsqu'elle introduit des problèmes d'ambiguïté tels que les homonymes (mots qui se prononcent et/ou s'écrivent de la même manière
mais n'ont pas le même sens).
Trouver la meilleure information, c'est pouvoir déterminer le(s) domaine(s) d'application, les concepts et les principales entités visées par la question. Pour ce faire, on recherche des informations extraites de la documentation
de l'entreprise. En résumé, il s'agit d'une problématique de recherche "standard" qui doit être complétée par des similitudes avec la question. L'époque où la recherche était basée
sur les mots-clés de la question est révolue.
La liste des techniques applicables à la recherche est longue. Des moteurs de recherche traditionnels basés sur des mots-clés comme ElasticSearch, à l'extraction de sous-graphes de connaissances, en passant par l'utilisation
de la recherche sémantique basée sur la proximité vectorielle, le choix le plus pertinent est ensuite compliqué. Chaque façon de faire a ses avantages et ses inconvénients, et choisir le bon est une question
de contexte, de budget et de délai.
Une liste non exhaustive de ces motifs RAG est donnée ci-dessous :
BaselineRAG : utilisation des techniques de découpage de l'information (chunking) et de vectorisation. La taille des informations extraites doit être idéale : ni trop courte, ce qui ferait perdre de la cohérence,
ni trop longue, ce qui rendrait la recherche trop difficile. Cette technique peut être améliorée par la mise en contexte des données. C'est l'approche historique initiale (aussi appelée RAG Natif ou Naïf) dans
laquelle les données vectorisées sous forme d'embeddings sont stockées dans une base de données vectorielle et les segments les plus pertinents sont extraits en utilisant un score de distance de similarité entre
la requête (initiale ou modifiée) et l'ensemble des segments extraits.
MetaRAG : utilisation du BaselineRAG comme base, améliorée par l'ajout de métadonnées liées. Cela permet de gérer des requêtes en contexte telles que "Résumer le chapitre X" ou "Quel
document a été écrit par le Dr. Who", ce qui n'est pas possible avec l'approche BaselineRAG si l'information n'est pas présente dans les segments. Le principe consiste à relier les segments extraits à des
informations contextuelles telles que l'auteur, les dates, les balises pertinentes, le nom du document, le numéro de chapitre, le segment avant et après. MetaRAG utilise l'extraction d'entités, la navigation entre les segments
et la classification légère pour séparer les requêtes liées à la manipulation des requêtes des questions directes.
TableRAG : cette technique combine l'extraction de schémas et de cellules de table de base de données pour ne présenter que les données pertinentes aux LM, réduisant ainsi la taille des données
d'entrée tout en préservant les informations nécessaires. TableRAG utilise l'expansion des requêtes, la troncature en fonction de la fréquence et l'analyse de la complexité des jetons pour optimiser la sélection
des données, ce qui permet d'obtenir des taux élevés de rappel et de précision avec un coût de calcul réduit. Dans l'étude "TableRAG : Million-Token Table Understanding with Language Models"
publiée le 4 octobre 2024, comparée à des ensembles de données comme ArcadeQA, TableRAG surpasse les méthodes existantes, démontrant son potentiel à établir de nouvelles normes pour le raisonnement
basé sur les tableaux dans l'analyse de données à grande échelle.
StructRAG : il s'agit d'un intermédiaire entre le TableRAG et le GraphRAG. La différence réside dans le fait que le système crée lui-même les différents tableaux de connaissances en extrayant
des documents des informations sur les attributs spécifiques.
GraphRAG : il s'agit d'un système qui structure l'information sous la forme de triples SPO (Subject, Predicate, Object) et les stocke dans une base de données de graphes de connaissances. Cette structure permet une recherche
précise des informations, qui sont de facto interconnectées. GraphRAG utilise des techniques de conversion de texte en requête pour transformer les requêtes en langage naturel en requêtes spécifiques dans le
graphe, ce qui permet au système d'identifier et d'extraire les connaissances les plus pertinentes. Cette approche permet de gérer des requêtes complexes nécessitant l'utilisation de relations entre les données. Elle
améliore la capacité du système à fournir des réponses précises et adaptées au contexte aux données de l'entreprise.
MMRAG : le RAG multimodal exploite toutes les parties informationnelles non-« classiques » des documents, incluant les images, les graphiques, les tableaux, les photos et les diagrammes. Cette approche a besoin d'un LLM multimodal
(ou d'un modèle de langage visuel) et le défi final consiste à introduire les médias les plus pertinents dans l'invite pour permettre au VLM/LLM d'extraire des questions et d'y répondre sur la base des informations
fournies par les médias. Il existe plusieurs approches possibles pour la partie ingestion, comme l'utilisation d'un modèle VLM / légende d'image pour décrire les détails de l'image et traiter le texte "comme d'habitude",
ou la vectorisation de l'ensemble de l'image.
Parfois, ces systèmes auront besoin d'être affinés pour améliorer leur précision, mais la plupart du temps avec de faibles améliorations à la fin. Parfois, il est important d'injecter directement certains
domaines métiers dans le(s) modèle(s) sur les données d'entrée afin d'apprendre le vocabulaire spécifique.
Même pour la recherche dans l'espace sémantique, le choix du meilleur calcul de distance est un défi entre le produit de points, la distance euclidienne, la similarité en cosinus ou même un SVM à l'ancienne.
L'un des inconvénients de la recherche sémantique de proximité est que, dans les textes comportant de longues phrases, la segmentation peut poser des problèmes de cohérence. Certains textes doivent être découpés
différemment de l'approche classique de 100 caractères (environ une ligne / 1,5 ligne). Si la distance entre deux entités est trop grande dans une même phrase, l'intégration ne pourra pas les relier. On parle alors
de limitation du nombre de clauses. Si la taille de ce que l'on vectorise est trop grande (longue phrase), on se retrouve avec un vecteur qui est la synthèse du bloc, et qui perd les petites informations. On pourrait vectoriser plusieurs niveaux
de blocs, mais sur de nombreux documents, cela pourrait poser des problèmes de performance. Il y a le même problème si trop de concepts se trouvent dans la même phrase. La portée sémantique se situe au niveau
du segment, ce qui peut poser des problèmes pour des textes juridiques nécessitant une cohérence plus complexe.
La segmentation signifie que la résolution des coréférences n'est plus possible puisque les liens entre les phrases ou le contexte (chapitre, note de bas de page) sont perdus lors de cette opération de découpage. Les
résolutions d'anaphores sont rarement effectuées en tant qu'opération de prétraitement, bien que les LLM soient très efficaces dans cette aptitude. Les liens entre les données, notamment dans les textes réglementaires,
sont perdus lors des opérations, car il n'y a pas de gestion de l'information liée. Seules les proximités entre segments sont gérées, pas les liens contextuels.
L'intégration a du mal à saisir les ambiguïtés contextuelles. Par exemple : "Elle a remarqué que le ton n’était pas bon" n'a pas la même signification s'il s'agit de musique ou d’appréciation
d’une manière de parler. L'intégration rencontre également des difficultés avec les figures de style. Quelle pourrait être la réponse à la question "Que mangent les humains ?" si l'on trouve dans
un texte : "Mon cousin a dévoré son livre en une journée".