ホームページ > バックエンド開発 > Python チュートリアル > IRIS RAG アプリにおける RAG、Vector Search、および IRIS での RAG の実装方法の詳細な説明

IRIS RAG アプリにおける RAG、Vector Search、および IRIS での RAG の実装方法の詳細な説明

Susan Sarandon
リリース: 2024-12-04 13:16:15
オリジナル
773 人が閲覧しました

An Expanded Explanation of RAG, Vector Search, and how it is implemented on IRIS in the IRIS RAG App

Python 2024 コンテストへの投稿に関して、コミュニティ メンバーから非常に素晴らしいフィードバックを受け取りました。ここに再投稿しても大丈夫だと思います:

純粋な IRIS の 5 倍を超えるサイズのコンテナを構築します

これには時間がかかります

コンテナの起動も遅いですが完了します

説明のようにバックエンドにアクセスできます

プロダクションがぶら下がっています

フロントエンドが反応します

何を表示しようとしているのか理解できません

説明は私以外の専門家向けです

提出物はこちらです: https://openexchange.intersystems.com/package/IRIS-RAG-App

このフィードバックは、プロジェクトに関する記事を書くための素晴らしいきっかけとなるため、特に感謝しています。このプロジェクトにはかなり包括的なドキュメントが含まれていますが、ベクトル埋め込み、RAG パイプライン、LLM テキスト生成、Python および LLamaIndex などの特定の人気のある Python ライブラリに精通していることを前提としています。

この記事は AI を完全に使用せずに書かれており、これらのことを説明し、RAG を実証するためにこのプロジェクトでそれらがどのように組み合わされるかを説明することを目的としています。 IRIS のワークフロー。

ベクトル埋め込みの作成に関与する Python パッケージに必要なライブラリの依存関係が非常に大きいため、コンテナーは大きくなります。輸入をより厳選することで、サイズを大幅に削減できる可能性がある。 

最初にコンテナーを構築するのには時間がかかりますが、一度構築すると、起動にかかる時間は短くなります。起動時間はまだ確実に改善できる可能性があります。起動に時間がかかる主な理由は、データベースの移行、CSS 構成、JavaScript 構成、Python など、前回の起動以降にアプリケーションの任意の部分に変更が加えられた可能性があることを前提として、entrypoint.sh が更新されたためです。バックエンド コードを削除し、起動するたびにプロジェクト全体を再コンパイルします。これは、このプロジェクトの開発を簡単に開始できるようにするためです。そうしないと、変更が加えられるたびにフロントエンドとバックエンドのビルドを適切に実行することが困難になる可能性があるためです。こうすることで、プロジェクト内のコードを変更した場合、コンテナーを再起動するだけで済み、場合によってはバックエンドでプロダクションを回復するだけで、変更内容がアプリケーションのインターフェースと操作に反映されるはずです。

バックエンドのプロダクションが http リクエストを Django アプリケーションに渡しているものであり、このパッケージの相互運用性にとって重要であると確信しています。ただし、私は IRIS プラットフォームを初めて使用するため、プロダクションについてさらに学ぶ必要があります。

次に、ベクトル埋め込み、LLM、RAG について包括的に説明したいと思います。最初に発明されたのはベクトル埋め込みです。まずベクトルを説明します。ほとんどのコンテキストでは、ベクトルは方向です。それは宇宙のどこかを指す矢印です。より正式には、ベクトルは「大きさだけでなく方向も持つ量」です。これは、特定の方向に進み、空間内の特定の点で爆発する花火によって例証される可能性があります。すべての花火が同じ中心点、つまり原点 [0,0,0] から発射されるとします。ただし、すべての花火が飛び出し、その原点の周りの雲の中で爆発します。数学的には、3 つの座標系 [x,y,z] を使用して各花火の爆発の位置を記述することができ、それが花火の爆発の「ベクトル埋め込み」になります。花火大会のビデオを大量に撮影し、すべての花火の爆発をデータセットとして記録した場合、花火大会の一種のベクトル埋め込みデータベース、つまりベクトル ストアを作成することになります。

花火大会に関するその情報を使って何ができるでしょうか?特定の花火を指して、展示全体を通じて同じ点に最も近い場所で爆発した花火を尋ねると、空間内の近くの点で爆発した他の花火を見つけることができます。最も近いものを見つけるだけです。それを行うには数学が必要です。

覚えておいてください、各花火について記録したのは 3 つの数値、[0,0,0] の 3 次元空間の x、y、z 座標だけです。地上の花火発射装置です。 

別の特定の花火に最も近い距離と最も近い時間で爆発した花火も知りたい場合はどうすればよいでしょうか?それを知るには、花火大会のビデオ映像を遡って、それぞれの爆発の時間も記録する必要があります。これで、花火の爆発の 3 次元位置と爆発時刻という 4 つの数値を含む 4 次元ベクトルが得られました。ベクトル埋め込みに別の次元を追加することで、花火大会のよりわかりやすいタイプの埋め込みができました。

これは機械学習にどのように変換されるのでしょうか?簡単に言うと、コンピューター科学者は、膨大な量のテキスト データを処理することで、フレーズ、文、段落、さらにはページなどのテキストの一部を変換し、非常に長いシリーズに変換できる埋め込みモデルを作成することに成功しました。理論上の高次元空間内の点を表す数値の集合。

