MS GraphRAGを試してみた
ExaWizards Tech Blog は、Microsoft の GraphRAG が従来の Vector RAG を凌駕する「データ全体の要約」や「関係性の抽出」能力を持つことを解説し、決算短信を用いた実装手順と処理フローを具体的に紹介している。
キーポイント
GraphRAG の核心価値と Vector RAG との違い
Vector RAG がチャンク単位での検索に留まるのに対し、GraphRAG はナレッジグラフを通じてエンティティ間の関係性を保持し、データ全体を要約したり、資料を跨ぐ質問に対して回答できる点が革新的である。
Microsoft GraphRAG の処理フローとアルゴリズム
テキストチャンクから要素を抽出・要約し、Leiden 階層アルゴリズムでコミュニティ構造を検出する「Global Search」プロセスが解説されており、これにより大規模な文書群の構造的理解が可能になる。
実装と適用事例としての決算短信分析
記事では pip によるインストールから PDF のテキスト抽出、そしてエクサウィザーズの決算短信を用いた実際の質問応答まで、具体的なコード例と共に実践的な導入方法を提示している。
GraphRAG のメリット・デメリットと適用場面
複雑な関係性の可視化や要約に優れる一方、ナレッジグラフ作成に時間とコストがかかるため、答えが固まっている単純な質問には Vector RAG の方が効率的であるという使い分けの指針を示している。
GraphRAG の設定と自動チューニング
LLM モデルやグラフ描画(embed_graph, umap)の設定変更に加え、ドメイン固有の「決算短信」向けにプロンプトを自動調整する機能を活用できる。
エンティティとコミュニティ構造の構築プロセス
テキストチャンクからエンティティや関係を抽出し、Leiden アルゴリズムで階層的なコミュニティ構造を生成、Node2Vec でベクトル表現化する一連の処理が行われる。
コミュニティレポートによる要約と検索強化
抽出されたグラフ情報から各コミュニティのレポートを自動生成・要約し、これを埋め込むことで文脈を理解した高品質な回答を可能にする。
影響分析・編集コメントを表示
影響分析
本記事は、生成 AI の情報検索技術におけるパラダイムシフトである GraphRAG の実用性を、具体的なコードと事例を通じて明確に示しており、企業内ナレッジベースの高度化を目指すエンジニアにとって即戦力となる知見を提供している。特に Microsoft が公開した手法をベースにした実装ガイドは、単なる理論解説を超えた実践的な導入の足がかりとなり、RAG システムの設計基準を見直す契機となるだろう。
編集コメント
Vector RAG の限界を打破する GraphRAG の実装手順が具体的に示されており、大規模文書処理における RAG システムの設計指針として非常に参考になります。
RAG とは、保持したドキュメントから検索して参考情報を生成 AI に渡すことで、生成 AI の学習に含まれていない情報を活用した回答が可能になる技術です。最も一般的な Vector RAG は、ドキュメントを断片化(チャンク化)し、意味合いの近いチャンクだけを利用しています。そのため、特定の情報を取得することには優れているが、データ全体についての要約や質問に対して回答することに適していません。
そこで今、GraphRAG が注目されています。
GraphRAG では、ドキュメントからナレッジグラフを生成することで、要素同士(エンティティ)の関係性を保持しています。回答時には、この関係性グラフを用い、入力クエリから派生する関係性を考慮することで、情報がチャンクで分断されることなく抽出することができます。
GraphRAG のメリット・デメリット
データ全体についての要約や質問に対して回答ができる
複数の資料からグラフを作成した上で入力クエリ(検索文)に対して近い単語や文章を抽出するため、資料をまたがった内容で出力が可能(Vector RAG の場合、チャンクごとに検索し抽出される)
質問文に関連なさそうな事柄も芋づる式に検索・取得し、回答を生成する必要がある場合に有効
ナレッジグラフを描画することで各エンティティの関係性を可視化することができる
ナレッジグラフの作成に時間・コストがかかる
質問に対して答えが固まっている場合は Vector RAG を使用する方が効率が良いように感じる
ナレッジグラフを作成する方法の自由度が高い分、作成難易度も高い
Microsoft の GraphRAG の処理手順
Microsoft の GraphRAG では global(Global Search)と local(Local Search)の 2 種類の検索方法があります。
この記事では Vector RAG が苦手な分野の Global Search に焦点を当てて説明していきます。

