0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI for Scienceとは? #2 ─ Microsoft GraphRAG による知識データベースの構築

0
Posted at

はじめに

前回の記事では、AI for Science(AI4Science) の概要と、Microsoftが推進する「科学の第5のパラダイム」について解説しました。

AI for Scienceには2つの柱があります。

  1. シミュレーション・生成: MatterSim、MatterGen、Aurora などのAIエミュレーター
  2. ナレッジ探索: GraphRAG、LazyGraphRAG による構造化された知識検索

本記事では、2つ目の柱であるGraphRAGについて、概念から実際のインストール・設定までを詳しく解説します。研究者が自分のデータで試せるよう、Azure OpenAI ServiceOllama(ローカルLLM) の両方の設定方法を紹介します。

目次

  1. GraphRAGとは何か?
  2. 従来のRAGとの違い
  3. GraphRAGの処理フロー
  4. インストールと初期設定
  5. Azure OpenAI Serviceでの設定
  6. Ollama(ローカルLLM)での設定
  7. インデックス構築の実行
  8. クエリの実行
  9. 研究者向けユースケース
  10. まとめ

GraphRAGとは何か?

GraphRAGは、Microsoftが開発したグラフベースのRAG(Retrieval-Augmented Generation) 手法です[1]

基本情報

項目 詳細
開発元 Microsoft Research
ライセンス MIT(オープンソース)
最新バージョン v2.7.0(2025年10月)
GitHub Stars 30,500+
対応Python 3.10〜3.12
対応LLM OpenAI, Azure OpenAI, Ollama(Proxy経由), LiteLLM対応100+モデル
GitHub microsoft/graphrag
ドキュメント microsoft.github.io/graphrag

GraphRAGの特徴

従来のRAGが「ベクトル類似度による検索」に依存するのに対し、GraphRAGはナレッジグラフを構築することで、より深い理解と推論が可能になります。

特徴 説明
エンティティ抽出 文書から人物、組織、概念などを自動抽出
関係性の構造化 エンティティ間の関係をグラフで表現
コミュニティ検出 Leiden法による階層的クラスタリング
コミュニティ要約 各クラスタの要約を事前生成
複数の検索モード Global / Local / DRIFT / Basic の4種類

従来のRAGとの違い

Baseline RAGの限界

従来のRAG(Baseline RAG)は、以下のようなケースで性能が低下します。

課題 説明
点と点を繋げない 異なる文書に散在する情報を統合できない
全体像の把握が苦手 「この分野の主要なトレンドは?」といった俯瞰的な質問に弱い
大規模文書の要約困難 コンテキスト長の制限により、全体を把握できない

GraphRAGの解決策

観点 Baseline RAG GraphRAG
検索方式 ベクトル類似度 グラフ構造 + ベクトル
関係性理解 弱い 強い
全体像把握 困難 コミュニティ要約で対応
俯瞰的質問 苦手 Global Searchで対応
特定エンティティの質問 普通 Local Searchで対応

GraphRAGの処理フロー

GraphRAGは大きくインデックス構築(Index)クエリ(Query) の2フェーズで構成されます。

インデックス構築フェーズ

ステップ 説明 LLM使用
TextUnit分割 文書を分析可能な単位に分割
エンティティ抽出 人物、組織、概念などを抽出
関係性抽出 エンティティ間の関係を抽出
グラフ構築 ナレッジグラフを構築
コミュニティ検出 Leiden法でクラスタリング
コミュニティ要約 各コミュニティの要約を生成

⚠️ 注意: インデックス構築はLLM APIを多用するため、コストがかかります。小さなデータセットから始めることを強く推奨します。

クエリフェーズ

GraphRAGは4種類の検索モードを提供します。

モード 用途 特徴
Global Search 俯瞰的な質問 コミュニティ要約を活用、「全体像は?」に強い
Local Search 特定エンティティの質問 関連エンティティをファンアウト
DRIFT Search Local + コミュニティ情報 Local Searchにコミュニティ文脈を追加
Basic Search シンプルな質問 標準的なベクトル検索(Top-K)

インストールと初期設定

前提条件

  • Python 3.10〜3.12
  • pip または uv(推奨)
  • LLM API(Azure OpenAI / OpenAI / Ollama)

インストール

# pipでインストール
pip install graphrag

# または uvでインストール(推奨)
uv pip install graphrag