4 つの数字の代わりに、300、700、さらには 1500 の数字があります。これらは、1 つのテキストが「近い」か、または「近い」かどうかの 1500 通りの方法を表しています。別のものから「遠く」離れた、または 1500 次元の意味。テキストの意味論的な意味を何らかの方法で表す数値を作成する手段があるということは、多くの人にとって魅力的な概念です。

数学を使用すると、これらの高次元テキスト ベクトル埋め込みのうち 2 つを比較して、それらが互いにどの程度似ているか、または「近い」かを確認できます。同じモデルで作成されました。 

これがこのアプリで最初に起こることです。ユーザーはドキュメントを入力して名前を付け、埋め込みのタイプを選択する必要があります。サーバーはそのドキュメントを取得し、それをテキスト チャンクに分割し、それらの各チャンクをベクトル埋め込みに変換します。そのチャンクは、そのドキュメント専用のテーブルに行として保存されます。各ドキュメントは、さまざまなテキスト埋め込みモデルによって作成されたベクトル埋め込みの可変長を考慮して、独自の専用テーブルに保存されます。

文書がベクトル埋め込みとしてデータベースに保存されると、ユーザーは文書に「質問」するためのクエリを入力できます。クエリは 2 つの方法で使用されます。 1 つ目の方法は、ドキュメントを検索することです。従来のテキスト検索は行わず、代わりに「ベクトル検索」を行っています。アプリはクエリを取得し、それをベクトル埋め込みに変換し、クエリ ベクトル埋め込みに最も類似した埋め込みを含むドキュメントのセクションを検索します。次に、文書セクションごとに 0 と 1 の間の類似性スコアが生成され、top_k_similarity と類似性_threshold に基づいてベクトル データベースからいくつかのセクションが取得されます。基本的に、取得するドキュメント セクションの数と、それらがクエリにどの程度類似している必要があるかを問い合わせることで、取得の資格を得ることができます。

これが検索拡張生成における検索です。次のステップは世代です。

コンピュータ科学者がテキストを意味的に重要な数値ベクトル埋め込みに変換する方法を見つけたら、次のステップはテキストを生成できるモデルを作成することでした。彼らはこれを大成功に収め、現在では GPT-4、LLama3、Claude 3.5 などの大規模言語モデルを利用できるようになりました。これらの LLM は、プロンプトまたはクエリを受け取り、提示されたテキスト (プロンプト) から続く可能性が最も高いと思われるテキストである補完または回答を配信できます。

LLM は大量のテキスト データでトレーニングする必要があり、その応答または補完はそのトレーニング データに限定されます。 LLM に、トレーニング セットにないデータを含む可能性のある補完を提供させたい場合、または特定の知識セットに基づいて補完を実行させたい場合、そのための 1 つの方法は、プロンプトに追加のコンテキスト データを含めることです。基本的に、トレーニングされていないものについて LLM からの回答が必要な場合は、プロンプト内の情報を LLM に提供する必要があります。

多くの人は、chatGPT またはローカルの LLama インストールが自分の個人的な文書に基づいた回答を提供してくれることを望む状況に陥っていました。文書内でその情報を検索し、プロンプトに貼り付けて質問を入力するだけで十分簡単ですが、人々はそれを手動で行っていることに気づきました。これは、それ自体の形式の検索拡張生成です。 RAG は、ユーザーのクエリに関連する情報を検索し、より正確または有用な応答を得るために LLM にクエリとともに提供する自動化です。

このアプリでは、ベクトル検索で取得したドキュメントセクションがクエリとともに選択された LLM に送信され、インターフェイスでモデルとしてラベル付けされ、回答のコンテキストを提供します。

このプロジェクトのために作成したビデオの例では、「この劇の悪役は誰ですか?」という質問をします。シェイクスピアの 2 つの戯曲の全文が含まれる文書「ハムレット」と「リア王」。 IRIS データベースにはすでに 2 つのテーブルがあり、1 つはハムレット用、もう 1 つはリア王用です。各テーブルには、各劇のテキストをセクションに分割して作成されたベクトル埋め込みの行が埋め込まれています。これらの埋め込みは、文書の各セクションの意味のさまざまな側面を表す長い一連の数字です。 

サーバーは、ベクトル埋め込みを生成したものと同じテキストからベクトルへのモデルを使用して、「この劇の悪役は誰ですか?」という質問を数値ベクトルに変換します。リア王のテーブルに最も類似したセクションを見つけます。これらはおそらく、悪役という言葉が言及されているセクションですが、悪役が明示的に言及されていない場合でも、裏切り、裏切り、欺瞞などの他の悪役についても言及されている可能性があります。これらのドキュメント セクションはクエリに追加され、プロンプトとして LLM に一緒に送信され、LLM は提供されたドキュメント セクションに基づいて質問に答えます。

これはドキュメントごとに個別に実行されるため、クエリに対する答えはクエリ対象のドキュメントによって異なります。これで頭字語が完成しました。ベクトル検索の力を使用して、関連するコンテキスト情報を取得して LLM からの回答の生成を拡張しているからです。

時間を割いてこれを読んでくれた皆さんに感謝します。これらのトピックについては、今後の記事で喜んで詳しく説明したいと思います。フィードバックはいつでも大歓迎です。

以上がIRIS RAG アプリにおける RAG、Vector Search、および IRIS での RAG の実装方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート