RAG(Retrieval-Augmented Generation)は、LLMの回答精度を高める手法として広く普及した。しかし、基本的なRAGパイプライン——「質問をEmbeddingに変換→ベクトルDBで類似検索→上位チャンクをLLMに渡す」——だけでは、プロダクション環境で満足な精度が得られないケースが増えている。
Advanced RAGは、この基本パイプラインの各段階に改善テクニックを適用し、検索精度と回答品質を大幅に向上させるアプローチだ。この記事では、Advanced RAGの7つの主要テクニックを図解で解説する。RAGの基礎についてはRAG完全ガイドを参照してほしい。
基本RAGの3つの限界
まず、なぜAdvanced RAGが必要なのかを理解するため、基本RAGの限界を整理する。
| 限界 | 具体的な問題 | 発生頻度 |
|---|---|---|
| 検索精度の壁 | Embedding類似度だけでは意味的に正しい文書が取得できない | 高(特に専門用語) |
| チャンク品質の問題 | 固定長分割で文脈が分断される | 中 |
| クエリと文書のミスマッチ | ユーザーの質問と文書の表現が異なる場合にヒットしない | 高 |
これらの限界を突破するのがAdvanced RAGのテクニックだ。
テクニック1: ハイブリッド検索(Dense + Sparse)
ベクトル検索(Dense)とキーワード検索(Sparse/BM25)を組み合わせる手法だ。
| 検索手法 | 強み | 弱み |
|---|---|---|
| Dense(Embedding) | 意味的な類似性を捉える | 固有名詞・型番に弱い |
| Sparse(BM25) | キーワードの完全一致に強い | 同義語・言い換えに弱い |
| ハイブリッド | 両方の強みを活かす | 重み付けのチューニングが必要 |
実装では、両方のスコアをRRF(Reciprocal Rank Fusion)で統合するのが一般的だ。Pinecone、Weaviate、Qdrantなどの主要ベクトルDBはハイブリッド検索をネイティブサポートしている。
テクニック2: リランキング(Reranking)
初回検索で取得した候補文書を、クロスエンコーダーモデルで再スコアリングする手法だ。
| 段階 | モデル | 速度 | 精度 |
|---|---|---|---|
| 初回検索 | Bi-Encoder(Embedding) | 高速 | 中 |
| リランキング | Cross-Encoder(Cohere Rerank等) | 低速 | 高 |
初回検索で上位50件を取得→リランカーで再スコアリング→上位5件をLLMに渡す、という2段階パイプラインが定番だ。Cohere Rerank、Jina Reranker、BGE Rerankなどが代表的なモデルとして利用されている。
テクニック3: クエリ変換(Query Transformation)
ユーザーの質問をそのまま検索に使うのではなく、検索に適した形に変換する手法だ。
| 手法 | 概要 | 効果的な場面 |
|---|---|---|
| Query Rewriting | LLMで検索に最適な表現に書き換え | 曖昧な質問 |
| Step-Back Prompting | より抽象的な質問に変換して広く検索 | 具体的すぎる質問 |
| Sub-Query Decomposition | 複合質問を複数のサブクエリに分解 | 比較・分析系の質問 |
| HyDE | 仮の回答を生成→その回答で検索 | 質問と文書の表現が大きく異なる場合 |
HyDE(Hypothetical Document Embeddings)は特に効果的なテクニックだ。「質問のEmbedding」で検索する代わりに、「LLMが生成した仮の回答のEmbedding」で検索する。回答文と文書の類似度は、質問文と文書の類似度よりも高くなる傾向がある。
テクニック4: チャンク最適化
固定長(例: 512トークン)で機械的に分割するのではなく、文書の構造を考慮して分割する手法だ。
| 手法 | 概要 | 適した文書 |
|---|---|---|
| セマンティックチャンキング | 意味の切れ目で分割 | 論文、レポート |
| 再帰的分割 | 段落→文→単語の順で再帰的に分割 | 一般的な文書 |
| 親子チャンキング | 小チャンクで検索→親チャンクをLLMに渡す | 長文ドキュメント |
| ドキュメント要約インデックス | 各文書の要約を作成→要約で検索→原文を取得 | 大量の短い文書 |
親子チャンキング(Parent-Child Chunking)は、検索精度とコンテキスト量のトレードオフを解消する優れた手法だ。小さなチャンク(256トークン)で精密に検索し、実際にLLMに渡すのはその親チャンク(1024トークン)にすることで、十分な文脈を保持できる。
テクニック5: メタデータフィルタリング
ベクトル検索の前にメタデータでフィルタリングし、検索対象を絞り込む手法だ。
| メタデータ | フィルタ例 | 効果 |
|---|---|---|
| 日付 | 直近1年の文書のみ | 古い情報の除外 |
| ソース | 公式ドキュメントのみ | 信頼性の担保 |
| カテゴリ | 技術文書のみ | 検索範囲の限定 |
| 言語 | 日本語のみ | 多言語環境での精度向上 |
メタデータフィルタリングは実装が簡単で効果が大きい。特に「日付フィルタ」は、情報の鮮度が重要なドメインで必須のテクニックだ。
テクニック6: Self-RAG(自己評価型RAG)
LLM自身が検索結果の品質を評価し、不十分な場合は再検索する手法だ。
| ステップ | 処理 | 判断基準 |
|---|---|---|
| 1. 検索 | 通常のRAGパイプラインで文書取得 | — |
| 2. 関連性評価 | 取得文書が質問に関連するか評価 | relevance score > 0.7 |
| 3. 回答生成 | 関連文書を基に回答生成 | — |
| 4. 回答評価 | 生成された回答が文書に基づいているか評価 | groundedness score > 0.8 |
| 5. 再検索(必要時) | 評価が低い場合、クエリを修正して再検索 | — |
Self-RAGはAdvanced RAGの中でも特に高度なテクニックだが、レイテンシとコストが増加する点には注意が必要だ。さらに進化した形態であるAgentic RAGについてはAgentic RAG完全ガイドで解説している。
テクニック7: 評価フレームワーク(RAGAS)
RAGパイプラインの品質を定量的に評価するフレームワークだ。
| 評価指標 | 測定対象 | 理想値 |
|---|---|---|
| Faithfulness | 回答が検索結果に基づいているか | 1.0 |
| Answer Relevancy | 回答が質問に対して適切か | 1.0 |
| Context Precision | 検索結果に無関係な文書が含まれていないか | 1.0 |
| Context Recall | 回答に必要な情報が検索で取得できているか | 1.0 |
RAGASは、これら4つの指標を自動計算するPythonライブラリだ。RAGパイプラインの改善は、まず現状のスコアを測定→テクニックを適用→スコアの変化を確認、というサイクルで進めるのが効果的だ。
Advanced RAGは「銀の弾丸」ではなく、テクニックの組み合わせだ。自社のデータと質問パターンに合わせて、どのテクニックが最も効果的かを検証する姿勢が重要になる。あなたのRAGパイプラインで、最初に試すべきテクニックはどれだろうか。
出典・参考
- Gao et al.「Retrieval-Augmented Generation for Large Language Models: A Survey」(2024)
- LlamaIndex Documentation「Advanced RAG Techniques」
- Pinecone「Hybrid Search」
- RAGAS Documentation

