Graph RAGで作成されたナレッジグラフを可視化してみた
7月にMicrosoftからGraph RAGが登場したものの、ナレッジグラフはどうやって可視化するのだろうと思ってました。
ドキュメントの中ではGephi
を使うことを勧められてますが、できれば違う方法で実現したいです。
GraphRAGのGitHubのリポジトリを見たら可視化できるサンプルコードが含まれてました。
neo4j
を使う方法とyfiles-jupyter-graphs
を使う方法の2つあります。
今回は後者のyfiles-jupyter-graphs
を使って試してみます。
データの用意
使用するデータ
いい感じのナレッジグラフが作成されそうな、Wikipediaの「スター・ウォーズの登場人物一覧」画面のテキストを使います。
データの取り込み
pip install wikipediaapi
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("ページが見つかりませんでした。")
from wikipedia import get_wiki_page
if __name__ == "__main__":
get_wiki_page("スター・ウォーズの登場人物一覧")
インデックス作成
GraphRAGのドキュメントに記載の通り進めていきます。
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のコード通りに進めていきます。
可視化してるコードは以下。
デフォルトはCircular
ですが、Hierarchic
でもOrganic
でもいいとのこと。
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