プロジェクトの初期化

# 作業ディレクトリを作成
mkdir -p ./my-research/input

# サンプルデータを配置(例:研究論文のテキスト)
# ./my-research/input/ にテキストファイルを配置

# GraphRAGプロジェクトを初期化
graphrag init --root ./my-research

初期化により、以下のファイルが生成されます。

ファイル 説明
.env 環境変数(APIキーなど)
settings.yaml GraphRAGの設定ファイル
prompts/ プロンプトテンプレート

Azure OpenAI Serviceでの設定

Azure OpenAI Serviceを使用する場合の設定方法です。

1. 環境変数の設定

.env ファイルを編集します。

# .env
GRAPHRAG_API_KEY=your-azure-openai-api-key

2. settings.yaml の設定

# settings.yaml

models:
  # チャットモデル(GPT-4o推奨)
  default_chat_model:
    api_key: ${GRAPHRAG_API_KEY}
    type: azure_openai_chat
    model: gpt-4o
    api_base: https://your-instance.openai.azure.com
    api_version: 2024-02-15-preview
    deployment_name: your-gpt4o-deployment
    model_supports_json: true
  
  # 埋め込みモデル
  default_embedding_model:
    api_key: ${GRAPHRAG_API_KEY}
    type: azure_openai_embedding
    model: text-embedding-ada-002
    api_base: https://your-instance.openai.azure.com
    api_version: 2024-02-15-preview
    deployment_name: your-embedding-deployment

# チャンク設定
chunks:
  size: 1200
  overlap: 100

# 入力ファイル設定
input:
  type: file
  file_type: text
  base_dir: input

# 出力設定
output:
  type: file
  base_dir: output

3. Azure Managed Identity を使用する場合

APIキーの代わりにManaged Identityを使用できます。

models:
  default_chat_model:
    type: azure_openai_chat
    auth_type: azure_managed_identity  # APIキー不要
    model: gpt-4o
    api_base: https://your-instance.openai.azure.com
    api_version: 2024-02-15-preview
    deployment_name: your-gpt4o-deployment

事前に az login でAzureにログインしておく必要があります。

Ollama(ローカルLLM)での設定

プライバシーを重視する場合や、コストを抑えたい場合は、Ollamaを使用してローカルでLLMを実行できます。

1. Ollamaのインストール

# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh

# モデルのダウンロード(例:llama3.2)
ollama pull llama3.2
ollama pull nomic-embed-text

2. OllamaをProxy API経由で使用

GraphRAG v2.6.0以降では、LiteLLM を使用して100以上のモデルに対応しています。Ollamaもこの方法で使用できます。

# settings.yaml

models:
  # Ollama チャットモデル
  default_chat_model:
    type: chat
    model_provider: ollama
    model: llama3.2
    api_base: http://localhost:11434
    model_supports_json: true
  
  # Ollama 埋め込みモデル
  default_embedding_model:
    type: embedding
    model_provider: ollama
    model: nomic-embed-text
    api_base: http://localhost:11434

3. Ollama使用時の注意点

注意点 説明
JSON出力の安定性 一部のモデルはJSON形式の出力が不安定な場合があります
処理速度 ローカル実行のため、GPUがないと時間がかかります
推奨モデル llama3.2, mistral, qwen2.5 など、指示追従性の高いモデル
メモリ要件 7Bモデルで8GB以上、13Bモデルで16GB以上のVRAM推奨

💡 ヒント: まずはAzure OpenAIまたはOpenAI APIで動作確認してから、Ollamaに移行することを推奨します。

インデックス構築の実行

設定が完了したら、インデックス構築を実行します。

# インデックス構築
graphrag index --root ./my-research

実行中の出力例

⠋ GraphRAG Indexer
├── Loading Input (text) - 5 files loaded
├── create_base_text_units
├── create_final_documents
├── extract_graph
│   ├── Processing chunk 1/50...
│   └── Processing chunk 50/50... ✓
├── create_final_entities
├── create_final_relationships
├── create_final_community_reports
└── ✓ All workflows completed

出力ファイル

インデックス構築が完了すると、output/ ディレクトリに以下のファイルが生成されます。

ファイル 説明
create_final_entities.parquet 抽出されたエンティティ
create_final_relationships.parquet エンティティ間の関係
create_final_community_reports.parquet コミュニティ要約
create_final_text_units.parquet テキストチャンク
create_final_documents.parquet 入力文書メタデータ

