{"notes":[{"id":"retrieval-augmented-generation/self-rag","category":"retrieval-augmented-generation","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Self-RAG","subtitle":"吾、日に三たび吾が身を省みる","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":"ja","path":"/content/papers/ja/retrieval-augmented-generation/self-rag.180844acea3d.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"内省トークン","text":"内省トークン","depth":3},{"id":"推論を一歩ずつ見る","text":"推論を一歩ずつ見る","depth":3},{"id":"スコアの計算","text":"スコアの計算","depth":3},{"id":"採点の仕方をどう教えるのか","text":"採点の仕方をどう教えるのか","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"実験設定","text":"実験設定","depth":3},{"id":"主な結果","text":"主な結果","depth":3},{"id":"どの設計が効いたのか","text":"どの設計が効いたのか","depth":3},{"id":"その他の観察","text":"その他の観察","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[]}],"text":"2023年には、RAGの標準的な手順はかなり固まっていました。何を聞かれても上位$K$件の文書を検索し、質問の前に貼り付けて言語モデルへ渡します。\n\nこの方法には、見落とされがちな問題が三つあります。\n\n第一に、**そもそも調べる必要のない質問があります**。「一番思い出に残った夏休み」という作文を書かせるのに、データベースから5件取ってきても邪魔になるだけです。\n\n第二に、**取れた文書が関連しているとは限りません**。「米国の各州名の由来」を聞いているのに、「テキサス州で人気の赤ちゃんの名前」が見つかるかもしれません。どちらにも「名前」と「州」が出てくるからです。\n\n第三に、**関連文書があっても、それに沿って書くとは限りません**。文書に従うよう明示的に学習していなければ、引用しながら、その文書にないことや反対のことを書く場合があります。\n\nワシントン大学、Allen Institute for AI（AI2）、IBM Researchによるこの論文は、後にICLR 2024で発表されました。本稿はarXiv v1に基づきます。提案は、調べるかどうかをモデル自身が決め、戻った資料を評価し、書いた後にも自分で確認することです。\n\n## 問題の定義\n\n最初の図を見ます。左が従来のRAG、右がSelf-RAGです。\n\n[![従来のRAGとSelf-RAGの比較：左は固定のK件を検索して生成、右は必要に応じて検索し、並列生成と内省トークンで最良の断片を選ぶ](/content/papers/assets/a967fd9c8d63065a0369d6a07be24dc71bb92dab181e5083c3f13ce21c92cabb.png)](/content/papers/assets/a967fd9c8d63065a0369d6a07be24dc71bb92dab181e5083c3f13ce21c92cabb.png)\n\n*原論文Figure 1。[**v1 PDFの2ページ**](https://arxiv.org/pdf/2310.11511v1#page=2)から抜粋、CC BY 4.0。左が従来型、右がSelf-RAG。最下段は検索不要の作文課題です。*\n\n左側の質問は「米国の各州名の由来は？」です。検索器は三つの文書を返します。1件目は50州のうち11州が人名由来、2件目はテキサスで人気の赤ちゃんの名前、3件目はカリフォルニアがスペイン小説の架空の島に由来すると説明します。\n\nまとめて渡すと、モデルは「カリフォルニアはコロンブスにちなんで命名された」と書きます。赤い下線の**Contradictory**は、3件目と矛盾している印です。「テキサスとユタは先住民の部族名に由来する」には**No information in passages**とあり、三つの文書のどこにも書かれていません。\n\n最下段はさらに直接的です。夏休みの作文にも、従来のRAGは三つの文書を検索します。\n\n著者らが解きたい問いは、次のものです。\n\n- **一つの言語モデルが、いつ検索するか、検索結果が役立つか、自分の文章に根拠があるかを判断できるか？**\n\n## 問題の解決\n\n### 内省トークン\n\nモデルの語彙へ、**内省トークン**（reflection tokens）という特殊tokenを追加します。文章を生成するとき、適切な位置でこれらも出力し、書きながら自分を採点します。\n\n全部で四種類です。\n\n| トークン | 判断材料 | 値 | 意味 |\n| --- | --- | --- | --- |\n| Retrieve | 質問と生成済みの内容 | yes／no／continue | 今、検索すべきか |\n| IsRel | 質問、文書 | relevant／irrelevant | 解答に役立つ文書か |\n| IsSup | 質問、文書、この出力断片 | fully／partially／no support | 文書が出力を裏付けるか |\n| IsUse | 質問、出力 | 5／4／3／2／1 | 回答全体が役立つか |\n\n*原論文Table 1をもとに整理。*\n\n後ろの三つを**評価トークン**（critique tokens）と総称します。こちらが評価を担当し、Retrieveは検索するかどうかを決めます。\n\n### 推論を一歩ずつ見る\n\n図の右側で、同じ質問をたどります。\n\nSelf-RAGは**断片**単位で生成します。論文の実験では、一つの断片が一文です。\n\n**第一段階：調べるか**。まず「米国の州名にはさまざまな由来がある」と書きます。続いて`Retrieve`を出し、次には事実の裏付けが必要と判断して検索器を呼び、三つの文書を取得します。\n\n**第二段階：並列生成**。三つの文書を**別々に**質問へつなぎ、次の一文の候補を並列に作ります。各文書と候補に評価トークンを付けます。\n\n- 1件目：`Relevant`。「50州のうち11州は人名に由来する」と書き、`Supported`。\n- 2件目：`Irrelevant`。「テキサスは先住民の部族名に由来する」と書くが、根拠がない。\n- 3件目：`Relevant`。「カリフォルニアの名前は16世紀の小説『Las Sergas de Esplandián』に由来する」と書き、`Partially`。\n\n**第三段階：採点して選ぶ**。1件目の候補は関連性があり、完全に支持されるため最上位です。3件目が次、2件目が最後になります。1件目の文を採用して先へ進み、必要になればまた検索します。\n\n最下段の作文課題では、最初から`No Retrieval`を出し、普通の言語モデルのようにそのまま書きます。\n\n### スコアの計算\n\n第三段階の順位は、スコアで表します。文書$d$と組み合わせた候補断片$y_t$のスコアは、次の式です。\n\n$$\nf(y_t,d)=p(y_t\\mid x,d,y_{<t})+\\mathcal{S}(\\text{Critique})\n$$\n\n前半はその文の生成確率、後半は評価トークンの重み付き和です。\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$は、その種類の中で**最も望ましい値**の確率です。IsRelなら`Relevant`、IsSupなら`fully supported`、IsUseなら`5`の確率を、同じ種類のトークン間で正規化して使います。\n\n仮の数値で計算しましょう。論文の既定の重みは$w^{\\text{IsRel}}=1.0$、$w^{\\text{IsSup}}=1.0$、$w^{\\text{IsUse}}=0.5$です。二つの候補の確率を次のように仮定します。\n\n| 候補 | IsRel＝Relevant | IsSup＝fully | IsUse＝5 |\n| --- | ---: | ---: | ---: |\n| 文書1を使う | 0.90 | 0.80 | 0.60 |\n| 文書3を使う | 0.85 | 0.30 | 0.70 |\n\n評価スコアは次の通りです。\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\n文自体の生成確率が近ければ、文書1の候補が勝ちます。\n\n重みは推論時に変えられ、**再学習は不要**です。「各文に出典が必要」という用途なら$w^{\\text{IsSup}}$を2.0へ上げます。差は0.5から1.0へ広がり、2.80対1.80になります。\n\n`IsSup = No support`を生成した候補は必ず除外する、という厳しい条件にもできます。\n\n検索するかどうかも、`Retrieve=Yes`を直接生成させるほかに、その正規化確率が閾値$\\delta$を超えたら検索する方式を使えます。閾値を下げるほど頻繁に調べます。\n\n実際の探索は断片単位で幅2のbeam searchを使い、断片内のtokenはgreedy decodingで生成します。\n\n\n> [!NOTE]\n> \n> 上の評価トークン確率は、式の説明用に本稿で置いた仮の数字です。論文の実験結果ではありません。重み1.0、1.0、0.5とbeam幅2は、論文の既定設定です。\n\n\n### 採点の仕方をどう教えるのか\n\n推論時には、自分で判断し採点しているように見えます。その能力はどう学習するのでしょう。\n\n二段階で進めます。\n\n**第一段階：評価モデル$\\mathcal{C}$を学習する**。各文へ人手で内省トークンを付けるのは高価なので、GPT-4に依頼します。トークンの種類ごとに、「与えられた指示について、Webから外部文書を探すとより良い応答に役立つか判断せよ」などの指示と少数の例を用意します。種類ごとに4千～2万件を集め、Llama 2-7Bをファインチューニングします。多くの種類で、GPT-4との判断一致率は90%を超えました。\n\n**第二段階：評価モデルで学習データを書き換え、生成モデル$\\mathcal{M}$を学習する**。15万件の指示と回答を一文ずつ評価します。必要な位置に`Retrieve`と検索文書を挿入し、文書の後にIsRel、文の後にIsSup、回答全体の最後にIsUseを加えます。\n\n処理後のデータは、次のようになります。原論文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\nあとは、次のtokenを予測する通常の言語モデル学習です。違いは、`<p>`と`</p>`の間の検索文書を損失へ含めないことです。それは検索器が渡す内容で、モデルが書けるようになる必要はありません。\n\n学習後は生成モデル自身がトークンを出すため、推論中に評価モデルを呼ぶ必要はありません。\n\n著者らはRLHFとも比べます。PPOは学習中に報酬モデルを繰り返し呼びますが、Self-RAGは先に評価を書き込んだデータを標準の言語モデル目標で学習するため、コストを大きく抑えます。\n\n\n> [!TIP]\n> \n> **「Self-RAG」のチュートリアルと原論文の実装**\n> \n> ネット上のSelf-RAG解説、例えばアーカイブ済みの[**LangGraphの例**](https://github.com/langchain-ai/langgraph/blob/fbcb8a911b626b4373fd4aff9624124e9532987f/examples/rag/langgraph_self_rag.ipynb)は、文書の関連性、回答の根拠、質問へ答えているか、という判断の流れを借りています。\n> \n> 実装方法は異なります。こうした例は別途LLMを呼び、プロンプトでyes/noを答えさせ、再検索、質問の書き換え、再生成を決めます。論文は、判断を**生成モデル自身が出すtokenとして学習**し、同じ生成の中で行い、確率による重み付き順位付けも可能にします。\n> \n> どちらも使えますが、「Self-RAG」と書かれていたら、どの実装かを確認しましょう。\n\n\n## 考察\n\n### 実験設定\n\n評価はすべてzero-shotです。タスク説明だけを与え、実演例は付けません。\n\n- **選択肢が限定された課題**：公衆衛生の事実検証PubHealthと科学問題ARC-Challenge。精度で評価します。\n- **短い回答**：月間Wikipedia閲覧数100未満の珍しい実体を扱うPopQAのlong-tail部分集合1,399問と、TriviaQA-unfilteredの11,313問。参照解答が出力にあれば正解です。\n- **長文生成**：人物伝記の事実性をFactScoreで評価し、長い回答のASQAでは引用の適合率と再現率も測ります。\n\n生成モデルはLlama 2の7Bと13B、検索器は既成のContriever-MS MARCOで、通常は上位5件を取得します。伝記とオープンドメイン質問応答では、Web検索の上位5件も追加します。\n\n### 主な結果\n\n原論文Table 2から、特徴が分かるモデルを抜き出します。\n\n| モデル | PopQA | PubHealth | 伝記FactScore | ASQA引用適合率 |\n| --- | ---: | ---: | ---: | ---: |\n| ChatGPT | 29.3 | 70.1 | 71.8 | — |\n| ChatGPT＋検索 | 50.8 | 54.7 | — | 65.1 |\n| Llama2-chat 13B＋検索 | 51.8 | 52.1 | 79.9 | 19.8 |\n| Llama2-FT 7B＋検索 | 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*原論文Table 2をもとに整理。*\n\nいくつか見るべき点があります。\n\n**検索が害になることもあります**。ChatGPTに検索を加えると、PopQAは29.3から50.8へ上がります。珍しい知識には調査が必要です。しかしPubHealthは70.1から54.7へ下がりました。不要な検索を強制する、冒頭の問題が現れています。\n\n**最大の差は引用適合率です**。普通のRAGベースラインは多くが1桁台から2割程度ですが、Self-RAG 13Bは70.3で、検索付きChatGPTの65.1も超えます。この指標は、文が引用した文書によって完全に支持されているかを測ります。\n\n**同じ学習データでも、内省トークンと検索文書で差が出ます**。Llama2-FT 7Bは同じ15万件の指示データを使いますが、内省トークンと検索文書を含めず、テスト時だけ検索を追加します。ASQAのstr-emとROUGEがわずかに高い（31.0対30.0、35.8対35.7）ほかは、すべてSelf-RAG 7Bに及びません。\n\n一方、TriviaQAとARC-ChallengeではChatGPTが74.3、75.3で、Self-RAG 13Bの69.3、73.1を上回ります。ASQAの正しさ（str-em）と引用再現率も、検索付きChatGPTの方が高い結果です。\n\n### どの設計が効いたのか\n\n[![Self-RAGの分析：(a)学習と推論のアブレーション、(b)IsSupの重みと引用適合率・MAUVE、(c)検索閾値と精度・検索頻度](/content/papers/assets/ed98a0625c59ca4eaa3a682d3fddfda9963f66ff78e56b8a320597c846caf562.png)](/content/papers/assets/ed98a0625c59ca4eaa3a682d3fddfda9963f66ff78e56b8a320597c846caf562.png)\n\n*原論文Figure 3。[**v1 PDFの9ページ**](https://arxiv.org/pdf/2310.11511v1#page=9)から抜粋、CC BY 4.0。(a)アブレーション、(b)推論時の重み調整、(c)検索閾値の調整です。*\n\n**(a) アブレーション**。費用を抑えるため5万件で学習した7Bを使い、PopQA（PQA）、PubHealth（Med）、ASQA（AS）で測ります。\n\n- 学習時に評価モデルを除くNo Criticでは、各データへ固定で1文書を付け、内省トークンを使いません。ASQAは32.1から18.1へ下がります。\n- 推論時に無条件で1位の文書だけを使うRetrieve top1は、従来RAGに最も近い設定です。PopQAは45.5から41.8、ASQAは28.6へ下がります。\n- 一切検索しないNo retrievalではPopQAは24.7ですが、PubHealthは73.0でほぼ変わりません。\n\n最後の点は主結果と一致します。PopQAは調べる必要があり、PubHealthはそれほどありません。\n\n**(b) IsSupの重み**。横軸は$w^{\\text{IsSup}}$です。上げると引用適合率は上がり、流暢さの指標MAUVEは下がります。長く流暢な文ほど、引用が完全には支持しない内容を混ぜやすいと著者らは説明します。再学習なしで振る舞いを調整できる例です。\n\n**(c) 検索閾値**。閾値を上げると検索頻度が下がります。PubHealthは少なくしても精度への影響が小さく、PopQAは明確に悪化します。\n\n### その他の観察\n\n- **学習データを増やすと改善する**。5千件から15万件への増加で、特にPopQAとASQAが改善しました。さらに増やす余地もあると著者らは考えています。\n- **小規模な人手評価**。PopQAと伝記から各50件を確認しました。IsRelと人の判断の一致率は95.0%、90.0%、IsSupは90.0%、85.0%です。\n- **推論コスト**。検索ごとに複数文書を並列処理し、候補を作り、断片単位のbeam searchを行います。vLLMで高速化していますが、従来RAGとの遅延・費用比較は報告されていません。実運用では測定が必要です。\n\n## 結論\n\nSelf-RAGは、RAGで固定されがちな決定をモデルへ戻します。\n\n1. **検索するか**：`Retrieve`で必要時に調べ、作文なら省略できる。\n2. **どの文書が役立つか**：`IsRel`で各検索文書を評価する。\n3. **文章に根拠があるか**：`IsSup`で各文の支持を確認する。\n4. **全体としてよいか**：`IsUse`で回答全体の有用性を見る。\n\nGPT-4でラベルを付け、評価モデルへ蒸留し、学習データへ書き込み、最後に生成モデル自身がトークンを出すよう学びます。推論時にはその確率をスコアへまとめ、再学習せずに重みで取捨選択を変えられます。\n\n論文の実験では、7Bと13BのSelf-RAGはPopQA、PubHealth、伝記、ASQA引用適合率で、数値が報告されたChatGPTとLlama2-chatの比較対象を上回ります。一方、TriviaQAやARC-ChallengeなどはChatGPTが先行します。\n\n上位$K$件を固定で検索することは、かつてRAGの既定値でした。この論文は、調べるべきか、見つけたものを使えるかも、判断が必要な仕事だと教えてくれます。\n","imageSizes":{"/content/papers/assets/a967fd9c8d63065a0369d6a07be24dc71bb92dab181e5083c3f13ce21c92cabb.png":{"width":1122,"height":622},"/content/papers/assets/ed98a0625c59ca4eaa3a682d3fddfda9963f66ff78e56b8a320597c846caf562.png":{"width":1122,"height":447}}}
