AI・機械学習
上級

Graph RAG(グラフラグ)

Graph RAG(Graph Retrieval-Augmented Generation)は、知識グラフとRAGを組み合わせた検索拡張生成手法である。Microsoft Researchが2024年に発表した論文「From Local to Global: A Graph RAG Approach to Query-Focused Summarization」で提案され、テキストコーパスからエンティティ抽出・ナレッジグラフ構築・Leidenアルゴリズムによるコミュニティ検出・階層的サマリ生成を行い、クエリ時にグラフ構造を活用して高品質な回答を生成する。

0 回閲覧
0 いいね

Graph RAGとは

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のパイプライン全体像

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はコミュニティサマリを横断的に参照する検索である。

Local SearchとGlobal Search

Graph RAGの最大の特徴は、Local SearchとGlobal Searchという2つの検索モードを提供する点にある。

Local Search

Local Searchは、特定のエンティティに関する詳細な質問に回答するための検索戦略である。クエリからエンティティを特定し、そのエンティティの近傍ノード・エッジ・関連チャンク・コミュニティサマリを収集してコンテキストを構築する。従来のベクトルRAGに近い動作だが、グラフ構造を活用することでより構造化された情報取得が可能になる。

Local Searchのコンテキスト構築では、以下の情報が優先度順に収集される。

  1. マッチしたエンティティの説明文
  2. エンティティに関連するリレーションシップ
  3. エンティティが属するコミュニティのサマリ
  4. エンティティに紐づく元テキストチャンク
  5. 共変量(Covariates)情報

Global Search

Global Searchは、コーパス全体にまたがる包括的な質問(「このデータセットの主要テーマは何か」「全体的な傾向は何か」等)に回答するための検索戦略である。すべてのコミュニティサマリをMap-Reduceパターンで処理し、各サマリからの部分回答を統合して最終回答を生成する。

Global Searchの処理フロー:

  1. Mapフェーズ: 各コミュニティサマリに対して、クエリへの関連度スコア付き部分回答を生成
  2. Reduceフェーズ: スコアの高い部分回答を統合し、包括的な最終回答を生成

この手法により、数万〜数百万トークンのコーパスに対しても、全体を俯瞰した回答を生成できる。従来のベクトルRAGではトップK件のチャンクしか参照できないため、グローバルな質問に対して情報の欠落が生じやすかったが、Graph RAGのGlobal Searchはこの課題を解決する。

Graph RAGの技術的基盤

Graph RAGの実装には、複数の技術領域の知識が必要となる。

LLMによるエンティティ・関係抽出

Graph RAGのインデックス構築では、LLM(GPT-4、Claude等)を活用してテキストからエンティティと関係を抽出する。Few-shotプロンプトにより、エンティティ名・エンティティ型・関係の説明・関係の強度を構造化データとして出力させる。

Microsoft Research版の実装では、1チャンクあたり複数回のGleaning(追加抽出)を行い、初回の抽出で見逃されたエンティティや関係を補完する。この反復抽出により、抽出の再現率(Recall)が大幅に向上する。

Leidenアルゴリズム

コミュニティ検出にはLeidenアルゴリズムが採用されている。Leidenアルゴリズムは、Louvainアルゴリズムの改良版であり、モジュラリティ最適化に基づくグラフクラスタリング手法である。高速かつ高品質なコミュニティ分割が可能で、階層的なコミュニティ構造(異なる解像度レベル)を生成できる。

コミュニティサマリの階層構造

Leidenアルゴリズムが生成する階層的なコミュニティ構造に対応して、各レベルのコミュニティサマリが生成される。低レベル(細粒度)のコミュニティは特定のトピックに特化した詳細情報を持ち、高レベル(粗粒度)のコミュニティはより広いテーマの概要情報を持つ。

コミュニティレベル粒度ノード数目安サマリ内容用途
レベル0最細粒度2〜10個別トピックの詳細Local Search
レベル1中粒度10〜50サブテーマの概要Local/Global
レベル2粗粒度50〜200主要テーマの要約Global Search
レベル3+最粗粒度200+全体傾向の俯瞰Global Search

Microsoft GraphRAGの実装

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を大きく上回る。

学術論文調査

大量の論文コーパスから研究テーマのランドスケープを把握する。「この分野の主要な研究アプローチは何か」「どの研究グループが類似の課題に取り組んでいるか」といった包括的な質問に対して、体系的な回答を生成できる。

法務・コンプライアンス

契約書・規制文書・判例の大量コーパスから、特定の法的論点に関連するすべての条項や前例を網羅的に抽出できる。エンティティ間の関係(当事者間関係、条項間の参照関係等)がグラフとして構造化されるため、見落としのリスクが低減する。

よくある質問(FAQ)

Q1: Graph RAGは従来のベクトルRAGを完全に置き換えるものですか?

いいえ、Graph RAGとベクトルRAGは補完的な関係にある。特定のエンティティに関する単純な質問にはベクトルRAGが効率的であり、コーパス全体を俯瞰する質問にはGraph RAGのGlobal Searchが適している。実運用では両者を組み合わせたハイブリッドアプローチが推奨される。Microsoft ResearchのLocal Search自体が、グラフ情報とベクトル検索を組み合わせた設計になっている。

Q2: Graph RAGのインデックス構築にはどの程度のコストと時間がかかりますか?

コストはコーパスサイズとLLMモデルに大きく依存する。100万トークンのコーパスに対してGPT-4でインデックスを構築した場合、数十ドルのAPI費用と数時間の処理時間が目安となる。GPT-4o-miniをエンティティ抽出に使用することでコストを1/10以下に削減可能だが、抽出品質は低下する。インデックスの増分更新機能は2024年時点では限定的であり、コーパスの大幅な更新時は再構築が必要になることが多い。

Q3: Graph RAGを自社で導入する場合、何から始めればよいですか?

まず小規模なコーパス(1,000ページ程度)でMicrosoft GraphRAGの公式実装を試すことを推奨する。settings.yamlでLLMプロバイダ(Azure OpenAI / OpenAI)を設定し、graphrag indexコマンドでインデックスを構築する。構築されたグラフの品質を確認し、エンティティ抽出プロンプトのカスタマイズやチャンクサイズの調整を行う。本番導入では、Neo4jやAmazon Neptuneなどのグラフデータベースとの統合、増分更新パイプラインの構築、コスト最適化のためのモデル選択戦略が重要な検討事項となる。

Q4: Graph RAGでサポートされるグラフデータベースは何ですか?

Microsoft GraphRAGのリファレンス実装は、デフォルトでParquetファイルベースのストレージを使用する。本番環境向けには、Neo4j、Amazon Neptune、Azure Cosmos DB for Apache Gremlinなどのグラフデータベースとの統合が可能である。LlamaIndexのPropertyGraphIndexやLangChainのLangGraphなど、他のフレームワークもGraph RAGパターンをサポートしており、これらは独自のストレージバックエンドを提供している。