La génération augmentée de récupération (RAG) est une technique utilisée pour « ancrer » de grands modèles de langage (LLM) avec des sources de données spécifiques, qui n'ont souvent pas été incluses dans l'entraînement original des modèles. Les trois étapes du RAG sont la récupération d'une source spécifiée, l'augmentation de l'invite avec le contexte récupéré de la source, puis la génération en utilisant le modèle et l'invite augmentée. Dans un exercice de dogfooding (méthode qui consiste pour une entreprise à utiliser ses propres produits afin de les tester et de se confronter directement à leurs qualités et défauts), nous avons demandé au LLM GPT-4 « Qu'est-ce que la génération augmentée par récupération ? » en utilisant son plug-in Browse, qui est une implémentation de la génération augmentée par récupération.

Voici ce que GPT-4 m'a finalement répondu, après que je lui ai demandé de régénérer sa réponse :

-------------------------

Le Retrieval Augmented Generation (RAG) est un cadre d'IA qui a un impact significatif dans le domaine du traitement du langage naturel (NLP). Il est conçu pour améliorer la précision et la richesse du contenu produit par les modèles de langage. Voici une synthèse des points clés du RAG provenant de diverses sources :

- RAG est un système qui extrait des faits d'une base de connaissances externe afin de fournir une base aux grands modèles de langage (LLM). Cette base garantit que les informations générées par les LLM sont basées sur des données précises et actuelles, ce qui est particulièrement important étant donné que les LLM peuvent parfois produire des résultats incohérents【5†source】.

- Le cadre fonctionne comme un modèle hybride, intégrant à la fois des modèles de recherche et des modèles génératifs. Cette intégration permet à RAG de produire des textes qui sont non seulement précis sur le plan contextuel, mais aussi riche en informations. La capacité de RAG à puiser dans de vastes bases de données d'informations lui permet d'apporter un contenu contextuel pertinent et détaillé au processus génératif【6†source】.

- RAG répond à une limitation des modèles linguistiques fondamentaux, qui sont généralement formés hors ligne sur de vastes corpus de domaines et ne sont pas mis à jour avec de nouvelles informations après la formation. Cela les rend moins efficaces pour les tâches nécessitant des connaissances spécifiques à un domaine. En revanche, RAG peut accéder aux données les plus récentes, ce qui le rend plus adaptable et capable de bien fonctionner dans des applications spécifiques à un domaine【7†source】.

- Par rapport aux modèles traditionnels de génération de texte, RAG a montré des avantages remarquables et a atteint des performances de pointe dans de nombreuses tâches de NLP. Sa capacité à augmenter le processus de génération avec des informations récupérées en fait un outil puissant pour créer des textes informatifs de haute qualité【8†source】.

Les capacités combinées de RAG à récupérer et à générer du texte en font un outil innovant dans le domaine du NLP, améliorant la pertinence et la qualité des résultats des modèles de langage.

----------------------------

À l'exception de quelques points exagérés, cette réponse est convenable. Elle ne mentionne pas le fait que RAG a été créé par Facebook (aujourd'hui Meta) AI Research. Nous avons obtenu d'assez bons résultats en utilisant des implémentations RAG dans les cas où les LLM non améliorés manquent d'informations actuelles, et en particulier dans les cas où le LLM de fondation déraille et commence à halluciner ses propres faits. D'un autre côté, nous avons vu des LLM halluciner même lorsqu'ils utilisaient RAG. L'utilisation de sources d'information externes (la partie recherche de RAG) ne signifie pas seulement effectuer une recherche sur le web. Il peut également s'agir de fournir ses propres documents au LLM ou de l'orienter vers une documentation web spécifique (sans recherche supplémentaire).

Les problèmes : hallucinations du LLM et contexte limité

