Self-RAG(Self-Reflective Retrieval-Augmented Generation)(セルフアールエージー)
LLMが自律的に「検索が必要か」「検索結果は関連しているか」「生成した回答は根拠に基づいているか」を判断するRAGフレームワーク。2023年にAsai et al.が提案し、不要な検索を省いて効率と精度を両立させる。
Self-RAGとは
Self-RAG(Self-Reflective Retrieval-Augmented Generation)は、LLMが検索の必要性・検索結果の品質・生成回答の根拠性を自律的に判断するRAGの発展形である。2023年にAkari Asai et al.が論文「Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection」で提案した。従来のRAGは全クエリに対して検索を実行するが、「日本の首都は?」のような常識的な質問には検索不要である。Self-RAGはこの無駄を排除し、必要な時だけ検索する適応的なRAGを実現する。
主な特徴・仕組み
- 4つのリフレクショントークン: LLMの語彙に追加される特殊トークン
[Retrieve]: 検索が必要か判定(Yes/No)[IsRel]: 検索結果がクエリに関連しているか判定(Relevant/Irrelevant)[IsSup]: 生成テキストが検索結果に基づいているか判定(Fully Supported/Partially/No Support)[IsUse]: 最終回答がユーザーにとって有用か判定(5段階スコア)
- 学習方法: GPT-4で生成したリフレクショントークン付きデータでLlama 2 / Llama 3をファインチューニング
- 適応的検索: 全クエリの約40〜60%で検索をスキップし、レイテンシとAPI コストを削減
- ベンチマーク性能: PopQA・PubHealth・ASQA等で従来RAGを+5〜10%上回る精度(Asai et al. 2023)
- 推論時制御: リフレクショントークンの閾値を調整することで、精度重視/速度重視のバランスを制御可能
- ベースモデル: 公式実装はLlama 2-7B/13B。コミュニティではMistral 7B/Llama 3-8Bへの適用例あり
- トレーニングコスト: 7Bモデルで約8xA100 GPU × 24時間(推定$500〜1,000)
- 商用利用: モデルウェイトはApache 2.0ライセンスで公開
処理フロー
| ステップ | 処理 | リフレクショントークン |
|---|---|---|
| 1 | クエリ入力 | — |
| 2 | 検索要否判定 | [Retrieve] Yes/No |
| 3a | 検索実行(Yesの場合) | — |
| 3b | 直接生成(Noの場合) | — |
| 4 | 検索結果の関連性評価 | [IsRel] Relevant/Irrelevant |
| 5 | 関連文書のみで回答生成 | — |
| 6 | 根拠性チェック | [IsSup] Fully/Partially/No |
| 7 | 有用性スコアリング | [IsUse] 1-5 |
| 8 | 最高スコアの回答を出力 | — |
ベンチマーク比較
| モデル/手法 | PopQA | PubHealth | ASQA |
|---|---|---|---|
| Llama 2-13B(RAGなし) | 14.7 | 49.2 | 21.6 |
| Llama 2-13B + RAG | 38.2 | 52.1 | 29.4 |
| Self-RAG (Llama 2-13B) | 54.9 | 72.4 | 33.9 |
| ChatGPT + RAG | 42.8 | 54.3 | 30.1 |
選び方・注意点
- ファインチューニングが必須: 通常のプロンプトエンジニアリングでは実現不可。リフレクショントークンの学習にGPU環境が必要
- ベースモデルの制約: 公式実装はLlama系のみ。GPT-4oやClaude等のクローズドモデルにはリフレクショントークンを追加できない
- 推論コスト: リフレクションステップの追加で通常LLM推論より20〜30%トークン消費増
- 適用ドメイン: 事実性が重要なQA(医療・法律・技術文書)で効果大。創作・対話ではオーバースペック
- 代替アプローチ: クローズドモデルを使う場合はCRAG(Corrective RAG)の方が導入しやすい
関連用語との違い
Self-RAGは「いつ検索するか」と「結果をどう評価するか」の両方をモデル内部で判断する点で、常に検索する通常RAGや検索結果を事後評価するCRAGと異なる。HyDEが「検索精度の改善」に特化するのに対し、Self-RAGは「検索の要否判断+品質保証」の総合フレームワーク。GraphRAGとは検索対象が異なり(文書 vs グラフ)、併用も可能。
よくある質問(FAQ)
Q1: Self-RAGはAPI経由のGPT-4oでも使える? A: 使えない。リフレクショントークンはモデルのファインチューニングで追加する必要があり、API経由のクローズドモデルには適用不可。同様のコンセプトをプロンプトで近似する「Prompt-based Self-RAG」の研究はあるが、精度は本来のSelf-RAGに劣る。
Q2: Self-RAGの学習データはどう作る? A: GPT-4にクエリ・文書ペアを与え、4種のリフレクショントークンを付与させた合成データ(約15万件)で学習する。論文公開のデータセット(selfrag/selfrag_train_data)がHugging Faceで利用可能。
Q3: 本番環境での推論速度はどの程度? A: Llama 2-7BベースでA100 GPU上、1クエリあたり約800ms〜1.5秒(検索スキップ時は300ms程度)。vLLM・TensorRT-LLMでの高速化で50%程度のレイテンシ削減が可能。
まとめ
- Self-RAGはLLMにリフレクショントークンを学習させ、検索の要否と品質を自律判断させるRAG発展形
- 全クエリの40〜60%で検索をスキップし効率化しつつ、事実性ベンチマークで従来RAGを上回る
- ファインチューニング必須のためクローズドモデルには適用不可、オープンモデル(Llama系)専用
- 事実性が重要なQAドメインで最も効果を発揮する