← シリーズに戻る

ナレッジグラフとは: 表とベクトルとの3つの違い

Part 1 / 6 ナレッジグラフは要るのか 実測と構築の6章

ナレッジグラフとは、ものと、もの同士の関係を、機械が辿れる形で書いたものです。

表やベクトル検索との違いは3つあります。段数を先に決める必要があるか、関係そのものを返せるか、どんな問いが得意か。中心にあるのは、関係そのものを指して辿れるかどうかです。「AとBはどう繋がっているか」を聞かれたとき、表は繋ぎ方を人が先に決めておく必要があり、ベクトル検索は似た文書を返すだけで繋がりは返しません。グラフはエッジを辿って経路を返します。

以下、その差がどこで効くのかを、同じ問いを3つの持ち方に投げて確かめます。

Google が2012年に言い換えたこと

この言葉が広まったのは、Google が検索に導入したときです。2012年5月16日、Amit Singhal が公式ブログに「Introducing the Knowledge Graph: things, not strings」と書きました。

そのときの規模が公表されています。5億を超えるオブジェクトと、それらの間の35億を超える事実と関係です (Google 公式ブログ)。

「文字列ではなく、もの」というのが要点です。それまでの検索は、入力された文字列と一致する文字列を文書の中から探していました。ナレッジグラフを持つと、「タージ・マハル」が建物なのか歌手なのかを区別したうえで、その建物が「いつ建てられたか」「誰が建てたか」に答えられます。

文字列で探す検索と、もの として持つナレッジグラフの比較図。左の文字列で探す (それまでの検索) では、「タージ・マハル」という入力から、その文字列を含む文書が建物の話も歌手の話もどちらの話か分からないものも並んで返り、入力と同じ文字列を文書から探すだけで建物か歌手かは区別しない。右の もの として持つ (ナレッジグラフ) では、「タージ・マハル」が建物と歌手の2つのノードに分かれ、建物のノードから「いつ」の関係で建てられた年へ、「誰が」の関係で建てた人へ辿れる。建物か歌手かを区別したうえで、その建物の「いつ建てられたか」「誰が建てたか」に答える。年や人名の値は図には描いていない。2012年5月16日、Google が検索に導入したときの言い方は things, not strings

扱っている単位が、文字列から、もの と 関係 に変わっています。

中身は3つだけ

構造そのものは驚くほど単純です。

要素中身例
ノードものトウヒの木材、トウヒの階段 (マインクラフトのアイテム)
エッジもの同士の関係トウヒの木材 —材料—> トウヒの階段
属性ノードやエッジに付く値1回のクラフトに木材6個 (階段が4個できる)

この3つで書けます。(主語, 述語, 目的語) の3つ組で表す流儀もあり、これをトリプルと呼びます。

重要なのは、エッジに名前が付いていることです。「関係がある」で済ませず、「材料である」「所属している」「参照している」と書き分けられます。だから機械が「材料の関係だけを辿る」といった追い方ができます。

ノード・エッジ・属性の最小の図。トウヒの木材とトウヒの階段の2つのノードを、「材料」という名前の付いたエッジ (矢印) で繋ぎ、エッジに属性「1回に6個 (4個できる)」が付いている。下段は同じことをトリプルで書いたもので、主語 トウヒの木材、述語 材料である、目的語 トウヒの階段。エッジに名前が付いているので、機械が材料の関係だけを辿れる

同じ問いを3つの持ち方に投げる

マインクラフト (Minecraft) のクラフトを例にします。「トウヒの階段を1個作るのに、最終的に何が要るか」を聞いてみます。答えは spruce_log (トウヒの原木) ですが、階段の材料は木材で、木材の材料が原木なので、2段 (ホップ。関係を1本辿ると1段) 辿らないと出てきません。

表 (リレーショナルデータベース) の場合。

recipes テーブルを JOIN すれば出ます。ただし何段 JOIN するかを、クエリを書く人が先に決める必要があります。2段なら JOIN 2回。3段なら3回。段数が分からないものには、そのまま書けません。再帰クエリという道具はありますが、書ける人は減ります。

ベクトル検索の場合。

「トウヒの階段 作り方」に似た文書を上位から返します。返ってくるのは「トウヒの階段は木材6個で4個できる」と書かれた文書です。そこで止まります。 木材が何からできるかは別の文書に書いてあり、質問文とはあまり似ていないので、上位に来る保証がありません。似ているかどうかで拾う仕組みなので、繋がりの先は拾えません。

