プロンプトエンジニアリング:検索強化生成(RAG)

Prompt Engineering Retrieval Augmented Generation (RAG)

自然言語処理(NLP)の分野では、GPT-3のようなトランスフォーマーベースのモデルの登場により、重要なブレイクスルーが見られています。これらの言語モデルは、人間のようなテキストを生成する能力を持ち、チャットボット、コンテンツ生成、翻訳などさまざまな応用で活用されています。しかし、特殊で顧客固有の情報が関わるエンタープライズのユースケースでは、従来の言語モデルでは不十分な場合があります。これらのモデルを新しいコーパスで微調整することは、費用がかかり時間がかかることがあります。この課題に対処するために、「Retrieval Augmented Generation」(RAG)と呼ばれる技術の1つを使用することができます。

このブログでは、RAGの動作方法を探求し、GPT-3.5 Turboを使用して製品マニュアルへの応答として実用的な例を示します。

特定の製品に関するクエリに応答できるチャットボットの開発を担当していると想像してください。この製品には、エンタープライズの提供物に特化した固有のユーザーマニュアルがあります。GPT-3のような従来の言語モデルは、一般的なデータでトレーニングされることが一般的であり、この特定の製品に関する知識を持っていない場合があります。新しいコーパスでモデルを微調整することは解決策のように思えるかもしれませんが、かなりのコストとリソースが必要です。

RAGの紹介

Retrieval Augmented Generation(RAG)は、専門分野における文脈に適した応答の生成の問題に対処するための効率的かつ効果的な方法を提供します。新しいコーパスで言語モデル全体を微調整する代わりに、RAGは検索の力を借りて必要な情報にアクセスします。リトリーバルメカニズムと言語モデルを組み合わせることにより、RAGは外部コンテキストを取り込むことで応答を強化します。この外部コンテキストはベクトル埋め込みとして提供される場合があります。

以下の図は、アプリケーションを作成するために実行する手順のフローを示しています。

  1. PDF(ClarettユーザーマニュアルPDF)から読み込み、1000トークンのチャンクサイズでトークン化します。
  2. これらのトークンのベクトル埋め込みを作成します。ベクトル埋め込みの作成にはOpenAIEmbeddingsライブラリを使用します。
  3. ベクトル埋め込みをローカルに保存します。ベクトルDBとしてシンプルなChromaDBを使用します。Pineconeなどのより高可用性で本番環境向けのVectorDBを使用することもできます。
  4. ユーザーがクエリ/質問を発行します。
  5. これにより、ベクトルDBから検索とリトリーバルが行われ、ベクトルDBからより多くの文脈データが取得されます。
  6. この文脈データは、プロンプトと一緒に使用されます。
  7. コンテキストがプロンプトを補完します。これは通常、コンテキストの豊かさと呼ばれます。
  8. プロンプト、クエリ/質問、およびこの拡張されたコンテキストがLLMに渡されます。
  9. LLMは、このコンテキストに基づいて応答を返します。

追加のコーパスとしてFocusrite Clarettのユーザーマニュアルを使用します。Focusrite Clarettは、オーディオの録音と再生のためのシンプルなUSBオーディオインターフェースです。ユーザーマニュアルはこちらからダウンロードできます。

実践してみましょう

仮想環境のセットアップ

バージョン/ライブラリ/依存関係の競合を避けるために、実装をサンドボックス化するための仮想環境をセットアップしましょう。次のコマンドを実行して新しいPython仮想環境を作成します。

OpenAIキーの作成

GPTにアクセスするためには、OpenAIキーが必要です。OpenAIキーを作成しましょう。OpenAIに登録して無料でOpenAIキーを作成することができます。

登録したら、ログインし、スクリーンショットで示されているようにAPIのオプションを選択します(スクリーンデザインはスクリーンショットを撮った時点から変更されているかもしれません)

アカウント設定に移動し、「APIキーを表示」を選択します。

「新しい秘密キーを作成」を選択すると、以下のようなポップアップが表示されます。名前を指定すると、キーが生成されます。

これにより、クリップボードにコピーして安全な場所に保存する必要のある一意のキーが生成されます。

では、上記のフローダイアグラムに示されているすべてのステップを実装するためのPythonコードを書きましょう。

依存関係のインストール

必要なさまざまな依存関係をインストールしましょう。次のライブラリを使用します:

  • Lanchain:LLMアプリケーションを開発するためのフレームワーク。
  • ChromaDB:ベクトル埋め込みを永続化するためのVectorDB。
  • unstructured:Word/PDFドキュメントの前処理に使用されます。
  • tiktoken:トークン化フレームワーク
  • pypdf:PDFドキュメントを読み込み、処理するためのフレームワーク。
  • openai:OpenAIにアクセスするためのフレームワーク。

これらの依存関係が正常にインストールされたら、最後のステップで作成されたOpenAIキーを格納する環境変数を作成します。

コーディングを始めましょう…

ユーザーマニュアルPDFからベクトル埋め込みを作成し、ChromaDBに保存する

以下のコードでは、使用するすべての依存ライブラリと関数をインポートしています。

以下のコードでは、PDFを読み取り、ドキュメントをトークンに分割しています。

以下のコードでは、クロマコレクション(クロマDBを保存するためのローカルディレクトリ)を作成しています。次に、ベクトル埋め込みを作成し、ChromaDBに保存しています。

このコードを実行すると、ベクトル埋め込みを保存するフォルダが作成されます。

これで、ChromaDBにベクトル埋め込みが保存されました。次に、LangChainのConversationalRetrievalChain APIを使用してチャット履歴コンポーネントを開始します。GPT 3.5 Turboで初期化されたOpenAIオブジェクトと作成したベクトルDBを渡します。メッセージを保存するConversationBufferMemoryも渡します。

会話の検索チェーンを初期化したので、チャット/質疑応答に使用できます。以下のコードでは、ユーザーの入力(質問)を受け入れ、ユーザーが「done」と入力するまで質問をLLMに渡して応答を取得し、それを表示します。

以下は出力のスクリーンショットです。

ご覧のように、Retrieval Augmented Generation(RAG)は、GPT-3のような言語モデルの強みと情報検索の力を組み合わせた優れた技術です。コンテキスト固有の情報を入力に豊かにすることで、RAGは言語モデルがより正確で文脈に即した応答を生成することを可能にします。微調整が実用的でない企業のユースケースでは、RAGはユーザーとの適切で情報を提供する対話を効率的かつ費用効果の高い方法で提供する解決策となります。

これが役に立ったかどうかをお知らせください。ご意見、フィードバック、コメントをお寄せください。その間、この分野でさらにブログを公開していきます。

素晴らしい時間をお過ごしください… すぐに戻ります!その間、安全にお過ごしください…

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more