クエリの実行

インデックス構築が完了したら、クエリを実行できます。

Global Search(俯瞰的な質問)

graphrag query \
  --root ./my-research \
  --method global \
  --query "この分野の主要な研究トレンドは何か?"

適した質問例:

  • 「この分野の全体像を教えてください」
  • 「主要な研究テーマは何ですか?」
  • 「どのような組織が関わっていますか?」

Local Search(特定エンティティの質問)

graphrag query \
  --root ./my-research \
  --method local \
  --query "〇〇教授の研究内容と主要な共同研究者は?"

適した質問例:

  • 「〇〇とは何ですか?」
  • 「〇〇と△△の関係は?」
  • 「〇〇に関連する研究者は?」

DRIFT Search(Local + コミュニティ情報)

graphrag query \
  --root ./my-research \
  --method drift \
  --query "〇〇技術の応用分野と将来性は?"

Basic Search(シンプルなベクトル検索)

graphrag query \
  --root ./my-research \
  --method basic \
  --query "〇〇の定義は?"

研究者向けユースケース

ユースケース1: 文献レビューの効率化

課題: 数百本の論文を読んで、分野の全体像を把握したい

解決策:

  1. 論文のテキストを input/ に配置
  2. graphrag index でナレッジグラフを構築
  3. graphrag query --method global で全体像を把握
# 例: 材料科学分野の論文レビュー
graphrag query \
  --root ./materials-papers \
  --method global \
  --query "固体電解質研究の主要なアプローチと課題は何か?"

ユースケース2: ドメイン知識のナレッジベース構築

課題: 研究室の過去の実験ノート・報告書を構造化して検索したい

解決策:

  1. 実験ノート・報告書をテキスト化
  2. GraphRAGでナレッジグラフを構築
  3. 類似実験や関連知見を検索
# 例: 過去の実験から類似事例を検索
graphrag query \
  --root ./lab-notes \
  --method local \
  --query "リチウムイオン電池の電解質に関する過去の実験結果は?"

ユースケース3: 研究動向の可視化

GraphRAGが生成するナレッジグラフは、可視化ツールで表示できます。

# GraphMLスナップショットを有効化
# settings.yaml に追加
snapshots:
  graphml: true

生成された .graphml ファイルは、GephiCytoscape で可視化できます。

コスト最適化のヒント

GraphRAGのインデックス構築はLLM APIを多用するため、コストに注意が必要です。

最適化手法 説明
小さく始める まず数ファイルでテスト
チャンクサイズ調整 chunks.size を大きくすると呼び出し回数が減少
fastモード NLPベースの抽出(LLM不使用)も選択可能
モデル選択 gpt-4o-mini は gpt-4o より低コスト
キャッシュ活用 再実行時はキャッシュが効く
# コスト最適化例
chunks:
  size: 2000  # デフォルト1200より大きく
  overlap: 200

extract_graph:
  max_gleanings: 0  # 追加抽出を無効化(精度とのトレードオフ)

まとめ

GraphRAGの要点

  1. グラフベースのRAG: ナレッジグラフにより、従来のRAGでは困難だった関係性理解・全体像把握が可能
  2. 4種類の検索モード: Global / Local / DRIFT / Basic で、質問タイプに応じた検索が可能
  3. オープンソース: MITライセンスで公開、研究利用に最適
  4. 柔軟なLLM対応: Azure OpenAI, OpenAI, Ollama など多様な環境に対応

研究者へのアクションアイテム

アクション リソース
GraphRAGを試す Getting Started
詳細な設定を学ぶ Configuration Guide
コードを読む GitHub
論文を読む arXiv
コミュニティに参加 GitHub Discussions

次回予告

次回の記事では、GraphRAGを使った実際の研究論文のナレッジグラフ構築を行い、文献レビューの効率化を実践します。

参考文献

[1] GraphRAG: Unlocking LLM discovery on narrative private data - Microsoft Research Blog, 2024-02-13

[2] GraphRAG: A Modular Graph-Based Retrieval-Augmented Generation System - arXiv, 2024-04-24

[3] microsoft/graphrag - GitHub - Microsoft, MIT License

[4] GraphRAG Documentation - Microsoft

[5] AI for Scienceとは? #1 - 前回の記事(リンク更新予定)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?