引用:Edge, D., Trinh, H., Cheng, N., Bradley, J., Chao, A., Mody, A., Truitt, S., & Larson, J. (2024). From Local to Global: A Graph RAG Approach to Query-Focused Summarization
Source Documents → Text Chunks
ソース文書から抽出された入力テキストをテキストチャンクに分割。長いテキストチャンクは LLM の呼び出し回数が少ないが、リコール(記憶)力の低下につながるため調整が必要。
Text Chunks → Element Instances
各テキストチャンクからグラフの情報(ノードやエッジなど)を抽出する。ドメインに特化した例を提供することで抽出精度を向上させることが可能。複数回の gleanings を行うことでエンティティの抽出漏れを防いでいる。
Element Instances → Element Summaries
抽出されたグラフの情報を要約。エッジも含んだ要約を行うことで元のテキストにある暗示的な関係も含んだ要約を作成することが可能。重複するエンティティを適切に処理する。
要素サマリー → グラフコミュニティ
前のステップで作成された要約をもとにノードがエッジで接続され、グラフが作成される。この時作成される各エッジは重み(関係の強さ)を持つ。
Leiden Hierarchical アルゴリズムを用いて内部で強く結びついたコミュニティに分割することで、大規模なグラフの階層的コミュニティ構造を効率的に検出できる。
Graph Communities → コミュニティサマリー
Leiden 階層の各コミュニティについて、報告書のような要約を作成します。これにより、データセットの全体構造と意味を理解するための独立した要素として役立つ。
要約の生成プロセス:
リーフレベルのコミュニティ: リーフレベルのコミュニティの要素サマリー(ノード、エッジ、ノードやエッジの特徴や特性)を優先順位に従って LLM のコンテキストウィンドウに追加します。優先順位は、ノードの総次数に基づいて決定する。
上位レベルのコミュニティ: 要素サマリーがコンテキストウィンドウのトークン制限内に収まらない場合、サブコミュニティの要約を優先順位に従って追加する。
Community Summary → Community Answers → Global Answer
ユーザーからのクエリに対して以下のようにグローバルな回答を行う。関連情報が均等に分布されるよう、コミュニティ要約をランダムにシャッフルし、事前に指定されたトークンサイズに分割する。
各チャンクに対して並列的に中間回答を生成し、LLM が生成した回答の有用性を 0-100 でスコアリングする。スコアが 0 の回答は除外する。
有用性スコアの高い順に中間回答を新しいコンテキストウィンドウに追加し、最終的なグローバル回答を生成する。
Microsoft が GraphRAG を出していたので使用してみた。
今回はエクサウィザーズの決算短信を使用して GraphRAG で質問を行ってみました。GraphRAG の詳細については Microsoft がドキュメントを作成しているためこちらを確認してください。
GraphRAG をインストール
pip install graphrag
ragtest の部分は自由に名前をつけて問題ないです。
mkdir -p ./ragtest/input
作成するナレッジグラフの基になるデータ
今回は自分でデータを準備していますが、以下のコードでサンプルデータを格納することも可能
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
今回は PDF を使用するため以下のコードを用いて簡単に.pdf → .txt に変換しています
import os
import pdfplumber # pip install pdfplumber が必要です
import argparse # pip install argparse が必要です
def extract_text_and_tables(pdf_path, output_txt_path):
with pdfplumber.open(pdf_path) as pdf:
all_text = ""
for page_number, page in enumerate(pdf.pages, start=1):
# テキストの抽出
text = page.extract_text()
if text:
all_text += text + "\n"
# 表の抽出
tables = page.extract_tables()
for table in tables:
for row in table:
clean_row = [cell if cell else "" for cell in row]
if None in row:
print(f"注意:{page_number}ページ目に空のセルがあります。")
all_text += ", ".join(clean_row) + "\n"
# テキストファイルへの書き込み
if not os.path.exists(output_txt_path):
os.makedirs(os.path.dirname(output_txt_path), exist_ok=True)
with open(output_txt_path, "w", encoding="utf-8") as f:
f.write(all_text)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description='PDF からテキストと表を抽出して TXT ファイルに保存します。'
)
parser.add_argument('pdf_path', type=str, help='入力の PDF ファイルのパス')
output_txt_path = "./ir_graphrag/input/pdf_to_txt.txt"
args = parser.parse_args()
extract_text_and_tables(args.pdf_path, output_txt_path)
print(f"{args.pdf_path} からテキストと表を {output_txt_path} に抽出しました。")
GraphRAG を実行するために必要な設定ファイルやプロンプトを取得するには、以下のコマンドを実行します。
python -m graphrag.index --init --root ./ragtest
./ragtest/settings.yaml で設定の変更が可能です。モデルやチャンクの設定など色々調整できますが、今回は LLM のモデルとグラフ描画のための変更をしています。
embed_graph:
enabled: false → true
umap:
enabled: false → true
snapshots:
graphml: false → true
その他の変更もできるのでこちらを参考にしてください。
Microsoft の GraphRAG には、使用するプロンプトの調整を行ってくれる機能があります。
python -m graphrag.prompt_tune --root ./ragtest --config ./ragtest/settings.yaml --domain "決算短信" --language Japanese
手軽に楽しむために必要な設定は以下のパラメータになります。
その他、chank_size や max_token などの設定も行えるため、詳細はこちらをご確認ください。
python -m graphrag.index --root ./ragtest
以下のコードで実行すると入力したデータとプロンプトをもとにインデックス処理が行われます。
実際に行っている流れをざっくり説明すると以下のようになります。説明で使用している図は Auto Tuning - GraphRAG を参考にしています。
※ 文書処理とネットワークの可視化はオプションのため、デフォルトでは使用されません。