L'entraînement des LLM prend souvent beaucoup de temps et fait appel à des ressources coûteuses, parfois des mois d'exécution en utilisant des dizaines de serveurs équipés d’accélérateurs Nvidia H100. Il n'est pas possible d'actualiser complètement les LLM en les réentraînant à partir de zéro, bien que le processus moins coûteux d'ajustement fin du modèle de base sur des données plus récentes puisse être utile. Le réglage fin présente parfois des inconvénients, car il peut réduire les fonctionnalités présentes dans le modèle de base (telles que les requêtes générales bien gérées par Llama) lors de l'ajout de nouvelles fonctionnalités par le réglage fin (telles que la génération de code ajoutée à Code Llama).

Que se passe-t-il si vous demandez à un LLM qui a été formé sur des données qui se sont terminées en 2022 quelque chose qui s'est produit en 2023 ? Il y a deux possibilités : soit il se rendra compte qu'il ne sait pas, soit il ne le fera pas. Dans le premier cas, il vous informera généralement sur ses données d'entraînement, par exemple : « Lors de ma dernière mise à jour en janvier 2022, je disposais d'informations sur .... » Dans le second cas, il essaiera de vous donner une réponse basée sur des données plus anciennes, similaires, mais non pertinentes, ou il pourrait carrément inventer des choses (halluciner).

Pour éviter de déclencher des hallucinations LLM, il est parfois utile de mentionner la date d'un événement ou une URL pertinente dans votre question. Vous pouvez également fournir un document pertinent, mais les longs documents (qu'il s'agisse du texte ou de l'URL) ne fonctionnent que jusqu'à ce que la limite de contexte du LLM soit atteinte, après quoi il s'arrête de lire. D'ailleurs, les limites de contexte varient d'un modèle à l'autre : Les modèles de Claude offrent par exemple une fenêtre de 200 000 tokens et Gemini Pro de Google revendique jusqu'à 1 million de tokens.

La solution : Fonder le LLM sur des faits

Comme vous pouvez le deviner d'après le titre et le début de cet article, l'une des réponses à ces deux problèmes est la génération augmentée par la recherche. À un niveau élevé, la RAG fonctionne en combinant une recherche sur Internet ou dans des documents avec un modèle de langage, de manière à contourner les problèmes que vous rencontreriez en essayant de réaliser les deux étapes manuellement, par exemple le problème de la sortie de la recherche qui dépasse la limite de contexte du modèle de langage.

La première étape du RAG consiste à utiliser la requête pour une recherche sur Internet, dans un document ou dans une base de données, et à vectoriser l'information source dans une forme dense à haute dimension, généralement en générant un vecteur d'intégration et en le stockant dans une base de données vectorielle. C'est la phase de recherche.

Vous pouvez ensuite vectoriser la requête elle-même et utiliser FAISS (Facebook AI Similarity Search) ou une autre recherche de similarité, généralement en utilisant une métrique de cosinus pour la similarité, par rapport à la base de données vectorielle, et l'utiliser pour extraire les parties les plus pertinentes (ou les K éléments les plus importants) de l'information source et les présenter au LLM en même temps que le texte de la requête. C'est la phase d'augmentation.

Enfin, le LLM, appelé modèle seq2seq dans l'article original sur l'IA de Facebook, génère une réponse. C'est la phase de génération.

Tout cela semble compliqué, mais il ne s'agit en fait que de cinq lignes de Python si vous utilisez le framework LangChain pour l'orchestration :

from langchain.document_loaders import WebBaseLoader
from langchain.indexes import VectorstoreIndexCreator
loader = WebBaseLoader("https://www.promptingguide.ai/techniques/rag")
index = VectorstoreIndexCreator().from_loaders([loader])
index.query("What is RAG?")

Ainsi, RAG s'attaque à deux problèmes liés aux grands modèles de langage : les ensembles d'entraînement périmés et les documents de référence qui dépassent les fenêtres contextuelles des MLD. En combinant la recherche d'informations actuelles, la vectorisation, l'augmentation des informations à l'aide de la recherche de similarités vectorielles et l'IA générative, vous pouvez obtenir des résultats plus actuels, plus concis et plus fondés que si vous utilisiez uniquement la recherche ou l'IA générative.