HUOXIU

ナレッジグラフからGraphRAGへ:属性グラフの構築と複雑なデータ検索手法の探究

前回の記事「ナレッジグラフ + RAG が従来の RAG よりも優れている理由」では、GraphRAG のデータ構造の基礎について理解しました。この記事では、これらの概念を実際にどのように実装するかについて、より深く掘り下げていきます。

この記事では、Ravi Theja(LlamaIndexのAIエンジニア兼エバンジェリスト)による属性グラフに関するシリーズ記事を参考に、属性グラフとそれがデータの表現と検索の強化において果たす役割について考察します。この記事では、LlamaIndexを用いてGraphRAGを実装する方法を明確に理解し、導入に役立つ実践的なガイドを提供します。

  • 著者紹介: Divisin.ai の共同創設者、Divyanshu Dixit
  • オリジナルリンク

翻訳は次のとおりです。

01 進化:知識グラフから属性グラフへ

まず、ナレッジグラフ(KG)の概念を復習しましょう。ナレッジグラフは、主語、目的語、述語の3つの構造を用いて関係性を定義します。これは基本的な家系図に似ています。ナレッジグラフは人々の関係性を示しますが、個々の個人に関する詳細な情報は示しません。

出典: LlamaIndex

各ノード(緑と青​​)には、カテゴリなどの具体的な情報を持つ「ラベル」が付けられています。これは、家族の集まりでジョンが個人であり、サンフランシスコが都市であることを示す名札のようなものです。述語(エッジ)は、これらのノード間の関係(および方向)を定義します。

属性グラフ(PG)への入り口:PG構造には、主語、目的語、述語だけでなく、名前と属性値のペアなど、各実体に付随する属性も含まれます。これは、名札だけが記載された基本的な家系図から、各家族構成員の詳細な情報を含む詳細な家系図へとアップグレードするようなものです。

出典: LlamaIndex

この詳細な家系図では、ジョンは単なる人物ではなく、30歳という年齢も記録されています。サンフランシスコは単なる都市ではなく、人口850万人の都市です。興味深いことに、述語にも独自の属性を持たせることができ、実体間の関係に詳細を追加できます。例えば、ジョンとサンフランシスコの関係はどのようなものでしょうか?「ジョンは2006年からサンフランシスコに住んでいる」といった情報を追加できます。これはまるで家系図にメモを追加し、あらゆる側面を詳細に記述していくようなものです。

OpenSPGは、意味的に拡張されたプログラム可能なナレッジグラフです。GitHubアドレスは以下です。ぜひスターを付けてフォローしてください!

02 属性グラフの構築方法

では、基本的な家系図をこの包括的なオンラインデータベースにアップグレードするにはどうすればよいでしょうか?必要なのは、PGの構築とクエリというたった2つのステップだけです。順を追って説明しましょう。

出典: LlamaIndex

2.1 ステップ1: マップ抽出(構築段階)

方法は3つあります。

1. 暗黙のパス抽出:

これは本棚の整理に似ています。すべての本を読む必要はなく、順番に並べるだけです。下の図では、大きなテキストEが小さなテキストブロックA、B、Cに分割されています。これら3つの部分間の関係は、AがBの前、BがCの前と定義されており、すべてソーステキストEに属しています。したがって、ImplicitPathExtractorは元の文書をブロック(ノード)の順序付きリストと、それらの間のノード関係を語彙グラフとして分割します。さらに、このプロセスにはLLMは必要ありません。


2. シンプルLLMエクストラクター:

LLMを使ってテキストフラグメントからエンティティと関係性を抽出するのは、非常に知的な友人が本を読んで、登場人物全員とその関係性を教えてくれるようなものです。以下の例では、LLMを使ってテキストフラグメントから4つのエンティティ(太陽、猫、窓、クッション)とそれらの関係性を抽出しています。ここでのLLMは、ネイティブ関数を呼び出す必要がないため、Llama3のようなオープンソース版を使用できます。すべてのノードが同じノードラベルを使用し、各テキストフラグメントは「言及」を通じて他のエンティティと関連付けられており、これらのエンティティはさらなる関係性を持つ可能性があることに注意してください。

出典: LlamaIndex

3. SchemaLLMPathExtractor:

SchemaLLMPathExtractor は SimpleLLMExtractor に似ていますが、定義済みのスキーマを使用するため、抽出するエンティティ、ノードラベル、および関係性を事前に定義できます。これは、あなたの「賢い友人」に、本の特定のコンテンツを見つけるための質問リスト(例えば「この本の主人公、敵対者、背景設定について教えてください」など)を渡すようなものです。前述のテキストスニペットを例に挙げると、質問をエンティティ「mat」とその関係性に限定すると、属性グラフは以下のように切り詰められます。もう一つの違いは、SchemaLLMPathExtractor は LLM での使用に最適であり、関数呼び出しをサポートし、ノードに異なるノードラベルを付けることができることです。

