LoginSignup
43
27

GraphRAGを試しました。(Neo4jでナレッジグラフを作成)

Last updated at Posted at 2024-03-20

昨日、最近話題となったGraphRAGを試しました。
GraphRAGとは、データをナレッジグラフの形式で保管し、RAGで検索する際にはナレッジグラフで回答を探すという技術です。通常のRAGと比べると、基本的には正しい情報だけが含まれているため、精度が高くなります。マイクロソフトも先日RAGとGraphRAGを比較する研究レポートを発表しました。⇩(GraphRAGの特徴と、どんな場合にRAGより精度高いのかを多角的に説明しています。)

image.png

ナレッジグラフ(Knowledge Graph)とNeo4j

ナレッジグラフは主に、ノード(node)とリレーションシップ(relationship)で構成されて、単語ごとの関係を表しています。(GoogleやYahooなどの検索エンジンもナレッジグラフに基づいて検索を行っています)

ナレッジグラフを自動的に作成するために最もよく使われているライブラリはNeo4jです。Neo4jにテキストデータとパラメーターを設定して渡したら、自動的にナレッジグラフを作成してくれます。(イメージとしては⇩)

image.png

こちらは、WikipediaのAPIを使って”toyota”に関して検索した結果をNeo4jで生成したナレッジグラフです。真ん中には”Toyota”というノードがあり、それに関連する他のノードが周りに配置されています。それらの間にはリレーションシップが示されています。例えば、ToyotaとLexusの間のリレーションシップはproduces(生産する)となっています。Lexusに関するデータをさらに追加すれば、Lexusの周りにも他のリレーションシップが広がります。(日本語wikipediaで試しましたが、なぜかエラーが出てうまくいかなかったので、英語で作りました)

Graph RAGの処理フロー

⇩の図は、LangChainが公開されたGraph RAGの処理フローです。(Graph RAGと通常のRAGを両方組み合わせしています)
流れとしては、ユーザーのprompt文をナレッジグラフと通常のベクトルストアの両方で答えを探し、LLMに結果を渡してoutputを生成する感じです。

image.png

実際ナレッジグラフから検索されたデータ(LLMに渡した内容)は以下のようです。
"トヨタはどのような会社ですか"と検索すると、先の図に示されていた”toyota”に関連する内容がテキスト形式(node⇒relationship⇒node)で整理されて返ってきます。

image.png

1個質問を試したら間違いなく回答できました。

image.png

興味ある方:

Deeplearning.aiのGraph RAGコース

43
27
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
43
27