GraphRAGを1から — 知識グラフと検索の融合
文書をエンティティと関係の網に組み替えると、普通のRAGでは原理的に答えられない「全体としてどうなのか」に届く。抽出・名寄せ・コミュニティ要約・local/global検索を1から積み上げ、最後に「どこで過剰か」を正直に見積もる。
From Local to Global: A Graph RAG Approach to Query-Focused Summarization
一次資料 — この記事の根拠
この解説の公開 2026-08-26
From Local to Global: A Graph RAG Approach to Query-Focused SummarizationarXiv:2404.16130論文ページ·PDFFrom Louvain to Leiden: guaranteeing well-connected communitiesarXiv:1810.08473論文ページ·PDF
「で、結局この資料群は何の話なのか」
段ボール1箱ぶんの社内メールを渡されたとします。「田中さんの担当案件は何か」を知りたいだけなら簡単です。「田中」で検索して、出てきた数通を読めばいい。答えはどこか1通の中に書いてあるからです。
ところが質問がこう変わると手が止まります。「このメール群で繰り返し揉めている論点を上位5つ挙げてほしい」。この答えはどのメールにも書かれていません。1通ずつ読めば「見積もりが遅い」といった断片は拾えますが、それが箱全体で何回、誰と誰の間で起きているかは全部を読み通して束ねないと分からない。検索は「似ているものを探す」道具であって、「全部を見渡して束ねる」道具ではないのです。
前者を局所的(local)な問い、後者を大域的(global)な問いと呼び分けておきます。GraphRAGは、この大域的な問いに機械的に答えるための仕掛けです。
普通のRAGの守備範囲
ふつうのRAG(検索拡張生成)は、文書を細かく切り、埋め込みベクトルに変え、質問に近いものを上位k件だけ拾ってLLMに渡す仕組みでした(全体像はRAGの基礎と設計パターン)。この構成には、めったに明示されない前提が1つあります。答えが、どれか1つのチャンクの中に丸ごと入っていることです。
前提が崩れるのは、答えが100個のチャンクに1文ずつ散らばっているときです。上位5件を取ってきても全体の5%を見た偏った標本にすぎません。しかもLLMはその5件だけを根拠に、堂々と「主要な論点は以下の3つです」と答えます。検索が失敗しているのに、出力は失敗に見えない。これが大域的な問いでRAGが起こす典型的な事故です。
かといって全部渡すのも現実的ではありません。入力上限を超えますし、超えなくてもコストと遅延が跳ね上がります。下の図でクエリを動かしてみてください。どう動かしても手に入るのはクエリの近傍の数件だけで、集合全体の姿ではないことが見て取れるはずです。
知識グラフ: 文書を「点と線」に組み替える
GraphRAGの発想は、検索を賢くするのではなく、検索する前に文書の形そのものを変えることです。変換後の形が知識グラフで、中身は2種類しかありません。
- 節点: 文書に登場する実体(人・組織・製品・概念)。エンティティと呼びます
- 辺: 実体どうしの関係。「田中 —(所属)→ 開発部」「開発部 —(担当)→ 案件X」のような線
ここで効くのが集約です。「田中」が200通にばらばらに登場していても、グラフの上ではたった1つの節点になり、200通ぶんの関係がそこに線として集まります。文書のままなら200箇所を読まないと見えなかった全体像が、節点1つで手に入る。
もう1つが辿れることです。「田中 → 案件X → 発注元Y」のように、元の文書のどこにも一続きには書かれていない多段の関係が、線を2本辿るだけで復元できます。埋め込みの類似度検索では、「田中の資料とYの資料は言葉が全く似ていないが、Xを経由すれば繋がっている」型の関係は原理的に拾えません。
工程1: エンティティと関係を抽出する
文章から3つ組を取り出すのにLLMを使います。チャンクごとにこう指示するだけです。
次の文章から、指定した種別の実体と、実体間の関係を抽出せよ。
実体の種別: [person, organization, product, event]
出力: (実体名, 種別, 説明) と (実体A, 実体B, 関係の説明, 強さ1-10)
肝は実体の種別(entity_types)をこちらから指定している点です。指定しないとLLMは「会議」「課題」「対応」のような一般名詞まで節点にして、グラフが泥沼化します。何が主役のドメインなのかを人間が先に決める——ここが後の品質をほぼ決めます。
定番の実装テクニックがgleaning(取りこぼし回収)です。1回の抽出でLLMは必ず何割か見落とすので、同じチャンクに「まだ抽出していない実体はあるか」と数回追加で聞く。再現率とLLM呼び出し回数の素直なトレードオフです。抽出の単位がチャンクである以上、境界の設計がそのままグラフの質になる点にも注意が要ります(チャンキング戦略)。
工程2: 同じものを1つにまとめる
抽出直後のグラフはそのままでは使えません。「田中太郎」「田中」「T. Tanaka」が別々の節点になっていて、価値の源泉だった集約が起きていないからです。
同じ実体を統合する工程をエンティティ解決(名寄せ)と呼びます。表記を正規化し、残る揺れを文字列と埋め込みの近さで判定し、同一とみなしたものを1節点にまとめる。問題は計算量です。N個を総当たりで比べると約 N²/2 回で、1万個なら5000万回、10万個なら50億回。だから実務では、粗い条件で束ねる(ブロッキング)か埋め込みの近傍探索で比べる価値のある相手だけに絞ってから精査します。
コメント
コメントにはログインが必要です