ナレッジグラフは「知識をエンティティと関係性のグラフ構造で表現する」データモデルだ。組織知識の構造化・推薦システム・不正検知・GraphRAGによる高精度回答生成まで、LLMと組み合わせることでビジネス価値が大きく広がる。本記事では構築手法からビジネス活用まで実装例付きで解説する。
ナレッジグラフとは
ナレッジグラフは知識を「エンティティ (ノード) → 関係 (エッジ) → エンティティ (ノード)」という「トリプル」で表現するデータモデルだ。例えば「Googleは創業した→ラリー・ペイジ」「ラリー・ペイジは創業した→Alphabet」のようなトリプルを大量に蓄積することで、複雑な知識の関係性を機械が処理できる形で表現できる。
【ナレッジグラフの構造図】
エンティティ (ノード) 関係 (エッジ) エンティティ (ノード)
+----------+ -------------> +---------+
| Google |----[創業者]------------------->|ラリー・ペイジ|
+----------+ -------------> +---------+
| |
[所在地] [出身校]
| |
+----+-----+ +-----------+
|カリフォルニア| |スタンフォード大|
+----------+ +-----------+
|
[競合他社]
|
+----+-----+
| Microsoft | <-- 別のエンティティへの関係
+----------+
このネットワーク全体が「ナレッジグラフ」
ナレッジグラフの構築手法
ナレッジグラフの構築方法は手動・NLP自動抽出・LLM活用の3アプローチがある。それぞれトレードオフがあり、用途に応じて選択または組み合わせる。
| 手法 | 精度 | コスト | スケーラビリティ | 必要スキル | 適した場面 |
|---|---|---|---|---|---|
| 手動構築 (ドメイン専門家) | 最高 | 高 (人的工数) | 低 | ドメイン知識 | 医療・法律など高精度が必須の狭いドメイン |
| NLP自動抽出 (NER+RE) | 中 | 中 (学習コスト) | 高 | ML/NLPエンジニア | 大量テキストからの汎用的な関係抽出 |
| LLMによる抽出 | 高 | 低〜中 (API費用) | 高 | プロンプト設計 | 多様なドメイン・高速なPoC構築 |
| 既存KBの取り込み | 高 (ソース次第) | 低 | 中 | データエンジニア | Wikipedia/DBpedia等の公開KBがある場合 |
import anthropic
import json
client = anthropic.Anthropic()
def extract_triples_with_llm(text: str) -> list[dict]:
"""LLMでテキストからナレッジグラフのトリプルを抽出する"""
prompt = f"""以下のテキストから、エンティティと関係性のトリプル (subject, predicate, object) を抽出してください。
JSON配列形式で返してください。
テキスト: {text}
例:
[
{{"subject": "Claude", "predicate": "開発した", "object": "Anthropic"}},
{{"subject": "Anthropic", "predicate": "設立年", "object": "2021年"}}
]"""
response = client.messages.create(
model="claude-3-5-haiku-20241022",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
try:
content = response.content[0].text
start = content.find("[")
end = content.rfind("]") + 1
triples = json.loads(content[start:end])
return triples
except json.JSONDecodeError:
return []
sample_text = "Anthropicは2021年にDario AmodeiとDaniela Amodeiらによって設立されたAI安全性研究企業です。Anthropicはクロードを開発しています。"
triples = extract_triples_with_llm(sample_text)
for t in triples:
print(f"{t['subject']} --[{t['predicate']}]--> {t['object']}")
グラフデータベースの選定
ナレッジグラフを格納・クエリするためのグラフデータベースの選定は、スケールと運用体制に応じて行う。
| DB | ライセンス | クエリ言語 | スケーラビリティ | マネージド対応 | コスト |
|---|---|---|---|---|---|
| Neo4j | Community (OSS) / Enterprise (商用) | Cypher | 中 (単一ノード) | AuraDB (クラウド版) | 無料〜高額 |
| Amazon Neptune | 商用 (AWS) | Gremlin / SPARQL / openCypher | 高 (クラスター) | ◎ (マネージド) | 利用量課金 |
| TigerGraph | 商用 (無料枠あり) | GSQL | 最高 (分散) | TigerGraph Cloud | 中〜高 |
| Memgraph | OSS | Cypher | 中 | Memgraph Cloud | 無料〜中 |
ビジネス活用パターン
ナレッジグラフのビジネス活用は4つのパターンに集約される。
- 組織知識管理: 社内の製品・人・プロジェクト・技術の関係性をグラフで管理。「AプロジェクトでBの技術を使ったCさん」という複雑な検索が可能になる
- 推薦システム: ユーザー・商品・コンテンツの関係性グラフから協調フィルタリングより高度な推薦を実現。関係の多ホップ推論が可能
- 不正検知: 金融取引・ネットワーク通信のグラフ分析で、個別のトランザクションでは見えないパターンの不正を検出
- GraphRAG: ナレッジグラフをRAGの検索ソースとして活用。エンティティ間の関係性を考慮した高精度な回答生成が可能になる
# Neo4jでのCypherクエリ例
# 特定エンティティからの関係を探索する
# 1. ノードの作成
CREATE (anthropic:Company {name: "Anthropic", founded: 2021})
CREATE (claude:Product {name: "Claude", version: "3.5"})
CREATE (dario:Person {name: "Dario Amodei", role: "CEO"})
# 2. 関係の作成
CREATE (anthropic)-[:DEVELOPED]->(claude)
CREATE (dario)-[:FOUNDED]->(anthropic)
CREATE (dario)-[:LEADS]->(anthropic)
# 3. 2ホップ先の関係を探索
MATCH (person:Person)-[:FOUNDED]->(company:Company)-[:DEVELOPED]->(product:Product)
RETURN person.name, company.name, product.name
# 4. 最短パスの検索 (不正検知に有用)
MATCH path = shortestPath(
(a:Account {id: "ACC001"})-[*]-(b:Account {id: "ACC999"})
)
RETURN path
LLM×ナレッジグラフの可能性
GraphRAGはナレッジグラフとRAGを組み合わせた手法で、通常のベクトル検索RAGが苦手とする「複数エンティティをまたぐ複雑な質問」に高精度で回答できる。「Aの会社の創業者と同じ大学を出た人が創業した別の会社の製品は何か」という多ホップ推論が、ナレッジグラフのグラフ探索で実現可能になる。Microsoftが公開したGraphRAGの実装はOSSとして利用でき、社内ドキュメントからのナレッジグラフ構築と高精度検索が実現できる。
まとめ
- ナレッジグラフはエンティティと関係性のトリプルで知識を構造化するデータモデル
- LLMによる自動トリプル抽出でPoC段階の構築コストが大幅に低下している
- 小〜中規模はNeo4j、大規模・クラウドネイティブはAmazon Neptuneが選択肢
- GraphRAGとの組み合わせで通常のRAGでは困難な多ホップ推論が可能になる
よくある質問
Q. ナレッジグラフとは?
知識をエンティティ (ノード) と関係性 (エッジ) のグラフ構造で表現するデータモデルです。「AはBと関係がある」という形で知識を構造化します。
Q. ナレッジグラフの構築にはどのくらいの期間がかかりますか?
規模に依存しますが、小規模 (数千トリプル) なら1〜2ヶ月、大規模 (数百万トリプル) なら6ヶ月以上が目安です。LLMを活用すると構築速度が大幅に向上します。
Q. ナレッジグラフとRAGの関係は?
ナレッジグラフをRAGの検索ソースとして使うGraphRAGにより、エンティティ間の関係性を考慮した高精度な回答生成が可能になります。