GraphRAG(グラフラグ)
RAG(検索拡張生成)にグラフ構造を導入し、テキストからエンティティとリレーションを抽出してコミュニティ検出・階層的要約を行うことで、従来のベクトルRAGでは困難だったグローバルな質問への包括的回答を可能にするMicrosoft発の手法。
GraphRAGとは
GraphRAG(Graph-based Retrieval-Augmented Generation)は、Microsoftが2024年に発表したRAGの拡張手法で、テキストコーパスからナレッジグラフを自動構築し、グラフのコミュニティ構造を利用して階層的な要約を生成することで、従来のベクトルRAGの限界を克服する。
ベクトルRAGの限界とGraphRAGの解決策
ベクトルRAGの弱点
従来のベクトルRAGは文書をチャンクに分割し、クエリに類似するチャンクを検索してLLMに渡す。この方式は「XとYの関係は?」のような局所的な質問には有効だが、「このデータセット全体の主要テーマは何か?」のようなグローバルな質問には対応できない。個別チャンクに答えが含まれていないためである。
GraphRAGのアプローチ
GraphRAGは以下の2段階で動作する。
インデックス構築フェーズ:
- テキストからLLMでエンティティ(人名・組織名・概念等)とリレーション(関係)を抽出
- 抽出されたトリプルからナレッジグラフを構築
- Leidenアルゴリズム等でコミュニティ検出を行い、グラフを階層的にクラスタリング
- 各コミュニティに対してLLMで要約を生成
クエリフェーズ:
- ローカル検索: クエリに関連するエンティティとその近傍をグラフから取得し、コンテキストとしてLLMに渡す
- グローバル検索: コミュニティ要約を使い、map-reduce方式でデータセット全体に関する質問に回答する
ベクトルRAGとの比較
| 観点 | ベクトルRAG | GraphRAG |
|---|---|---|
| 検索単位 | テキストチャンク | エンティティ+コミュニティ |
| 得意な質問 | 局所的・事実確認 | グローバル・テーマ分析 |
| インデックス構築コスト | 低(埋め込み計算のみ) | 高(LLMでの抽出+グラフ構築) |
| ストレージ | ベクトルDB | ベクトルDB + グラフDB |
| 回答の根拠 | チャンク引用 | グラフパス+コミュニティ要約 |
| 初期セットアップ | 容易 | 中程度 |
実装ツール
Microsoft GraphRAG
公式のPythonライブラリ graphrag がオープンソースで公開されている。Azure OpenAIまたはOpenAI APIを使用してエンティティ抽出とコミュニティ要約を自動実行する。
LlamaIndex PropertyGraph
LlamaIndexフレームワークにはPropertyGraphIndexが実装されており、Neo4jやNebulaGraphをバックエンドとしてGraphRAGパイプラインを構築できる。ローカルLLM(Ollama経由等)との組み合わせも可能。
LightRAG
GraphRAGの計算コストを削減した軽量版。デュアルレベルの検索(ローカル+グローバル)をシンプルな実装で実現し、インデックス構築時のLLM呼び出し回数を大幅に削減する。
コストと制約
GraphRAGの最大の課題はインデックス構築時のLLM API費用である。100ページのドキュメントからグラフを構築するのに数千回のLLM呼び出しが必要で、GPT-4使用時は数十ドルのコストがかかることがある。ローカルLLMの使用や、LightRAGのような軽量手法で大幅にコスト削減が可能。
FAQ
Q: GraphRAGはどのような用途に向いていますか?
A: 大量の非構造化テキスト(社内文書・研究論文・法令等)に対して「全体的な傾向」「主要テーマの要約」「複数文書にまたがる関係性」を問う場合に最も効果的です。FAQ的な単純質問にはベクトルRAGで十分です。
Q: GraphRAGとナレッジグラフは同じですか?
A: 異なります。ナレッジグラフは構造化されたデータベースそのものです。GraphRAGはナレッジグラフを「構築して」「RAGに利用する」パイプライン全体を指します。既存のKGを活用することも、テキストからKGを自動構築することもあります。
Q: ベクトルRAGと併用できますか?
A: はい。ハイブリッドアプローチが推奨されます。局所的な質問にはベクトルRAGのローカル検索、グローバルな質問にはGraphRAGのコミュニティ要約を使い分けることで、両方の強みを活かせます。