出典: LlamaIndex

2.2 無名の英雄:エンティティの曖昧性解消

属性グラフを作成したら、次のステップは検索です。しかし、見落とされがちな重要なステップがあります。それは、エンティティの曖昧性解消です。このステップは、ETL(抽出・変換・ロード)プロセスにおけるデータクリーニングに似ており、テキスト埋め込みの類似性と単語間の距離に基づいて、潜在的な重複データを削除します。家系図の例で言えば、このステップは同じ名前を持つ2人の人物を混同しないようにするものです。例えば、ジョンおじさんとジョンいとこは同一人物でしょうか?このステップは、その点を明確にするのに役立ちます。

出典: Neo4j

2.3 第2ステップ: グラフ検索 (クエリフェーズ)

詳細な家系図が完成したら、次はどうやってその中の情報を探すのでしょうか?4つのツールがあります。

出典: LlamaIndex

1. LLMSynonymRetriever:

名前の通り、ユーザーのクエリに基づいて同義語とキーワードを生成し、最も近いノードとその近傍ノードを検索します。唯一の欠点は、キーワード検索を使用するため、信頼性が低いことです。まるで叔母に家族の歴史について尋ねるようなものです。話題から逸れるかもしれませんが、それでも興味深い関連情報が得られます。


2. ベクトルコンテキストリトリーバー:

この検索エンジンは、埋め込みとコサイン類似度を用いてベクトル類似度検索を実行し、関連ノードを検索します。グラフデータベースに直接、またはグラフデータベースとベクトルデータベースを組み合わせて使用​​できます。ただし、集約された回答を必要とするグローバルクエリには適していない点に注意してください。これは家系図を検索する検索エンジンのようなものです。具体的な質問には適していますが、「あなたの家系図について教えてください」のようなクエリには適していません。

出典: LlamaIndex

3. テキスト2サイファー:

ここでは、LLMを使用してユーザークエリに基づいてCypherステートメントを生成し、グラフデータベースからデータを取得します。Text2Cypherは、集約を必要とするグローバルクエリに適しています。これは、質問を家系図が理解できる言語に翻訳してくれる翻訳機のようなものです。もちろん、LLMによって生成されるCypherステートメントは常に正確であるとは限りませんが、正確さを犠牲にして柔軟性を確保しているため、ここでは微調整されたローカルモデルの使用が推奨されます。

出典: LlamaIndex

4. サイファーテンプレートリトリーバー:

ここでは、特定のパラメータを持つCypherテンプレートを使用できます。ユーザークエリについては、LLMを使用してこれらのパラメータを入力し、検索用のCypherクエリを作成します。これにより、LLMが誤ったCypherステートメントを生成するという問題が大幅に解決されます。これは、事前に作成された質問フレームワークがあり、空欄を埋めるだけで済むようなもので、理解不能な系図に関する質問をする可能性を低減します。

出典: LlamaIndex

03 統合: GraphRAG が動作する

GraphRAGは、本質的には、家族の詳細な系図を超知能の家系図学者に託すようなものです。従来のRAG(検索強化型生成)システムは、広範な質問に答えるのに苦労することがよくあります。これは、こうした種類の質問には、特定の情報を取得するだけでなく、データセット全体を包括的に理解する必要があるためです。

したがって、GraphRAG は次のシナリオで非常に優れたパフォーマンスを発揮します。

  • 大規模データセットにおけるコアテーマの特定
  • さまざまなトピック間のつながりを理解する
  • 複雑な情報アーキテクチャの包括的な理解

Ravi Theja のおかげで、LlamaIndex を使用して GraphRAG を実装するチュートリアルができました。

チュートリアルリンク

ナレッジグラフから属性グラフ、そしてGraphRAGへの進化は、データの理解と活用方法に大きな変化をもたらしました。GraphRAGは、隠れたパターンを明らかにし、自由形式の質問に答える可能性を示してきましたが、これは私たちのツールボックスにある数多くのツールの一つに過ぎません。その真の価値は、実際の応用と継続的な研究を通して明らかになるでしょう。

終わり

OpenSPGは、意味的に拡張されたプログラム可能なナレッジグラフです。GitHubアドレスは以下です。ぜひスターを付けてフォローしてください!

https://github.com/OpenSPG/openspg

OpenSPG技術交流グループナレッジグラフ技術に興味のある学生は、WeChatアシスタント(jqzn-robot)を追加してご参加ください。

記事のおすすめ

なぜナレッジ グラフ + RAG が従来の RAG よりも優れていると言われるのでしょうか?

ステップバイステップのチュートリアル: カスタム LLM をサポートするように GraphRAG を変更する

大規模モデルの統合された知識抽出とグラフ可視化を特徴とする OpenSPG v0.0.3 がリリースされました。