論文の Source Documents → Text Chunks 部分に相当します。

TextUnit からエンティティ(実体)とエッジ(関係)を抽出し、要約します。また、TextUnit からクレームを抽出する処理もありますが、これはオプションのためデフォルトでは使用されていません。クレームとは、エンティティやエッジなどの要素に対する時系列情報を指します。

抽出したグラフの情報からコミュニティ構造を理解し、追加情報でグラフを拡張します。Leiden Hierarchical アルゴリズムを使用してエンティティコミュニティの階層を生成します。また、Node2Vec アルゴリズムでグラフのベクトル表現(埋め込み)を生成します。その後、エンティティとエッジのテーブルを作成します。

各コミュニティのレポートを生成し、その後に生成したコミュニティレポートを要約します。さらに、コミュニティレポートの要約を埋め込みます。最後に、コミュニティとコミュニティレポートのテーブルを作成します。
- 文書処理(オプション)

各ドキュメントを、1 で作成した TextUnit とリンクさせます。ドキュメントを平均埋め込みでベクトル化し、Umap を実行するためにドキュメントのテーブルを作成します。
- ネットワークの可視化(オプション)

ドキュメントとグラフ(ノードとエッジ)を Umap で次元削減する
python -m graphrag.query --root ./ragtest --method global "ここに質問文を入力してください"
※ Local Search を行いたい場合、--method local
実際に以下のコマンドで出力してみた結果を記します。
python -m graphrag.query --root ./ragtest --method global "エクサウィザーズの決算に対する評価を行ってください"
creating llm client with {'api_key': 'REDACTED,len=51', 'type': "openai_chat", 'model': 'gpt-4-turbo-preview', 'max_tokens': 4000, 'temperature': 0.0, 'top_p': 1.0, 'n': 1, 'request_timeout': 180.0, 'api_base': None, 'api_version': None, 'organization': None, 'proxy': None, 'cognitive_services_endpoint': None, 'deployment_name': None, 'model_supports_json': True, 'tokens_per_minute': 0, 'requests_per_minute': 0, 'max_retries': 10, 'max_retry_wait': 10.0, 'sleep_on_rate_limit_recommendation': True, 'concurrent_requests': 25}
SUCCESS: Global Search Response:
エクサウィザーズの財務状況評価
エクサウィザーズの最近の決算報告によると、同社の財務状況は著しく改善していることが示されています。特に、営業利益、財務健全性、キャッシュフローの各面で顕著な進展が見られます。
2021 年 3 月期の営業損失から大幅な改善が見られ、2022 年 3 月期にはさらに改善し、2023 年 3 月期の営業利益予想は 1,000 千円から 50,000 千円の間であることが示されています。これは、AI プラットフォームと AI プロダクトの両セグメントでの黒字化を想定しており、企業の戦略的方向性と財務健全性の向上を示しています [Data: Reports (14)]。
株式会社エクサウィザーズの財務健全性は、1 株当たり純資産額の大幅な増加、純資産の部の合計額の増加、新株予約権の増加、1 株当たり当期純損失の改善、株式分割、非支配株主持分の増加など、複数の財務指標の改善により示されています。特に、1 株当たり純資産額は 2020 年度の 31.64 円から 2021 年度には 82.44 円へと増加し、純資産の部の合計額も大幅に増加しています [Data: Reports (11)]。
必ず JSON 形式で返してください。translation フィールドのみ。他のフィールド (technical_terms 等) は一切追加しないこと — 余計なフィールドを書こうとして本文翻訳がトークン上限で打ち切られる事故を防ぐため:
{"translation": "翻訳全文"}
営業活動によるキャッシュ・フローは、2022年3月期には前年度の△528百万円から24百万円へと改善されました。これは企業の収入増加を反映しており、営業活動の効率化が成功していることを示しています。また、現金及び現金同等物(cash and cash equivalents)の残高が前連結会計年度末に比べ3,200,177千円増加し、5,537,876千円になりました。この増加は企業の流動性と財務の柔軟性を高め、将来の投資や不測の事態に対する準備ができていることを示しています [Data: Reports (27)]。
エクサウィザーズの財務報告は、同社が財務健全性、営業利益、キャッシュフローの各面で顕著な改善を遂げていることを示しています。これらの改善は、AIプラットフォームとAIプロダクトの両セグメントの黒字化、収益性の向上、および企業の成長戦略と技術投資の成果を反映しています。エクサウィザーズの将来に向けた財務戦略と成長潜在力は、市場での競争力を高め、収益性を向上させるための戦略的な取り組みとして評価されます。
出力された結果を見てみると、、、
以下のような表からもデータが取得できているように見える
営業活動によるキャッシュ・フローは、2022年3月期には前年度の△528百万円から24百万円へと改善されました。

