GraphRAGとは
グラフRAG
文書群から抽出したエンティティ・関係のナレッジグラフを介して検索・生成するRAGの発展形
ひとことで言うと
文章同士のつながりを地図のように整理しておき、それを頼りに答えを作るRAGの発展版。
概要
GraphRAGは、通常のRAGがベクトル検索によって関連する文書の断片を個別に取得するのに対し、あらかじめ文書群からエンティティ(人物・組織・概念など)とその関係をLLMで抽出しナレッジグラフとして構造化しておく手法。 この構造化により、複数の文書にまたがる関係性を踏まえた検索・生成が可能になる。 グラフはコミュニティ(関連の深いエンティティのまとまり)ごとに要約しておき、質問の抽象度に応じて要約の粒度を切り替えて検索に使うことで、個々の文書の断片だけでは答えにくい、文書全体を俯瞰するような質問にも対応しやすくなる。 通常のベクトル検索型RAGは特定の事実を尋ねる質問には強いが、「全体としてどのようなテーマが議論されているか」のような俯瞰的な質問には弱いという課題があり、GraphRAGはこの弱点を補う目的で設計されている。 2024年にMicrosoft Researchが手法と実装を公開し、企業のナレッジベース活用や研究文献の横断分析などの用途で注目を集めている。
背景
通常のRAGは文書をチャンク単位で独立に検索するため、複数の文書にまたがる関係性や、コーパス全体を俯瞰する質問への回答には不向きだった。 GraphRAGは、エンティティ間の関係をグラフとして事前に構造化しておき、個々の断片を超えた文脈を検索・生成へ活用できるようにする目的で考案された。
歴史
2024年: Microsoft Researchが論文「From Local to Global: A Graph RAG Approach to Query-Focused Summarization」とオープンソース実装を公開。 2024年以降: エンタープライズ向けRAGシステムの構成要素として、複数のベンダー・OSSプロジェクトに採用が広がる。
アーキテクチャ
文書群をチャンクに分割したのち、LLMによってエンティティ(人物・組織・概念等)とその関係を抽出し、グラフのノードとエッジとして構造化する。 構築したグラフに対しコミュニティ検出アルゴリズムを適用し、関連の深いエンティティ群を階層的なコミュニティとしてクラスタリングする。 各階層のコミュニティごとにLLMで要約を作成しておき、質問の抽象度に応じてどの階層の要約を検索対象とするかを切り替えることで、詳細な事実質問から俯瞰的な要約質問まで幅広くカバーする。
ワークフロー
文書群をチャンクに分割し、LLMを使って各チャンクからエンティティと関係を抽出する。 抽出結果を統合してナレッジグラフを構築し、関連の深いエンティティ群をコミュニティとしてクラスタリングする。 各コミュニティの内容をLLMで要約しておき、質問が来た際にはその抽象度に応じて要約の粒度を切り替えながらグラフ上の関連部分を検索し、回答生成のコンテキストとして利用する。
コード例
networkxでのナレッジグラフ構築とコミュニティ検出
import networkx as nx
from networkx.algorithms.community import greedy_modularity_communities
graph = nx.Graph()
graph.add_edges_from([
("OpenAI", "GPT-4"), ("GPT-4", "Transformer"),
("Anthropic", "Claude"), ("Claude", "Transformer"),
])
communities = list(greedy_modularity_communities(graph))
print(communities) # 関連の深いエンティティ群のクラスタ利点
欠点
- エンティティ抽出とグラフ構築の前処理に多くのLLM呼び出しが必要で、構築コストが高い
- 通常のベクトル検索型RAGと比べてシステム構成が複雑になり、運用の手間が増える
- 抽出したエンティティや関係の精度がLLMの抽出能力に依存し、誤抽出が検索結果の質に影響する
比較
- RAG — GraphRAGは通常のRAGにナレッジグラフによる構造化を組み合わせ、俯瞰的な質問への対応力を高めた発展形
- Agentic RAG — GraphRAGは検索対象の構造化に重点を置き、Agentic RAGは検索プロセス自体の自律的な制御に重点を置く
- ベクトルデータベース — GraphRAGはベクトル検索に加えてグラフ構造を併用し、より広い文脈を検索対象に含める
関連用語
よくある質問
GraphRAGは通常のRAGと何が違う?
通常のRAGは文書をチャンク単位で個別に検索するのに対し、GraphRAGは文書群から抽出したエンティティと関係をナレッジグラフとして構造化し、複数の文書にまたがる関係性を踏まえて検索・生成する。
GraphRAGはどんな質問に向いている?
特定の事実を尋ねる質問よりも、「コーパス全体でどのようなテーマが議論されているか」のような俯瞰的・要約的な質問に強みを発揮する。