Graph RAG(Graph Retrieval-Augmented Generation)は、知識グラフとRAGを組み合わせた検索拡張生成手法である。Microsoft Researchが2024年に発表した論文「From Local to Global: A Graph RAG Approach to Query-Focused Summarization」で提案され、テキストコーパスからエンティティ抽出・ナレッジグラフ構築・Leidenアルゴリズムによるコミュニティ検出・階層的サマリ生成を行い、クエリ時にグラフ構造を活用して高品質な回答を生成する。
Graph RAG(Graph Retrieval-Augmented Generation)は、Microsoft Researchが2024年に発表した検索拡張生成(RAG)の革新的なアプローチである。従来のベクトルRAGがテキストチャンクの類似度検索に依存するのに対し、Graph RAGはテキストコーパス全体からナレッジグラフを構築し、そのグラフ構造を活用して回答を生成する。
論文「From Local to Global: A Graph RAG Approach to Query-Focused Summarization」(Darren Edge, Ha Trinh, Newman Cheng, Joshua Bradley, Alex Chao, Apurva Mody, Steven Truitt, Jonathan Larson, 2024)では、大規模テキストコーパスに対するクエリ指向の要約タスクにおいて、Graph RAGが従来手法を大幅に上回る性能を示すことが実証された。特にグローバルな質問(コーパス全体にまたがる包括的な質問)に対する回答品質で顕著な優位性を発揮する。
Graph RAGの核心的なアイデアは、インデックス構築時にLLMを活用してテキストからエンティティと関係を抽出し、それらをグラフとして構造化したうえで、Leidenアルゴリズムによるコミュニティ検出を行い、各コミュニティの階層的なサマリを事前生成しておくことにある。クエリ時にはこれらのサマリを活用することで、コーパス全体の知識を効率的に参照できる。
Graph RAGのパイプラインは、大きくインデックス構築フェーズとクエリフェーズの2段階に分かれる。
インデックス構築は以下の6ステップで進行する。
| ステップ | 処理内容 | 入力 | 出力 | 使用技術 |
|---|---|---|---|---|
| 1. テキスト分割 | ソースドキュメントをチャンクに分割 | 生テキスト | テキストチャンク群 | トークンベース分割 |
| 2. エンティティ抽出 | 各チャンクからエンティティと関係を抽出 | テキストチャンク | エンティティ・関係リスト | LLM(GPT-4等) |
| 3. グラフ構築 | 抽出結果を統合しナレッジグラフを構築 | エンティティ・関係 | ナレッジグラフ | グラフDB / NetworkX |
| 4. コミュニティ検出 | グラフをコミュニティに分割 | ナレッジグラフ |
| コミュニティ階層 |
| Leidenアルゴリズム |
| 5. サマリ生成 | 各コミュニティのサマリを生成 | コミュニティ + 元テキスト | コミュニティサマリ | LLM |
| 6. エンベディング | サマリとエンティティのベクトル化 | サマリ・エンティティ | ベクトルインデックス | Embedding Model |
クエリフェーズでは、質問の性質に応じてLocal SearchとGlobal Searchの2つの検索戦略を使い分ける。Local Searchはエンティティに紐づく情報を深掘りする検索、Global Searchはコミュニティサマリを横断的に参照する検索である。
Graph RAGの最大の特徴は、Local SearchとGlobal Searchという2つの検索モードを提供する点にある。
Local Searchは、特定のエンティティに関する詳細な質問に回答するための検索戦略である。クエリからエンティティを特定し、そのエンティティの近傍ノード・エッジ・関連チャンク・コミュニティサマリを収集してコンテキストを構築する。従来のベクトルRAGに近い動作だが、グラフ構造を活用することでより構造化された情報取得が可能になる。
Local Searchのコンテキスト構築では、以下の情報が優先度順に収集される。
Global Searchは、コーパス全体にまたがる包括的な質問(「このデータセットの主要テーマは何か」「全体的な傾向は何か」等)に回答するための検索戦略である。すべてのコミュニティサマリをMap-Reduceパターンで処理し、各サマリからの部分回答を統合して最終回答を生成する。
Global Searchの処理フロー:
この手法により、数万〜数百万トークンのコーパスに対しても、全体を俯瞰した回答を生成できる。従来のベクトルRAGではトップK件のチャンクしか参照できないため、グローバルな質問に対して情報の欠落が生じやすかったが、Graph RAGのGlobal Searchはこの課題を解決する。
Graph RAGの実装には、複数の技術領域の知識が必要となる。
Graph RAGのインデックス構築では、LLM(GPT-4、Claude等)を活用してテキストからエンティティと関係を抽出する。Few-shotプロンプトにより、エンティティ名・エンティティ型・関係の説明・関係の強度を構造化データとして出力させる。
Microsoft Research版の実装では、1チャンクあたり複数回のGleaning(追加抽出)を行い、初回の抽出で見逃されたエンティティや関係を補完する。この反復抽出により、抽出の再現率(Recall)が大幅に向上する。
コミュニティ検出にはLeidenアルゴリズムが採用されている。Leidenアルゴリズムは、Louvainアルゴリズムの改良版であり、モジュラリティ最適化に基づくグラフクラスタリング手法である。高速かつ高品質なコミュニティ分割が可能で、階層的なコミュニティ構造(異なる解像度レベル)を生成できる。
Leidenアルゴリズムが生成する階層的なコミュニティ構造に対応して、各レベルのコミュニティサマリが生成される。低レベル(細粒度)のコミュニティは特定のトピックに特化した詳細情報を持ち、高レベル(粗粒度)のコミュニティはより広いテーマの概要情報を持つ。
| コミュニティレベル | 粒度 | ノード数目安 | サマリ内容 | 用途 |
|---|---|---|---|---|
| レベル0 | 最細粒度 | 2〜10 | 個別トピックの詳細 | Local Search |
| レベル1 | 中粒度 | 10〜50 | サブテーマの概要 | Local/Global |
| レベル2 | 粗粒度 | 50〜200 | 主要テーマの要約 | Global Search |
| レベル3+ | 最粗粒度 | 200+ | 全体傾向の俯瞰 | Global Search |
Microsoft Researchは、Graph RAGのリファレンス実装をオープンソースとしてGitHub上で公開している(microsoft/graphrag)。Python実装であり、以下の主要コンポーネントで構成される。
GraphRAGはYAML設定ファイル(settings.yaml)で動作を制御する。LLMプロバイダ、チャンクサイズ、エンティティ抽出のプロンプト、コミュニティ検出のパラメータ等を細かく設定可能である。
インデックス構築は、Datashaper(データパイプラインフレームワーク)上で動作するワークフローとして実装されている。各ステップはParquetファイルとして中間結果を保存し、パイプラインの途中からの再実行や部分更新が可能である。
Graph RAGのインデックス構築は、すべてのテキストチャンクに対してLLM呼び出しを行うため、大規模コーパスではコストが高くなる。Microsoft Researchの論文では、約100万トークンのコーパスに対するインデックス構築コスト(GPT-4使用時)が報告されている。コスト最適化のために、エンティティ抽出にはGPT-4o-miniなどの軽量モデルを使用し、サマリ生成にのみGPT-4を使用するといった戦略が推奨されている。
| 処理ステップ | トークン消費(入力) | トークン消費(出力) | コスト比率 |
|---|---|---|---|
| エンティティ抽出 | 高(全チャンク×Gleaning回数) | 中 | 約60% |
| サマリ生成 | 中(コミュニティ数依存) | 中 | 約25% |
| クエリ処理 | 低〜中(検索範囲依存) | 低 | 約15% |
Graph RAGは、以下のような分野で特に効果を発揮する。
社内文書・議事録・技術文書を統合的にインデックス化し、「このプロジェクトに関係する全部門の取り組みは何か」といったグローバルな質問に回答できる。部門横断的な知識の可視化において、従来のキーワード検索やベクトルRAGを大きく上回る。
大量の論文コーパスから研究テーマのランドスケープを把握する。「この分野の主要な研究アプローチは何か」「どの研究グループが類似の課題に取り組んでいるか」といった包括的な質問に対して、体系的な回答を生成できる。
契約書・規制文書・判例の大量コーパスから、特定の法的論点に関連するすべての条項や前例を網羅的に抽出できる。エンティティ間の関係(当事者間関係、条項間の参照関係等)がグラフとして構造化されるため、見落としのリスクが低減する。
いいえ、Graph RAGとベクトルRAGは補完的な関係にある。特定のエンティティに関する単純な質問にはベクトルRAGが効率的であり、コーパス全体を俯瞰する質問にはGraph RAGのGlobal Searchが適している。実運用では両者を組み合わせたハイブリッドアプローチが推奨される。Microsoft ResearchのLocal Search自体が、グラフ情報とベクトル検索を組み合わせた設計になっている。
コストはコーパスサイズとLLMモデルに大きく依存する。100万トークンのコーパスに対してGPT-4でインデックスを構築した場合、数十ドルのAPI費用と数時間の処理時間が目安となる。GPT-4o-miniをエンティティ抽出に使用することでコストを1/10以下に削減可能だが、抽出品質は低下する。インデックスの増分更新機能は2024年時点では限定的であり、コーパスの大幅な更新時は再構築が必要になることが多い。
まず小規模なコーパス(1,000ページ程度)でMicrosoft GraphRAGの公式実装を試すことを推奨する。settings.yamlでLLMプロバイダ(Azure OpenAI / OpenAI)を設定し、graphrag indexコマンドでインデックスを構築する。構築されたグラフの品質を確認し、エンティティ抽出プロンプトのカスタマイズやチャンクサイズの調整を行う。本番導入では、Neo4jやAmazon Neptuneなどのグラフデータベースとの統合、増分更新パイプラインの構築、コスト最適化のためのモデル選択戦略が重要な検討事項となる。
Microsoft GraphRAGのリファレンス実装は、デフォルトでParquetファイルベースのストレージを使用する。本番環境向けには、Neo4j、Amazon Neptune、Azure Cosmos DB for Apache Gremlinなどのグラフデータベースとの統合が可能である。LlamaIndexのPropertyGraphIndexやLangChainのLangGraphなど、他のフレームワークもGraph RAGパターンをサポートしており、これらは独自のストレージバックエンドを提供している。