また、資料全体から情報が抽出されていました。
”インデックスの作成” で作成した際に出力したグラフを表示してみる
import networkx as nx # pip install networkx が必要 from pyvis.network import Network # pip install pyvis が必要 net = Network(height='1000px', width='1500px') # 表示する画面のサイズ変更可能 # グラフの読み込み graph = nx.read_graphml('{summarized_graph.graphmlまでのpath}') nx.draw(graph, with_labels=True) net.from_nx(graph) net.show("pyvis.html", notebook=False)
出力されたpyvis.html
VSCodeを使用している場合、以下の手順で開くことができます 1. open in browser
※エッジの太さはWeight(重み)の値によって変わります

入力に使用したテキストデータのサイズによって作成されるグラフのサイズが変わるため、あくまで参考程度にしてください
今回のテキストデータのサイズ: 58 KB
全体を通しての処理時間は 3分18秒
ですが、今回のテキストデータはかなり小さい方だと思うのでファイルサイズと実行環境によっては処理時間が長くなることもあるのでご注意ください。
また、内訳は以下のようになります
今回、Microsoft の GraphRAG を試してみましたが、特に VectorRAG では実現が難しい - 複数ページ (チャンク) にわたる情報の検索 - 文書内の関係性の可視化について有用な機能であると感じました。
特定の検索については VectorRAG と GraphRAG の Local Search で精度検証を行う必要がありますが、Microsoft の場合、Global と Local を切り替えることで両方対応可能なため使い勝手は良いのではないかなと思います。
ただ、懸念点としては以下の 2 点が挙げられます。
今回コスト面に関しては OpenAI を使用すると算出するパラメータは見当たらないため、
コスト管理を行いながら使用する場合は Azure OpenAI の GraphRAG Accelerator を使用することをお勧めします。
Microsoft GraphRAG は簡単に試すことができますのでぜひお試しいただければと思います
原文を表示
RAGとは、保持したドキュメントから検索して参考情報を生成AIに渡すことで、生成AIの学習に含まれていない情報を活用した回答が可能になる技術です 最も一般的なVectorRAGは、ドキュメントを断片化(チャンク化)し、意味合いの近いチャンクだけを利用しています。そのため、特定の情報を取得することには優れているが、データ全体についての要約や質問に対して回答することに適していません
そこで今、GraphRAGが注目されています
GraphRAGでは、ドキュメントからナレッジグラフを生成することで、要素同士(エンティティ)の関係性を保持しています。回答時には、この関係性グラフを用い、入力クエリから派生する関係性を考慮することで、情報がチャンクで分断されることなく抽出することができます
GraphRAGのメリット・デメリット
データ全体についての要約や質問に対して回答ができる 複数の資料からグラフを作成した上で入力クエリ(検索文)に対して近い単語や文章を抽出するため、資料をまたがった内容で出力が可能(VectorRAGの場合、チャンクごとに検索し抽出される)
質問文に関連なさそうな事柄も芋づる式に検索・取得し、回答を生成する必要がある場合に有効
ナレッジグラフを描画することで各エンティティの関係性を可視化することができる
ナレッジグラフの作成に時間・コストがかかる 質問に対して答えが固まっている場合はVectorRAGを使用する方が効率が良いように感じる
ナレッジグラフを作成する方法の自由度が高い分、作成難易度も高い
MicrosoftのGraphRAGの処理手順
MicrosoftのGraphRAGではglobal(Global Search)とlocal(Local Search)の2種類の検索方法があります
この記事ではVectorRAGが苦手な分野のGlobal Searchに焦点を当てて説明していきます。
引用: Edge, D., Trinh, H., Cheng, N., Bradley, J., Chao, A., Mody, A., Truitt, S., & Larson, J. (2024). From Local to Global: A Graph RAG Approach to Query-Focused Summarization
Source Documents → Text Chunks
ソース文書から抽出された入力テキストをテキストチャンクに分割 長いテキストチャンクはLLMの呼び出し回数が少ないが、リコール(記憶)力の低下につながるため調整が必要
Text Chunks → Element Instances
各テキストチャンクからグラフの情報(ノードやエッジなど)を抽出する ドメインに特化した例を提供することで抽出精度を向上させることが可能
複数回のgleaningsを行うことでエンティティの抽出漏れを防いでいる
Element Instances → Element Summaries
抽出されたグラフの情報を要約 エッジも含んだ要約を行うことで元のテキストにある暗示的な関係も含んだ要約を作成することが可能
重複するエンティティを適切に処理する
Element Summaries → Graph Communities
前のステップで作成された要約をもとにノードがエッジで接続され、グラフが作成される この時作成される各エッジは重み(関係の強さ)を持つ
Leiden Hierarchicalアルゴリズムで内部で強く結びついたコミュニティに分割することで、大規模なグラフの階層的コミュニティ構造を効率的に検出できる
Graph Communities → Community Summary
Leiden階層の各コミュニティについて、報告書のような要約を作成します。これにより、データセットの全体構造と意味を理解するための独立した要素として役立つ。
要約の生成プロセス: リーフレベルのコミュニティ: リーフレベルのコミュニティの要素要約(ノード、エッジ、ノードやエッジの特徴や特性)を優先順位に従ってLLMのコンテキストウィンドウに追加します。優先順位は、ノードの総次数に基づいて決定する
上位レベルのコミュニティ: 要素要約がコンテキストウィンドウのトークン制限内に収まらない場合、サブコミュニティの要約を優先順位に従って追加する
Community Summary → Community Answers → Global Answer
ユーザーからのクエリに対して以下のようにクローバルな回答を行う 関連情報が均等に分布されるよう、コミュニティ要約をランダムにシャッフルし、事前に指定されたトークンサイズに分割する
各チャンクに対して並列的に中間回答を生成し、LLMが生成した回答の有用性を0-100でスコアリングする。スコアが0の回答は除外
有用性スコアの高い順に中間回答を新しいコンテキストウィンドウに追加し、最終的なグローバル回答を生成する
MicrosoftがGraphRAGを出していたので使用してみた
今回はエクサウィザーズの決算短信を使用してGraphRAGで質問を行ってみました GraphRAGの詳細についてはMicrosoftがドキュメントを作成しているためこちらを確認してください
GraphRAGをインストール
pip install graphrag
ragtestの部分は自由に名前をつけて問題ないです
mkdir -p ./ragtest/input
作成するナレッジグラフの基になるデータ
今回は自分でデータを準備していますが、以下のコードでサンプルデータを格納することも可能
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
今回はPDFを使用するため以下のコードを用いて簡単に.pdf → .txtに変換しています
import os import pdfplumber # pip install pdfplumberが必要 import argparse # pip install argparseが必要 def extract_text_and_tables(pdf_path, output_txt_path): with pdfplumber.open(pdf_path) as pdf: all_text = "" for page_number, page in enumerate(pdf.pages, start=1): # Extract text text = page.extract_text() if text: all_text += text + "\n" # Extract tables tables = page.extract_tables() for table in tables: for row in table: clean_row = [cell if cell else "" for cell in row] if None in row: print(f"注意: {page_number}ページ目に空のセルがあります。") all_text += ", ".join(clean_row) + "\n" # Write to text file if not os.path.exists(output_txt_path): os.makedirs(os.path.dirname(output_txt_path), exist_ok=True) with open(output_txt_path, "w", encoding="utf-8") as f: f.write(all_text) if __name__ == "__main__": parser = argparse.ArgumentParser( description='PDFからテキストと表を抽出してTXTファイルに保存します。' ) parser.add_argument('pdf_path', type=str, help='入力のPDFファイルのパス') output_txt_path = "./ir_graphrag/input/pdf_to_txt.txt" args = parser.parse_args() extract_text_and_tables(args.pdf_path, output_txt_path) print(f"{args.pdf_path} からテキストと表を {output_txt_path} に抽出しました。")
GraphRAGを実行するために必要な設定ファイルやプロンプトを取得
python -m graphrag.index --init --root ./ragtest
./ragtest/settings.yaml で設定の変更が可能です。 モデルやチャンクの設定など色々調整できますが、今回はLLMのモデルとグラフ描画のための変更をしています。
embed_graph: enabled: false → true umap: enabled: false → true snapshots: graphml: false → true
その他の変更もできるのでこちらを参考にしてください。
MicrosoftのGraphRAGには使用するプロンプトの調整を行ってくれる機能があります。
python -m graphrag.prompt_tune --root ./ragtest --config ./ragtest/settings.yaml --domain "決算短信" --language Japanese
手軽に楽しむために必要な設定は以下のパラメータになります
その他、chank_sizeやmax_tokenなどの設定も行えるため、詳細はこちらをご確認ください
python -m graphrag.index --root ./ragtest
以下のコードで実行すると入力したデータとプロンプトをもとにインデックス処理が行われます。
実際に行っている流れをざっくり説明すると以下のようになります 説明を使用している図は Auto Tuning - GraphRAG を参考にしています。
※ 文書処理とネットワークの可視化はoptionのため、デフォルトでは使用されません。

