HippoRAG: Amazon Bedrock、Amazon Neptune、Personalized PageRankを用いた神経生物学的に着想を得たRAG
本記事では、AWSスタックを活用したHippoRAGの実装方法を紹介します。Amazon BedrockでLLM機能、Amazon Neptuneでグラフデータベース、Neptune AnalyticsでPersonalized PageRankを含む高度なグラフアルゴリズム、Amazon Titan Embeddingsでベクトル表現を提供します。この実装により、エンタープライズ規模のアプリケーション向けにHippoRAGをAWSインフラ上で構築・デプロイする方法を示します。
大規模言語モデル(LLM)は情報処理と生成に変革をもたらしましたが、複数の情報源からの知識を効果的に統合することには依然として課題があります。標準的な検索拡張生成(RAG)手法は有用ですが、別々のドキュメントからの情報を結びつける必要がある多段階推論タスクではしばしば不十分です。これらの制限に対処するため、我々は人間の海馬記憶システムに着想を得た新しいRAGフレームワークであるHippoRAGを探求します。
本記事では、包括的なAWSスタックを使用したHippoRAGの実装方法を実演します。Amazon BedrockでLLM機能、Amazon Neptuneでグラフデータベース、Amazon Neptune AnalyticsでPersonalized PageRankを含む高度なグラフアルゴリズム、Amazon Titan Embeddingsでベクトル表現を提供します。この実装は、AWSインフラストラクチャ上でエンタープライズ規模のアプリケーション向けにHippoRAGを構築・デプロイする方法を示します。
神経生物学的インスピレーションと背景
HippoRAGは、人間の長期記憶における海馬索引理論から着想を得ています。人間の脳では、新皮質が知覚入力を処理する一方、海馬が記憶間の関連付けのインデックスを作成します。この二重コンポーネントシステムにより、人間は異なる経験からの情報を効率的に統合できます。
標準的なRAGアプローチは各ドキュメントを独立して扱うため、複数の情報源にまたがる質問に対応するのが困難です。HippoRAGは以下によってこの問題に対処します:
- エンティティ間の関係を表す知識グラフ(KG)を構築する。
- Personalized PageRank(PPR)アルゴリズムを使用して効率的なグラフ探索と関連性ランキングを実現する。
- 複数回の反復を必要とせず、単一ステップでの多段階検索を可能にする。
ソリューションアーキテクチャ
我々のAWS実装は4つの主要コンポーネントで構成されます:
- Amazon Bedrock:知識グラフのトリプル抽出、質問応答、名前付きエンティティ認識のためのLLM機能を提供。
- Amazon Neptune Database:知識グラフ構造を格納し、基本的なグラフ操作を可能にする。
- Amazon Neptune Analytics:特にPersonalized PageRankを用いた高度なグラフアルゴリズムを実行。
- Amazon Titan Embeddings:テキストのベクトル表現を作成し、類似性マッチングに使用。
このアーキテクチャにより、Personalized PageRankの全能力を活用しながら、AWSマネージドサービスのスケーラビリティと信頼性を維持できます。
前提条件
この実装には以下が必要です:
- Amazon BedrockおよびNeptuneサービスへのアクセス権を持つAWSアカウント。
- 設定済みでアクセス可能なAmazon Neptuneクラスター。
- Neptune Databaseから作成されたAmazon Neptune Analyticsグラフ。
- AWS CLIおよびPython 3.8+がインストールされていること。
- Amazon Bedrock、Amazon Neptune、Amazon Neptune Analytics、Amazon Simple Storage Service (Amazon S3) に対する適切なIAM権限。
データ処理パイプライン:HotpotQA JSONからNeptuneへ
HippoRAGを実装する最初のステップは、生データをNeptuneに適した知識グラフ構造に変換することです。このセクションでは、JSON形式のHotpotQAデータを処理する方法を段階的に説明します。Amazon Bedrockを使用して知識グラフトリプルを抽出し、Neptune一括ロード用CSVファイルを生成し、Amazon S3にアップロードし、Neptuneクラスターにロードします。
データインポーターの設定
HotpotQANeptuneImporterクラスはパイプラインの全段階を調整します。JSONソースファイルの読み取り、CSV出力の生成、ファイルのS3へのアップロード、Neptune一括ローダーのトリガーを処理します。このクラスの初期化には、ファイルパス、出力ディレクトリ、S3バケット、プレフィックス、Neptuneエンドポイント、ポート、IAMロールARNなどのAWS環境設定値が必要です。
知識グラフトリプル抽出
パイプラインの重要な部分は、Amazon BedrockのLLM機能を使用して生テキストから構造化知識を抽出することです。各パッセージに対して、システムは主語-関係-目的語のトリプルを生成し、これらが知識グラフのエッジになります。LLM APIを呼び出すことで、テキストからエンティティとその関係を抽出できます。
HotpotQAサンプルの処理
各HotpotQAサンプルの処理には、コンテキスト内のドキュメントとパラグラフを走査し、各パラグラフに対してパッセージノードを作成し、パラグラフからトリプルを抽出し、各主語と目的語に対してフレーズノードを作成し、関係エッジとコンテキストエッジを書き込むことが含まれます。このプロセスにより、グラフにドキュメント間の相互参照が確実に含まれます。
Neptuneへのデータロード
データを処理してCSVファイルを生成した後、システムはこれらのファイルをS3にアップロードし、Neptuneの一括ロードAPIを使用してグラフデータベースにインポートします。ロードジョブが送信された後、システムは完了するまでそのステータスを監視します。
完全なパイプラインの実行
run_pipelineメソッドはすべてのステップを順番に実行します:Neptune接続のテスト、HotpotQAデータのロード、データのCSVへの処理、空ファイルの作成、S3へのアップロード、Neptuneへのインポート、完了の待機。プロセス全体はログで進行状況とエラーを記録します。
実装
このセクションでは、HippoRAG実装の主要コンポーネントについて説明します。
設定
まず、LLMモデル(例:Claude 3.5 Haiku)、埋め込みモデル(例:Titan Embeddings v2)、AWSリージョン、保存ディレクトリ、検索パラメータを含む基本設定を行います。
Neptune Analytics統合
我々の実装における重要な革新は、Personalized PageRankのためのAmazon Neptune Analyticsとの統合です。専用のクライアントクラスを作成し、Neptune AnalyticsのAPIを呼び出してアルゴリズムを実行します。このクライアントは、シードノードリスト、減衰係数、最大反復回数、収束許容差を受け取り、ノードとそのPageRankスコアのリストを返します。
検索フロー
検索段階では、クエリが与えられると、システムはまずBedrockを使用してエンティティを抽出し、Neptuneでこれらのエンティティに対応するノードをクエリし、次にNeptune AnalyticsでPersonalized PageRankを実行して、クエリに最も関連するパッセージノードを取得します。最終的に、スコアに基づいてTop-K結果を返します。
結論
神経科学のインスピレーションとAWSのマネージドサービスを組み合わせることで、HippoRAGはエンタープライズレベルの多段階推論タスクに対して効率的でスケーラブルなソリューションを提供します。本記事の実装は、Amazon Bedrock、Neptune、Neptune Analyticsを活用した完全な知識グラフ強化検索システムの構築方法を示しています。