グラフの場合。

トウヒの階段 から 材料 のエッジを、行き止まりに当たるまで辿ります。段数を先に決める必要はありません。辿れなくなったところが答えです。

「トウヒの階段を1個作るのに、最終的に何が要るか」(答えはトウヒの原木、2段) を3つの持ち方に投げた3パネルの図。表は作るものと材料の2行を持ち、2段なら JOIN 2回とクエリを書く人が先に決めるので、段数が分からないものにはそのまま書けない。ベクトル検索は「トウヒの階段は木材6個で4個できる」の文書が上位に来るが、木材が何からできるかの文書は質問文とあまり似ておらず、木材の文書で止まる。グラフはトウヒの原木から木材、木材から階段へ材料のエッジが張られていて、階段から行き止まりまで辿ると、辿れなくなったトウヒの原木が答えになる

3つの違いを並べます。

段数を先に決める必要関係そのものを返せるか得意な問い
表要る返せる (JOIN の形で)段数が固定で、件数が多い
ベクトル検索不要返せない答えが1つの文書に書いてある
グラフ不要返せる答えが繋がりの上にある

表とグラフの差は「段数を先に決めるか」、ベクトル検索とグラフの差は「関係を返せるか」です。 違う軸なので、3つは競合というより使い分けになります。

オントロジーとの違い

サジェストによく並ぶので、ここで分けておきます。

オントロジーは語彙と規則の定義、ナレッジグラフはその定義に沿って書かれた実際のデータです。 設計図と建物の関係に近いです。

オントロジー   「人は組織に所属できる」「所属には開始日と終了日がある」
ナレッジグラフ 「この人物は2020年からこの組織に所属している」

オントロジーを持たないグラフもあります。先に語彙を決めずに、出てきたものをそのまま繋いでいく作り方です。始めるのは速く、育つほど破綻します。 同じ人物が taro_yamada と 山田太郎 と yamada-t の3つのノードに割れていく形で壊れます。

オントロジーとナレッジグラフの関係図。左の上段はオントロジー (語彙と規則の定義) で、人から組織へ「所属できる」という関係があり、所属には開始日と終了日がある。左の下段はナレッジグラフ (定義に沿って書いた実際のデータ) で、この人物からこの組織へ「所属 (2020年から)」のエッジがあり、上段の人と組織から定義に沿って書く点線が下りている。右は語彙を先に決めずに出てきたものを繋いだ場合で、taro_yamada、山田太郎、yamada-t の3つのノードが並び、同じ人物が3つのノードに割れる。始めるのは速く、育つほど破綻する

どちらを先にやるかは、対象と規模で変わります。この判断は別の記事「RDF か Property Graph か、3つの質問で決める」で扱っています。

LLM との関係

2024年以降、この言葉を聞く文脈のほとんどが LLM がらみです。中心にあるのは Microsoft Research が2024年4月に出した論文で、ベクトル検索だけでは「この文書群の主題は何か」のような全体を見る問いに答えられないという指摘から始まっています (From Local to Global: A Graph RAG Approach to Query-Focused Summarization)。

答えがどこか1箇所に書いてあるなら、それを引いてくれば済みます。答えが書かれていない場合、つまり複数の文書の関係から浮かび上がる場合、似た文書を集めるだけでは届きません。

ここがナレッジグラフの使いどころです。そして同時に、それ以外の場面では要らないということでもあります。

作れば賢くなる、ではない

最後にひとつ。「LLM は関係を辿れないからグラフが要る」という説明はよく見ますが、グラフを渡せば辿れるようになるとは限りません。

このシリーズで実際に測ったところ、思考 (thinking) を切った条件でグラフを1歩渡して効いたのは 9b と 35b でした。4b に渡すと、完全一致率は 12.7% から 1.4% に下がります (0.8b と 2b はどちらも 0%)。

条件と数字は段数の実測にあります。グラフは道具であって、下駄ではありません。

では、なぜここ数年でこの言葉を LLM の文脈で聞くようになったのか。なぜ今ナレッジグラフ 2024〜25年の3つの変化で、原典に当たって追います。


Minecraft は Mojang Synergies AB の商標です。このページは Mojang Studios および Microsoft とは無関係で、承認も後援も受けていません。クラフトデータは PrismarineJS/minecraft-data から取得しています。