{"notes":[{"id":"retrieval-augmented-generation/self-rag","category":"retrieval-augmented-generation","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Self-RAG","subtitle":"Trois fois par jour, je m'examine","author":"Z. Yuan","paperDate":"2023-10-17","publishedOn":"2026-06-21","world":"external/self-rag","paperTitle":"Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection","paperUrl":"https://arxiv.org/abs/2310.11511","bibliography":{"title":"Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection","authors":["Akari Asai","Zeqiu Wu","Yizhong Wang","Avirup Sil","Hannaneh Hajishirzi"],"url":"https://arxiv.org/abs/2310.11511","pdfUrl":"https://arxiv.org/pdf/2310.11511v1","codeUrl":null,"preprint":{"id":"2310.11511","submittedOn":"2023-10-17","url":"https://arxiv.org/abs/2310.11511"},"publication":{"venue":"ICLR","year":2024,"kind":"conference","url":"https://proceedings.iclr.cc/paper_files/paper/2024/hash/25f7be9694d7b32d5cc670927b8091e1-Abstract-Conference.html"},"citation":"@misc{retrievalaugmentedgenerationselfrag2023,\n  title = {{Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection}},\n  author = {Akari Asai and Zeqiu Wu and Yizhong Wang and Avirup Sil and Hannaneh Hajishirzi},\n  year = {2023},\n  eprint = {2310.11511},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2310.11511}\n}\n","citationPath":"/content/papers/citations/retrieval-augmented-generation/self-rag.7e4f68374820.bib"},"thumbnail":{"src":"/content/papers/assets/a967fd9c8d63065a0369d6a07be24dc71bb92dab181e5083c3f13ce21c92cabb.png","width":1122,"height":622},"locale":"fr","path":"/content/papers/fr/retrieval-augmented-generation/self-rag.f3c64a9f8845.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"les-tokens-de-réflexion","text":"Les tokens de réflexion","depth":3},{"id":"linférence-étape-par-étape","text":"L'inférence, étape par étape","depth":3},{"id":"comment-calculer-le-score-","text":"Comment calculer le score ?","depth":3},{"id":"comment-apprendre-au-modèle-à-se-noter-","text":"Comment apprendre au modèle à se noter ?","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"protocole-expérimental","text":"Protocole expérimental","depth":3},{"id":"principaux-résultats","text":"Principaux résultats","depth":3},{"id":"quels-choix-de-conception-comptent-","text":"Quels choix de conception comptent ?","depth":3},{"id":"autres-observations","text":"Autres observations","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[]}],"text":"En 2023, la recette standard du RAG était déjà bien installée : quelle que soit la demande, récupérer les $K$ premiers documents, les placer avant la question, puis laisser le modèle de langage répondre.\n\nCette recette pose trois problèmes souvent négligés.\n\nD'abord, **certaines demandes n'exigent aucune recherche**. Si l'on demande au modèle une rédaction sur « mes vacances d'été inoubliables », aller chercher cinq documents dans une base risque surtout de l'encombrer.\n\nEnsuite, **les documents récupérés peuvent être hors sujet**. Pour « D'où viennent les noms des États américains ? », le moteur peut renvoyer un article sur « les prénoms de bébé les plus populaires au Texas », parce qu'il contient à la fois des noms et un État.\n\nEnfin, **même avec des documents pertinents, le modèle peut s'en écarter**. Sans entraînement explicite à respecter leur contenu, il peut les citer tout en ajoutant des affirmations absentes, voire contradictoires.\n\nCet article de l'université de Washington, de l'Allen Institute for AI (AI2) et d'IBM Research a ensuite été publié à ICLR 2024. Cette note s'appuie sur sa version arXiv v1. L'idée des auteurs : laisser le modèle décider quand chercher, évaluer ce qu'il trouve, puis vérifier ce qu'il vient d'écrire.\n\n## Définir le problème\n\nRegardons la première figure de l'article : le RAG traditionnel à gauche, Self-RAG à droite.\n\n[![Comparaison entre RAG traditionnel et Self-RAG : recherche systématique de K documents à gauche ; recherche à la demande, génération parallèle et sélection par tokens de réflexion à droite](/content/papers/assets/a967fd9c8d63065a0369d6a07be24dc71bb92dab181e5083c3f13ce21c92cabb.png)](/content/papers/assets/a967fd9c8d63065a0369d6a07be24dc71bb92dab181e5083c3f13ce21c92cabb.png)\n\n*Figure 1 de l'article, extraite de la [**page 2 du PDF v1**](https://arxiv.org/pdf/2310.11511v1#page=2), CC BY 4.0. Le RAG traditionnel est à gauche et Self-RAG à droite ; la dernière ligne montre une tâche de rédaction sans besoin de recherche.*\n\nÀ gauche, la question porte sur l'origine des noms des États américains. Le moteur récupère trois documents : le premier indique que 11 des 50 États portent le nom d'une personne ; le deuxième parle des prénoms populaires au Texas ; le troisième explique que la Californie doit son nom à une île fictive dans un roman espagnol.\n\nLes trois documents sont transmis ensemble au modèle. Sa réponse affirme que « la Californie a été nommée d'après Christophe Colomb », avec un soulignement rouge **Contradictory** : cela contredit précisément le troisième document. Une autre phrase, « le Texas et l'Utah portent le nom de tribus autochtones », reçoit l'étiquette **No information in passages** : aucun des trois documents ne le mentionne.\n\nLa dernière ligne est encore plus parlante : même pour une rédaction sur les vacances d'été, le RAG traditionnel récupère trois documents.\n\nLa question des auteurs est donc la suivante :\n\n- **Un modèle de langage peut-il juger lui-même quand chercher, si les résultats sont utiles et si ce qu'il écrit est étayé ?**\n\n## Résoudre le problème\n\n### Les tokens de réflexion\n\nLes auteurs ajoutent au vocabulaire du modèle un ensemble de tokens spéciaux, les **tokens de réflexion** (*reflection tokens*). Pendant qu'il rédige, le modèle produit aussi ces marqueurs aux endroits appropriés, comme s'il se notait au fil de son texte.\n\nIl y en a quatre types :\n\n| Token | Éléments évalués | Valeurs possibles | Rôle |\n| --- | --- | --- | --- |\n| Retrieve | Question et contenu déjà écrit | yes／no／continue | Faut-il chercher maintenant ? |\n| IsRel | Question, document | relevant／irrelevant | Ce document aide-t-il à répondre ? |\n| IsSup | Question, document, segment produit | fully／partially／no support | Le document étaye-t-il ce segment ? |\n| IsUse | Question, réponse | 5／4／3／2／1 | La réponse est-elle utile dans son ensemble ? |\n\n*D'après la Table 1 de l'article.*\n\nLes trois derniers sont les **tokens de critique** (*critique tokens*), chargés de l'évaluation. Retrieve décide de lancer ou non une recherche.\n\n### L'inférence, étape par étape\n\nReprenons la même question, cette fois dans la moitié droite de la figure.\n\nSelf-RAG génère par **segments**. Dans les expériences de l'article, un segment correspond à une phrase.\n\n**Première étape : faut-il chercher ?** Le modèle écrit d'abord : « Les noms des États américains ont diverses origines. » Puis il produit un token `Retrieve`, juge qu'il lui faut maintenant des éléments factuels et appelle le moteur de recherche, qui renvoie trois documents.\n\n**Deuxième étape : générer en parallèle.** Le modèle joint **séparément** chacun des trois documents à la question. Il produit trois phrases candidates en parallèle et attribue des tokens de critique à chaque document et à chaque phrase :\n\n- Premier document : `Relevant`, puis « 11 des 50 États portent le nom d'une personne », avec `Supported`.\n- Deuxième document : `Irrelevant`, puis « Le Texas porte le nom d'une tribu autochtone », une phrase sans appui dans ce document.\n- Troisième document : `Relevant`, puis « Le nom de la Californie vient du roman du XVIe siècle Las Sergas de Esplandián », avec `Partially`.\n\n**Troisième étape : noter et choisir le meilleur candidat.** La phrase issue du premier document est pertinente et entièrement étayée : elle arrive en tête. Celle du troisième arrive ensuite, puis celle du deuxième. Le modèle retient la première et continue la rédaction, avec une nouvelle recherche si nécessaire.\n\nPour la rédaction de vacances, tout en bas, le modèle produit immédiatement `No Retrieval`, puis écrit comme un modèle de langage ordinaire.\n\n### Comment calculer le score ?\n\nLes auteurs formalisent le classement de la troisième étape par un score. Pour chaque segment candidat $y_t$ associé au document $d$ :\n\n$$\nf(y_t,d)=p(y_t\\mid x,d,y_{<t})+\\mathcal{S}(\\text{Critique})\n$$\n\nLe premier terme est la probabilité de générer cette phrase. Le second est une somme pondérée des tokens de critique :\n\n$$\n\\mathcal{S}(\\text{Critique})=\\sum_{G\\in\\{\\text{IsRel},\\,\\text{IsSup},\\,\\text{IsUse}\\}} w^G\\, s^G_t\n$$\n\n$s^G_t$ est la probabilité de **la valeur la plus souhaitable** pour cette catégorie : `Relevant` pour IsRel, `fully supported` pour IsSup, `5` pour IsUse, avec normalisation entre les tokens de la même catégorie.\n\nCalculons un exemple avec des valeurs hypothétiques. Les poids par défaut de l'article sont $w^{\\text{IsRel}}=1.0$, $w^{\\text{IsSup}}=1.0$ et $w^{\\text{IsUse}}=0.5$. Supposons les probabilités suivantes pour deux candidats :\n\n| Candidat | IsRel = Relevant | IsSup = fully | IsUse = 5 |\n| --- | ---: | ---: | ---: |\n| Avec le premier document | 0,90 | 0,80 | 0,60 |\n| Avec le troisième document | 0,85 | 0,30 | 0,70 |\n\nLes scores de critique valent alors :\n\n$$\n\\begin{aligned}\n\\mathcal{S}_1 &= 1.0\\times0.90+1.0\\times0.80+0.5\\times0.60=2.00\\\\\n\\mathcal{S}_3 &= 1.0\\times0.85+1.0\\times0.30+0.5\\times0.70=1.50\n\\end{aligned}\n$$\n\nSi les probabilités de génération des deux phrases sont proches, le candidat associé au premier document l'emporte.\n\nOn peut régler ces poids à l'inférence, **sans réentraîner le modèle**. Si l'application exige particulièrement que chaque phrase soit sourcée, porter $w^{\\text{IsSup}}$ à 2,0 fait passer l'écart de 0,5 à 1,0 : 2,80 contre 1,80.\n\nOn peut aussi imposer une règle stricte : tout candidat qui produit `IsSup = No support` est éliminé.\n\nPour décider de chercher, on peut laisser le modèle générer directement `Retrieve=Yes`, ou fixer un seuil : la recherche démarre lorsque la probabilité normalisée de `Retrieve=Yes` dépasse $\\delta$. Plus le seuil est bas, plus les recherches sont fréquentes.\n\nEn pratique, les auteurs utilisent une recherche en faisceau de largeur 2 au niveau des segments et un décodage glouton pour les tokens à l'intérieur de chaque segment.\n\n\n> [!NOTE]\n> \n> Les probabilités de critique ci-dessus sont des valeurs inventées dans cette note pour expliquer les formules. Les poids 1,0, 1,0 et 0,5 ainsi que la largeur de faisceau 2 sont, eux, les réglages par défaut de l'article.\n\n\n### Comment apprendre au modèle à se noter ?\n\nÀ l'inférence, cela paraît presque magique : le modèle juge et attribue ses propres scores. D'où viennent ces capacités ?\n\nLes auteurs procèdent en deux étapes.\n\n**Première étape : entraîner un modèle critique $\\mathcal{C}$.** Annoter manuellement chaque phrase avec des tokens de réflexion serait trop coûteux. Les auteurs demandent donc à GPT-4 de le faire. Ils rédigent une instruction par catégorie, par exemple : « Étant donnée une instruction, déterminez si rechercher des documents externes sur Internet aiderait à produire une meilleure réponse », puis ajoutent quelques démonstrations. Ils recueillent entre 4 000 et 20 000 exemples par catégorie et ajustent un Llama 2-7B. Le modèle critique obtenu dépasse 90 % d'accord avec GPT-4 pour la plupart des catégories, selon les auteurs.\n\n**Deuxième étape : enrichir les données avec le modèle critique, puis entraîner le générateur $\\mathcal{M}$.** On prend 150 000 paires instruction-réponse, parcourues phrase par phrase par le critique. Aux endroits où une recherche est utile, on insère `Retrieve` et les documents récupérés. Chaque document est suivi d'IsRel, chaque phrase d'IsSup, et la réponse complète se termine par IsUse.\n\nLes données ainsi préparées ressemblent à ceci, dans une version simplifiée de la Figure 2 :\n\n```text\nInput: How did US states get their names?\n\nOutput: [Retrieve]<p>Of the fifty states, eleven are named after an individual person</p>\n        [Relevant] 11 of 50 states' names come from person. [Supported]\n        [Retrieve]<p>LOUISIANA: Named in honor of Louis XIV of France.</p>\n        [Relevant] For instance, Louisiana was named after King Louis XIV, and\n        Georgia was named after King George II. [Partially] [Utility:5]\n```\n\nLa suite est un entraînement de modèle de langage tout à fait classique : prédire le token suivant. Une seule différence : les documents récupérés, entre `<p>` et `</p>`, sont exclus de la perte. C'est le moteur de recherche qui les fournit ; le modèle n'a pas à apprendre à les produire.\n\nUne fois entraîné, le générateur produit lui-même ces tokens. Il n'a plus besoin d'appeler le modèle critique à l'inférence.\n\nLes auteurs comparent aussi ce procédé au RLHF. Pendant un entraînement PPO, il faut appeler continuellement le modèle de récompense. Self-RAG inscrit les critiques à l'avance dans les données, puis utilise l'objectif standard d'un modèle de langage, pour un coût nettement moindre.\n\n\n> [!TIP]\n> \n> **Les tutoriels « Self-RAG » suivent parfois une autre implémentation**\n> \n> De nombreux tutoriels, comme cet [**exemple Self-RAG archivé de LangGraph**](https://github.com/langchain-ai/langgraph/blob/fbcb8a911b626b4373fd4aff9624124e9532987f/examples/rag/langgraph_self_rag.ipynb), reprennent les décisions de l'article : pertinence des documents, appui factuel de la réponse, adéquation à la question.\n> \n> Leur mise en œuvre diffère toutefois. Ils appellent séparément un LLM et lui demandent par prompt de répondre yes ou no. Le résultat détermine s'il faut rechercher à nouveau, reformuler la question ou régénérer. Dans l'article, ces jugements sont **appris sous forme de tokens émis par le générateur lui-même**, au cours de la même génération ; leurs probabilités servent aussi à pondérer le classement.\n> \n> Les deux approches sont utilisables. Lorsqu'on rencontre « Self-RAG », mieux vaut identifier laquelle est décrite.\n\n\n## Discussion\n\n### Protocole expérimental\n\nToutes les évaluations sont zero-shot : une description de la tâche, sans démonstration.\n\n- **Choix fermés** : PubHealth, pour la vérification de faits de santé publique, et ARC-Challenge, pour des questions de sciences ; mesure de l'exactitude.\n- **Réponses courtes** : le sous-ensemble de longue traîne de PopQA, soit 1 399 questions portant sur des entités peu connues dont les pages Wikipédia reçoivent moins de 100 visites mensuelles ; et 11 313 questions de TriviaQA-unfiltered. La présence de la réponse de référence dans la sortie suffit à valider la réponse.\n- **Génération longue** : FactScore mesure la factualité des biographies ; ASQA évalue les réponses longues, avec notamment la précision et le rappel des citations.\n\nLes générateurs sont les versions 7B et 13B de Llama 2. La recherche utilise Contriever-MS MARCO tel quel et récupère par défaut les cinq premiers documents. Pour les biographies et les questions-réponses en domaine ouvert, les auteurs ajoutent les cinq premiers résultats d'un moteur de recherche web.\n\n### Principaux résultats\n\nLa Table 2 de l'article compare de nombreux modèles. Voici quelques lignes particulièrement instructives :\n\n| Modèle | PopQA | PubHealth | FactScore des biographies | Précision des citations ASQA |\n| --- | ---: | ---: | ---: | ---: |\n| ChatGPT | 29,3 | 70,1 | 71,8 | — |\n| ChatGPT + recherche | 50,8 | 54,7 | — | 65,1 |\n| Llama2-chat 13B + recherche | 51,8 | 52,1 | 79,9 | 19,8 |\n| Llama2-FT 7B + recherche | 48,7 | 64,3 | 78,2 | 5,0 |\n| **Self-RAG 7B** | 54,9 | 72,4 | 81,2 | 66,9 |\n| **Self-RAG 13B** | 55,8 | 74,5 | 80,2 | 70,3 |\n\n*D'après la Table 2 de l'article.*\n\nPlusieurs points méritent qu'on s'y arrête.\n\n**L'utilité de la recherche dépend de la tâche.** Avec la recherche, ChatGPT passe de 29,3 à 50,8 sur PopQA : ces connaissances rares gagnent à être recherchées. Sur PubHealth, il recule au contraire de 70,1 à 54,7. On retrouve le premier problème évoqué au début : imposer une recherche quand elle est inutile peut dégrader la réponse.\n\n**Le plus grand écart concerne la précision des citations.** Les références RAG ordinaires se situent généralement entre quelques points et une vingtaine de pour cent. Self-RAG 13B atteint 70,3, au-dessus même des 65,1 de ChatGPT avec recherche. Cette métrique vérifie si une phrase accompagnée d'une citation est entièrement étayée par le document cité.\n\n**Les données d'entraînement n'expliquent pas tout.** Llama2-FT 7B utilise exactement les mêmes 150 000 instructions que Self-RAG, mais sans tokens de réflexion ni documents récupérés ; la recherche est ajoutée au moment du test. À l'exception de str-em et ROUGE sur ASQA, légèrement supérieurs — 31,0 contre 30,0 et 35,8 contre 35,7 —, il reste derrière Self-RAG 7B sur tous les autres indicateurs.\n\nSelf-RAG ne remporte toutefois pas toutes les épreuves. ChatGPT atteint 74,3 sur TriviaQA et 75,3 sur ARC-Challenge, au-dessus des 69,3 et 73,1 de Self-RAG 13B. ChatGPT avec recherche garde aussi l'avantage sur l'exactitude str-em et le rappel des citations d'ASQA.\n\n### Quels choix de conception comptent ?\n\n[![Analyses de Self-RAG : (a) ablations à l'entraînement et à l'inférence ; (b) effet du poids IsSup sur la précision des citations et MAUVE ; (c) effet du seuil de recherche sur l'exactitude et la fréquence de recherche](/content/papers/assets/ed98a0625c59ca4eaa3a682d3fddfda9963f66ff78e56b8a320597c846caf562.png)](/content/papers/assets/ed98a0625c59ca4eaa3a682d3fddfda9963f66ff78e56b8a320597c846caf562.png)\n\n*Figure 3 de l'article, extraite de la [**page 9 du PDF v1**](https://arxiv.org/pdf/2310.11511v1#page=9), CC BY 4.0. (a) Ablations ; (b) réglage des poids à l'inférence ; (c) réglage du seuil de recherche.*\n\n**(a) Ablations.** Pour limiter le coût, ces expériences utilisent un modèle 7B entraîné sur 50 000 exemples, évalué sur PopQA (PQA), PubHealth (Med) et ASQA (AS).\n\n- Retirer le modèle critique à l'entraînement — No Critic, soit un document récupéré joint systématiquement à chaque exemple, sans token de réflexion — fait passer ASQA de 32,1 à 18,1.\n- Utiliser systématiquement le premier document à l'inférence — Retrieve top1, la variante la plus proche du RAG traditionnel — fait passer PopQA de 45,5 à 41,8, et ASQA à 28,6.\n- Supprimer toute recherche — No retrieval — ramène PopQA à 24,7. PubHealth reste cependant à 73,0, presque sans changement.\n\nCe dernier point rejoint les résultats principaux : PopQA bénéficie fortement de la recherche ; PubHealth en a peu besoin.\n\n**(b) Réglage du poids IsSup.** L'axe horizontal est $w^{\\text{IsSup}}$. Quand ce poids augmente, la précision des citations progresse, mais MAUVE, l'indicateur de fluidité, baisse. Selon les auteurs, les phrases plus longues et plus fluides introduisent plus facilement des éléments que les citations n'étayent pas entièrement. C'est un exemple concret de réglage du comportement sans réentraînement.\n\n**(c) Réglage du seuil de recherche.** Un seuil plus élevé réduit la fréquence des recherches. Sur PubHealth, rechercher moins change peu l'exactitude ; sur PopQA, elle recule nettement.\n\n### Autres observations\n\n- **Davantage de données d'entraînement améliore les résultats.** Passer de 5 000 à 150 000 exemples apporte des gains particulièrement nets sur PopQA et ASQA. Les auteurs pensent qu'une extension supplémentaire pourrait encore aider.\n- **Petite évaluation humaine.** Les auteurs vérifient manuellement 50 sorties de PopQA et 50 biographies. L'accord entre les prédictions IsRel et les jugements humains est respectivement de 95,0 % et 90,0 %. Pour IsSup, il est de 90,0 % et 85,0 %.\n- **Coût d'inférence.** Chaque recherche exige de traiter plusieurs documents en parallèle, de produire plusieurs candidats, puis d'effectuer une recherche en faisceau par segment. Les auteurs utilisent vLLM pour accélérer le traitement, mais ne publient pas de comparaison de latence ou de coût avec le RAG traditionnel. Il faudra les mesurer pour un déploiement réel.\n\n## Conclusion\n\nSelf-RAG rend au modèle plusieurs décisions habituellement figées dans un pipeline RAG :\n\n1. **Faut-il chercher ?** `Retrieve` déclenche la recherche à la demande ; une rédaction peut s'en passer.\n2. **Quel document est utile ?** `IsRel` évalue chaque document récupéré.\n3. **Le texte est-il étayé ?** `IsSup` vérifie l'appui documentaire de chaque phrase.\n4. **La réponse est-elle bonne dans son ensemble ?** `IsUse` évalue sa qualité globale.\n\nGPT-4 annote ces tokens, un modèle critique les apprend par distillation, puis les insère dans les données d'entraînement. Le générateur apprend enfin à les produire lui-même. À l'inférence, leurs probabilités forment un score dont les poids permettent de régler les compromis sans réentraîner le modèle.\n\nDans les expériences de l'article, les Self-RAG 7B et 13B dépassent les références ChatGPT et Llama2-chat pour lesquelles des chiffres sont disponibles dans le tableau sur PopQA, PubHealth, les biographies et la précision des citations ASQA. ChatGPT conserve l'avantage sur des épreuves comme TriviaQA et ARC-Challenge.\n\nRécupérer systématiquement les $K$ premiers documents a longtemps été le réglage par défaut du RAG. Cet article rappelle que décider quand chercher et quoi exploiter exige déjà un jugement.\n","imageSizes":{"/content/papers/assets/a967fd9c8d63065a0369d6a07be24dc71bb92dab181e5083c3f13ce21c92cabb.png":{"width":1122,"height":622},"/content/papers/assets/ed98a0625c59ca4eaa3a682d3fddfda9963f66ff78e56b8a320597c846caf562.png":{"width":1122,"height":447}}}
