GraphRAGを試してみた
マイクロソフトが開発した GraphRAG のオープンソース化に伴い、HEROZ Tech Blog がローカル環境で実証し、複雑な情報検索における精度向上と実装上の課題を報告している。
キーポイント
GraphRAG の基本機能と効果
LLM を活用してナレッジグラフを生成する手法であり、従来のエンベディング検索では困難な複雑な情報のドキュメント検索精度を向上させる。
ローカル環境での実証結果
桃太郎の物語を用いたテストで、勇気や団結などの多層的なテーマ抽出に成功し、日本語への対応も概ね良好であることが確認された。
システム統合における課題
Azure 依存度の高さやデータ保存形式の制限(メモリ・ファイル・Blob のみ)、LangChain 非対応などにより、既存システムへの組み込みには改造が必要である。
今後の展望とカスタマイズ
プロンプトの改良により日本語出力を最適化できる可能性や、ドメイン固有の適用に向けたさらなる検証が示唆されている。
影響分析・編集コメントを表示
影響分析
GraphRAG のオープンソース化は、LLM を活用した高度なナレッジグラフ構築を一般開発者にも開放し、複雑な情報検索の精度向上に新たな選択肢をもたらす。一方で、Azure 依存や独自データ形式といった実装上の課題は明確であり、企業導入には既存インフラとの統合コストやカスタマイズ工数が重要な検討要素となる。
編集コメント
GraphRAG の実用性を示す貴重な現場レポートですが、Azure 依存や独自フォーマットといった制約は、大規模システム導入前のリスク評価として強く意識すべき点です。
GraphRAGはLLMによってナレッジ(知識)グラフを生成することで、複雑な情報を含むドキュメントからの質疑応答の精度を向上させることができる手法、およびそのソフトウェアです。 GraphRAGはマイクロソフトによって開発されましたが、先日オープンソース化が発表されたので、早速試してみました。 GraphRAGをAzureで動作させる方法(GraphRAG Accelerator)もありますが、今回はローカル(手元のMac)で動作させました。
GraphRAGが使用するナレッジグラフは、ドキュメント内の複雑な情報の検索に向いていると言われています。 HEROZ ASKのドキュメント検索でも使用しているエンべディングを用いた検索は、文意に基づく曖昧検索には向いていますが、複雑な情報の検索ではカバーしきれない部分があり、気になっていました。
インストールは公式のGet Startedや解説してくださっている動画(英語)の通りに実施すると、比較的簡単にできました。 python:3
Rustのインストールは個別で実施する必要があります。
ragtest/.env: GRAPHRAG_API_KEY
ragtest/settings.yaml: GRAPHRAG_LLM_MODEL=gpt-4-turbo-preview
とりあえず桃太郎の文章を読み込ませて、Get Startedの質問(What are the top themes in this story?)を和訳した「この物語の主なテーマは何ですか?」を問い合わせてみました。
python -m graphrag.query --root ./ragtest --method global "この物語の主なテーマは何ですか?" : SUCCESS: Global Search Response: ### 物語の主なテーマ 物語「桃太郎」にはいくつかの重要なテーマが含まれています。それぞれのテーマは物語の異なる側面を強調し、全体として豊かな物語を形成しています。 #### 勇気とリーダーシップ 桃太郎の鬼ヶ島征伐の使命は、勇気とリーダーシップのテーマを中心に展開されています。桃太郎の卓越した強さ、戦略的な手腕、そして仲間を鼓舞し導く能力は、物語の中で重要な役割を果たしています [Data: Reports (2, 4, 5)]。 #### 団結とチームワーク 桃太郎と彼の忠実な家来である犬、猿、キジの協力は、団結とチームワークのテーマを強調しています。彼らの結束したスキルと献身は、鬼たちがもたらす困難を乗り越えるために不可欠です [Data: Reports (2, 4, 5)]。 #### 家族の絆と育成 桃太郎と彼を育てた老夫婦との関係は、家族の絆と育成のテーマを象徴しています。老夫婦の支援と愛情は、桃太郎が旅に出るための準備において重要な役割を果たしています [Data: Reports (1, 2)]。 #### 神の介入と運命 老夫婦が桃太郎を神の贈り物と信じることから、物語には神の介入と運命のテーマが含まれています。これにより、物語に霊的な次元が加わり、運命と神の祝福のテーマが強調されます [Data: Reports (1)]。 #### 文化的意義 「桃太郎」の物語は日本の民間伝承に深く根ざしており、強さ、リーダーシップ、団結の力といったテーマを祝うものです。また、きびだんごなどの文化的要素も含まれています [Data: Reports (2)]。 ### 結論 「桃太郎」の物語は、勇気、リーダーシップ、団結、家族の絆、神の介入、そして文化的意義といった多くのテーマを通じて、豊かで多層的な物語を提供しています。これらのテーマは、物語のキャラクターや出来事を通じて巧みに織り交ぜられ、読者に深い印象を与えます。
やや冗長ではありますが、かなり的を得た回答になっています。 そして、日本語でも大丈夫そうでした。
インデックス作成時の画面出力を見る限りでは、nodeのdescriptionが英語になっていたりするので、英語で思考している可能性があります。 付属のプロンプトは指示も例示も全て英語なので、プロンプトを改良すると日本語にできるかもしれません。
🚀 create_final_nodes level title type description ... graph_embedding top_level_node_id x y 0 0 "おじいさん" "PERSON" おじいさん (Grandfather) is an elderly character wh... ... None b45241d70f0e43fca764df95b2b81f77 0 0 1 0 "おばあさん" "PERSON" おばあさん is an elderly woman who plays a signific... ... None 4119fd06010c494caa07f439b333f4c5 0 0 2 0 "川" "GEO" "川 (river) is a geographical feature where おばあ... ... None d3835bf3dda84ead99deadbeac5d0d7d 0 0 3 0 "桃" "EVENT" "\u6843" (peach) is a significant element in t... ... None 077d2820ae1845bcbb1803379a3d1eae 0 0
GraphRAGは以下のような点で、既存のシステムに組み込むのは現段階では難しそうです。
Azureでの実行を前提としている部分が多い
データの保存形式がメモリ、ファイル(.parquet)、Azure blobの3択であり、既存のデータベースに載せる場合には自分で改造する必要がある
検索もlangchainが対応していないので、自力でchainを定義する必要がある
今回は出たばかりのGraphRAGを試してみましたが、思ったよりも苦労せずに動作して良かったです。 まだ単純な例文でしか試していませんが、もう少し込み入った文章も入力してみて、従来のエンべディングの場合と比較してみようと思います。
また、GraphRAGはプロンプトの指示文や、例示文を書き換えることで、ドメイン適用も可能そうですので、そちらも試してみたいと思います。
原文を表示
GraphRAGはLLMによってナレッジ(知識)グラフを生成することで、複雑な情報のドキュメントから質疑応答を行う際の精度を向上させることができる手法ならびにソフトウェアです。 GraphRAGはマイクロソフトが開発しましたが、先日オープンソース化が発表されましたので、早速試してみました。 GraphRAGはAzureで動作させる方法(GraphRAG Accelerator)もありますが、今回はローカル(手元のMac)で動作させました。
GraphRAGが使用しているナレッジグラフは、ドキュメント内の複雑な情報の検索に向いていると言われています。 HEROZ ASKのドキュメント検索でも使用しているエンべディング(embedding)を用いた検索は、文意に基づく曖昧検索には向いているのですが、複雑な情報の検索ではカバーしきれないがあって気になりました。
インストールは公式のGet Startedや解説してくださっている動画(英語)の通りに実施すると、わりと簡単にできました。 python:3
Rustのインストールは個別で実施する必要がある
ragtest/.env: GRAPHRAG_API_KEY
ragtest/settings.yaml: GRAPHRAG_LLM_MODEL=gpt-4-turbo-preview
とりあえずは桃太郎の文章を読み込ませて、Get Startedの質問(What are the top themes in this story?)を和訳した「この物語の主なテーマは何ですか?」を問い合わせてみました。
python -m graphrag.query --root ./ragtest --method global "この物語の主なテーマは何ですか?" : SUCCESS: Global Search Response: ### 物語の主なテーマ 物語「桃太郎」にはいくつかの重要なテーマが含まれています。それぞれのテーマは物語の異なる側面を強調し、全体として豊かな物語を形成しています。 #### 勇気とリーダーシップ 桃太郎の鬼ヶ島征伐の使命は、勇気とリーダーシップのテーマを中心に展開されています。桃太郎の卓越した強さ、戦略的な手腕、そして仲間を鼓舞し導く能力は、物語の中で重要な役割を果たしています [Data: Reports (2, 4, 5)]。 #### 団結とチームワーク 桃太郎と彼の忠実な家来である犬、猿、キジの協力は、団結とチームワークのテーマを強調しています。彼らの結束したスキルと献身は、鬼たちがもたらす困難を乗り越えるために不可欠です [Data: Reports (2, 4, 5)]。 #### 家族の絆と育成 桃太郎と彼を育てた老夫婦との関係は、家族の絆と育成のテーマを象徴しています。老夫婦の支援と愛情は、桃太郎が旅に出るための準備において重要な役割を果たしています [Data: Reports (1, 2)]。 #### 神の介入と運命 老夫婦が桃太郎を神の贈り物と信じることから、物語には神の介入と運命のテーマが含まれています。これにより、物語に霊的な次元が加わり、運命と神の祝福のテーマが強調されます [Data: Reports (1)]。 #### 文化的意義 「桃太郎」の物語は日本の民間伝承に深く根ざしており、強さ、リーダーシップ、団結の力といったテーマを祝うものです。また、きびだんごなどの文化的要素も含まれています [Data: Reports (2)]。 ### 結論 「桃太郎」の物語は、勇気、リーダーシップ、団結、家族の絆、神の介入、そして文化的意義といった多くのテーマを通じて、豊かで多層的な物語を提供しています。これらのテーマは、物語のキャラクターや出来事を通じて巧みに織り交ぜられ、読者に深い印象を与えます。
やや冗長ではありますが、かなり的を得た回答になっています。 そして、日本語でも大丈夫そうでした。
インデックス作成時の画面出力を見る限りでは、nodeのdescriptionが英語になっていたりするので、英語で思考している可能性があります。 付属のプロンプトは指示も例示も全て英語なので、プロンプトを改良すると日本語にできるかもしれません。
🚀 create_final_nodes level title type description ... graph_embedding top_level_node_id x y 0 0 "おじいさん" "PERSON" おじいさん (Grandfather) is an elderly character wh... ... None b45241d70f0e43fca764df95b2b81f77 0 0 1 0 "おばあさん" "PERSON" おばあさん is an elderly woman who plays a signific... ... None 4119fd06010c494caa07f439b333f4c5 0 0 2 0 "川" "GEO" "川 (river) is a geographical feature where おばあ... ... None d3835bf3dda84ead99deadbeac5d0d7d 0 0 3 0 "桃" "EVENT" "\u6843" (peach) is a significant element in t... ... None 077d2820ae1845bcbb1803379a3d1eae 0 0
GraphRAGは以下のような点で、既存のシステムに組み込むのは現段階では難しそうです。
Azureでの実行を前提としている部分が多い
データの保存形式がメモリ、ファイル(.parquet)、Azure blobの3択であり、既存のデータベースに載せる場合には自分で改造する必要がある
検索もlangchainが対応していないので、自力でchainを定義する必要がある
今回は出たばかりのGraphRAGを試してみましたが、思ったりよりも苦労せずに動作して良かったです。 まだ単純な例文でしか試していないですが、もう少し込み入った文章も入力してみて、従来のエンべディングの場合と比較してみようと思います。
また、GraphRAGはプロンプトの指示文や、例示文を書き換えることで、ドメイン適用も可能そうですので、そちらも試してみたいと思います。
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み