論文のSource Documents → Text Chunks部分に相当

TextUnitからエンティティとエッジ(関係)を抽出し、要約する TextUnitからクレームを抽出する(オプションのため、デフォルトでは使用していない) クレームはエンティティやエッジなどの要素に対する時系列情報

抽出したグラフの情報からコミュニティ構造を理解し、追加情報でグラフを拡張する Leiden Hierarchicalアルゴリズムを使用してエンティティコミュニティの階層を生成する
Node2Vec アルゴリズムでグラフのベクトル表現を生成する
エンティティとエッジのテーブルを作成

各コミュニティのレポートを生成
生成したコミュニティレポートを要約
コミュニティレポートの要約を埋め込む
コミュニティとコミュニティレポートのテーブルを作成
5. 文書処理(option)

各ドキュメントを1で作成したTextUnitとリンクさせる
ドキュメントを平均埋め込みでベクトル化する
Umapを実行するためにドキュメントのテーブルを作成する
6. ネットワークの可視化(option)

ドキュメントとグラフ(ノードとエッジ)をUmapで次元削減する
python -m graphrag.query --root ./ragtest --method global "ここに質問文を入力してください"
※ Local Searchを行いたい場合、--method local
実際に以下のコマンドで出力してみた結果を記します。
python -m graphrag.query --root ./ragtest --method global "エクサウィザーズの決算に対する評価を行ってください"
creating llm client with {'api_key': 'REDACTED,len=51', 'type': "openai_chat", 'model': 'gpt-4-turbo-preview', 'max_tokens': 4000, 'temperature': 0.0, 'top_p': 1.0, 'n': 1, 'request_timeout': 180.0, 'api_base': None, 'api_version': None, 'organization': None, 'proxy': None, 'cognitive_services_endpoint': None, 'deployment_name': None, 'model_supports_json': True, 'tokens_per_minute': 0, 'requests_per_minute': 0, 'max_retries': 10, 'max_retry_wait': 10.0, 'sleep_on_rate_limit_recommendation': True, 'concurrent_requests': 25}
SUCCESS: Global Search Response:
エクサウィザーズの財務状況評価
エクサウィザーズの最近の決算報告によると、同社の財務状況は著しく改善していることが示されています。特に、営業利益、財務健全性、キャッシュフローの各面で顕著な進展が見られます。
2021年3月期の営業損失から大幅な改善が見られ、2022年3月期にはさらに改善し、2023年3月期の営業利益予想は1,000千円から50,000千円の間であることが示されています。これは、AIプラットフォームとAIプロダクトの両セグメントでの黒字化を想定しており、企業の戦略的方向性と財務健全性の向上を示しています [Data: Reports (14)]。
株式会社エクサウィザーズの財務健全性は、1株当たり純資産額の大幅な増加、純資産の部の合計額の増加、新株予約権の増加、1株当たり当期純損失の改善、株式分割、非支配株主持分の増加など、複数の財務指標の改善により示されています。特に、1株当たり純資産額は2020年度の31.64円から2021年度には82.44円へと増加し、純資産の部の合計額も大幅に増加しています [Data: Reports (11)]。
営業活動によるキャッシュ・フローは、2022年3月期には前年度の△528百万円から24百万円へと改善されました。これは企業の収入増加を反映しており、営業活動の効率化が成功していることを示しています。また、現金及び現金同等物の残高が前連結会計年度末に比べ3,200,177千円増加し、5,537,876千円になりました。この増加は企業の流動性と財務の柔軟性を高め、将来の投資や不測の事態に対する準備ができていることを示しています [Data: Reports (27)]。
エクサウィザーズの財務報告は、同社が財務健全性、営業利益、キャッシュフローの各面で顕著な改善を遂げていることを示しています。これらの改善は、AIプラットフォームとAIプロダクトの両セグメントの黒字化、収益性の向上、および企業の成長戦略と技術投資の成果を反映しています。エクサウィザーズの将来に向けた財務戦略と成長潜在力は、市場での競争力を高め、収益性を向上させるための戦略的な取り組みとして評価されます。
出力された結果を見てみると、、、
以下のような表からもデータが取得できているように見える
営業活動によるキャッシュ・フローは、2022年3月期には前年度の△528百万円から24百万円へと改善されました。

