ホームページ >バックエンド開発 >Python チュートリアル >ナレッジ グラフを使用してハリー ポッターの世界をナビゲートする
あなたはハリー・ポッターの世界に関するすべてをすぐに手に入れたいと思っているハリー・ポッターのファンですか?それとも、ハリー・ポッターのさまざまなキャラクターがどのように集まっているかを示すクールな表で友達を感動させたいだけですか?ナレッジ グラフ以外に探す必要はありません。
このガイドでは、ラップトップとお気に入りの本だけを使って Neo4J でナレッジ グラフを作成する方法を説明します。
ウィキペディアによると:
ナレッジ グラフは、データを表現し操作するためにグラフ構造のデータ モデルまたはトポロジを使用する知識ベースです。
ハードウェアに関しては、必要なのはコンピューター (できれば Nvidia グラフィック カードを搭載したコンピューター) だけです。完全に自給自足するために、ローカル LLM セットアップを使用しますが、同じ目的で OpenAI API を簡単に使用することもできます。
次のものが必要です:
私は WSL2 の Ubuntu 24.04 でコーディングしているため、GPU ワークロードを簡単にパススルーできるように、Ollama Docker を使用しています。 Ollama を Docker コンテナとして実行するのは、最初に Nvidia コンテナ ツールキットをインストールし、次に以下をインストールするだけで簡単です。
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Nvidia GPU をお持ちでない場合は、CLI で次のコマンドを使用して CPU のみの Ollama を実行できます。
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
完了したら、お気に入りの LLM モデルを Ollama に取り込むことができます。 Ollamaで利用可能なモデルのリストはここにあります。たとえば、qwen2.5 をプルしたい場合は、CLI で次のコマンドを実行できます:
docker exec -it ollama ollama run qwen2.5
これでオラマの作業は完了です!
まず Python 仮想環境を作成して、インストールするパッケージや構成の変更をグローバルに適用するのではなく、環境内に制限します。次のコマンドは、仮想環境 harry-potter-rag:
を作成します。
python -m venv harry-potter-rag
その後、次のコマンドを使用して仮想環境をアクティブ化できます。
source tutorial-env/bin/activate
次に、pip を使用して、主に LangChain から関連するパッケージをインストールします。
%pip install --upgrade --quiet langchain langchain-community langchain-openai langchain-experimental neo4j
Neo4J を Docker コンテナとしてセットアップします。特定の構成でのセットアップを容易にするために、docker compose を使用します。以下を docker-compose.yaml というファイルにコピーし、同じディレクトリで docker-compose up -d を実行して Neo4J をセットアップするだけです。
この設定により、データ、ログ、プラグインがローカル フォルダー (/data) に確実に保存されます。 /ログとプラグイン。
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Jupyter Notebook でナレッジ グラフの構築を開始できるようになりました。まず、以下を使用して Ollama LLM インスタンスをセットアップします:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
次に、LLM を Neo4J に接続します。
docker exec -it ollama ollama run qwen2.5
さあ、お気に入りのハリー・ポッターのテキスト、またはお気に入りの本を取得します。LangChain を使用してテキストをチャンクに分割します。チャンク化は、長いテキストをパーツに分割する戦略です。各パーツを LLM に送信してノードとエッジに変換し、各チャンクのノードとエッジを Neo4J に挿入できます。簡単な入門として、ノードはグラフ上に表示される円であり、各エッジは 2 つのノードを結合します。
このコードは、チャンクがどのように見えるかを簡単にプレビューするために最初のチャンクも出力します。
python -m venv harry-potter-rag
さあ、GPU に重労働を任せて、テキストをナレッジ グラフに変換しましょう。この本全体を詳しく説明する前に、LLM が希望どおりのグラフを返すようにより適切にガイドするためのプロンプトを試してみましょう。
プロンプトは基本的に、期待される内容の例、または応答に表示される内容の指示です。ナレッジ グラフのコンテキストでは、人物と組織のみをノードとして抽出し、エンティティが与えられた場合に特定のタイプの関係のみを受け入れるように LLM に指示できます。たとえば、配偶者の関係は、個人と組織の間ではなく、個人と他の人の間でのみ発生することを許可できます。
テキストの最初の部分に LLMGraphTransformer を使用して、グラフがどうなるかを確認できます。これは、結果が好みになるまでプロンプトを調整する良い機会です。
次の例では、個人または組織のノードが想定されており、 allowed_relationships は許可される関係のタイプを指定します。 LLM がさまざまな元のテキストをキャプチャできるようにするために、strict_mode を False に設定して、以下で定義されていない他の関係やエンティティもキャプチャできるようにします。代わりに strict_mode を True に設定すると、許可されている内容に準拠していないエンティティと関係は削除されるか、許可されている内容に強制的に適用される可能性があります (これは不正確である可能性があります)。
source tutorial-env/bin/activate
プロンプトの微調整が完了したら、ナレッジ グラフに取り込みます。 Try-Except は、Neo4J に適切に挿入できなかった応答を明示的に処理するものであることに注意してください。コードは、エラーがログに記録されるように設計されていますが、後続のチャンクをグラフに変換するループの進行をブロックしません。
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
上記のループでは、「ハリー・ポッターと賢者の石」、「ハリー・ポッターと秘密の部屋」、「ハリー・ポッターとアズカバンの囚人」を読み込むのに約 46 分かかりました。最終的には 4868 個の一意のノードができました。簡単なプレビューを以下でご覧いただけます。グラフが非常に混雑しており、誰が他の誰とどのように関係しているかを区別するのが難しいことがわかります。
暗号クエリを利用して、たとえばダンブルドアを調べることができるようになりました!
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
OK、ダンブルドア本人だけを話しましょう。彼がハリー・ポッターとどのような関係があるのか見てみましょう。
docker exec -it ollama ollama run qwen2.5
わかりました。ハリーとダンブルドアが何を話したかに興味があります。
python -m venv harry-potter-rag
探しているものを本当に見つけるためには多くの文書を参照する必要があり、グラフがまだ非常に複雑であることがわかります。ノードとしてのドキュメントのモデリングが理想的ではないことがわかり、LLMGraphTransformer でさらなる作業を行って、グラフをより直感的に使用できるようにすることができます。
インターネットに接続する必要もなく、自分のローカル コンピューター上でナレッジ グラフをセットアップすることがいかに簡単であるかがわかります。
ハリー ポッターの世界のナレッジ グラフ全体も含まれる github リポジトリは、ここから入手できます。
harry_potter.graphml ファイルを Neo4J にインポートするには、graphml ファイルを neo4j /import フォルダーにコピーし、Neo4J ブラウザで次のコマンドを実行します。
source tutorial-env/bin/activate
以上がナレッジ グラフを使用してハリー ポッターの世界をナビゲートするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。