🐨

Graph RAGで作成されたナレッジグラフを可視化してみた

2024/11/24に公開

7月にMicrosoftからGraph RAGが登場したものの、ナレッジグラフはどうやって可視化するのだろうと思ってました。
ドキュメントの中ではGephiを使うことを勧められてますが、できれば違う方法で実現したいです。

GraphRAGのGitHubのリポジトリを見たら可視化できるサンプルコードが含まれてました。
neo4jを使う方法とyfiles-jupyter-graphsを使う方法の2つあります。

今回は後者のyfiles-jupyter-graphsを使って試してみます。

データの用意

使用するデータ

いい感じのナレッジグラフが作成されそうな、Wikipediaの「スター・ウォーズの登場人物一覧」画面のテキストを使います。

https://ja.wikipedia.org/wiki/スター・ウォーズの登場人物一覧

データの取り込み

pip install wikipediaapi


wikipedia.py
import wikipediaapi

def get_wiki_page(search_word: str):
    wiki = wikipediaapi.Wikipedia("KnowledgeData",'ja')
    page = wiki.page(search_word)

    if page.exists():
        print("タイトル: %s" % page.title)
        print("概要: %s" % page.summary[0:1000])

        filename = f"{search_word}.txt"
        with open(filename, "w", encoding="utf-8") as f:
            f.write(page.text + "\n")
    else:
        print("ページが見つかりませんでした。")


main.py
from wikipedia import get_wiki_page

if __name__ == "__main__":
    get_wiki_page("スター・ウォーズの登場人物一覧")

インデックス作成

GraphRAGのドキュメントに記載の通り進めていきます。

https://microsoft.github.io/graphrag/get_started/

1. パッケージインストール

pip install graphrag


2. データを配置

mkdir -p ./ragtest/input


先ほどwikipediaから作成したファイルをinputフォルダ配下に入れる。


3. 初期化

graphrag init --root ./ragtest


  • .envファイルのAPI_KEYにはAzure OpenAIリソースのキーを設定
  • settings.yamlファイルにはそれぞれ使用するエンドポイントやモデル名を入力


4. パイプラインの実行

graphrag index --root ./ragtest


以下のように成功すればOK

ナレッジグラフの可視化

ここから本題
Notebookのコード通りに進めていきます。

https://github.com/microsoft/graphrag/blob/main/examples_notebooks/community_contrib/yfiles-jupyter-graphs/graph-visualization.ipynb

可視化してるコードは以下。
デフォルトはCircularですが、HierarchicでもOrganicでもいいとのこと。

graph-visualization.ipynb
w.circular_layout()
display(w)


Circularはこんな感じ。

ノードが円状に配置されます。
影響の大きいノードは大きくなるものの、イマイチぱっと分かりにくい印象。


拡大してみるとダースベイダーノードの隣に「パルパティーン」とか「銀河帝国」ノードがあるので、ある程度関連性が近いノードで隣り合わせになってる??


Hierarchicはこんな感じ

階層型に配置されます。
さっきより関連しているノードの関係がわかりやすくなりました。


主人公のルークノードがグラフの真ん中にあります。


Organicはこんな感じ

「GraphRAGといえば」の図で、力学モデルに基づいてノードが配置されます。


Organicは「static」と「interactive」の2パターンあって、interactiveだとノードを動かすことができます。
自分で動かせるの結構いいなー


こんな機能もある

機能がもっとあって便利そうだったので紹介

1. 近いノードのみを表示

近さもDepthから変更することができます。
※1~5段階で近いノードを表示(1が1番関連性が近いノード郡)


2. 検索機能

キーワード検索可能のようです。
検索結果をクリックしたら関連ノードをハイライトしてくれます。


3. 可視化方法の簡単な変更

コード内のメソッドを毎回変えて実行する必要はない模様。


気になるのが、レイアウトの一つに地理に基づいた可視化もありました。
ちょっと使い道がイメージつかめませんでした。


4. ブラウザでも可視化可能

jsonファイルをローカルに落として、data-explorerで見れるっぽいです。


できた。
エンジニアじゃない人でも簡単に見れるのいいね

次回

作成されたナレッジグラフの保存方法を調べてみます。
Azure PostgreSQLかCosmos DBになるのかな??

ヘッドウォータース

Discussion