また、資料全体から情報が抽出されていました。
”インデックスの作成” で作成した際に出力したグラフを表示してみる
import networkx as nx # pip install networkx が必要 from pyvis.network import Network # pip install pyvis が必要 net = Network(height='1000px', width='1500px') # 表示する画面のサイズ変更可能 # グラフの読み込み graph = nx.read_graphml('{summarized_graph.graphmlまでのpath}') nx.draw(graph, with_labels=True) net.from_nx(graph) net.show("pyvis.html", notebook=False)
出力されたpyvis.html
VSCodeを使用している場合、以下の手順で開くことができます 1. open in browser
※エッジの太さはWeightの値によって変わります

入力に使用したテキストデータのサイズによって作成されるグラフのサイズが変わるため、あくまで参考程度にしてください
今回のテキストデータのサイズ: 58 KB
全体を通しての処理時間は 3分18秒
ですが、今回のテキストデータはかなり小さい方だと思うのでファイルサイズと実行環境によっては処理時間が長くなることもあるのでご注意ください。
また、内訳は以下のようになります
今回、MicrosoftのGraphRAGを試してみましたが、特にVectorRAGでは実現が難しい - 複数ページ(チャンク)にわたる情報の検索 - 文書内の関係性の可視化
について有用な機能であると感じました。
特定の検索についてはVectorRAGとGraphRAGのLocal Searchで精度検証を行う必要がありますが、Microsoftの場合、GlobalとLocalを切り替えることで両方対応可能なため使い勝手は良いのではないかなと思います。
ただ、懸念点としては以下の2点が挙げられます。
今回コスト面に関してはOpenAIを使用すると算出するパラメータは見当たらないため、
コスト管理を行いながら使用する場合はAzure OpenAI の GraphRAG Accelerator を使用することをお勧めします。
Microsoft GraphRAGは簡単に試すことができますのでぜひお試しいただければと思います
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み