Langchain、ChromaDB、GPT 3.5 に基づく検索強化型生成

Langchain、ChromaDB、GPT 3.5 に基づく検索強化型生成

翻訳者|朱 仙中

レビュー | Chonglou

概要:このブログでは、検索拡張生成呼ばれるプロンプトエンジニアリング手法について学びLangchain、ChromaDB、GPT 3.5の組み合わせに基づいてそれを実装します

モチベーション

GPT-3 などのビッグデータトランスフォーマー ベースのモデルの登場により、自然言語処理 (NLP) の分野は大きな進歩を遂げました。これらの言語モデルは人間のようなテキストを生成することができ、チャットボット、コンテンツ生成、翻訳などさまざまな用途に使用されていますただし、特殊で顧客固有の情報を含むエンタープライズアプリケーションのシナリオの場合、従来の言語モデルでは要件を満たせない可能性があります。一方、新しいコーパスを使用してこれらのモデルを微調整するには、コストと時間がかかります。この課題に対処するために、検索拡張生成 (RAG) と呼ばれる技術を使用できます

このブログでは、この検索拡張生成( RAG )手法がどのように機能するを探り実際の例を通してその有効性を示しますこの例ではGPT-3.5を使用することに注意してください。 Turbo は、追加のコーパスとして製品マニュアルに応答します。

特定の製品に関する問い合わせに応答できるチャットボットの開発を任されていると想像してくださいこの製品には、エンタープライズ製品専用の独自のユーザー マニュアルがあります。 GPT-3 などの従来の言語モデルは、一般的なデータでトレーニングされることが多く、この特定の製品を理解できない可能性があります。一方、新しいコーパスを使用してモデルを微調整することが解決策であると思われますが、このアプローチにはかなりのコストとリソース要件が伴います。

検索強化生成 (RAG) の概要

検索拡張生成 (RAG) は、特定のドメインで文脈的に適切な応答を生成する問題に対して、より効率的なアプローチを提供します。 RAG は、新しいコーパスを使用して言語モデル全体を微調整する代わりに、検索の力を活用して、オンデマンドで関連情報にアクセスします。 RAG は、検索メカニズムと言語モデルを組み合わせることで、外部コンテキストを組み込むことで応答を強化します。この外部コンテキストはベクトル埋め込みとして提供できます。

以下に、この記事でアプリケーションを作成するために従う必要がある手順のプロセスを示します

  1. Clarett ユーザー マニュアル( PDF )を読み、トークン化には chunk_size として 1000 トークンを使用します。
  2. これらのトークンのベクトル埋め込みを作成します OpenAIEmbeddings ライブラリを使用してベクトル埋め込みを作成します
  3. ベクトル埋め込みをローカルに保存します。 VectorDB としてシンプルな ChromaDB を使用します。 Pinecone またはその他の高可用性の製品グレードのベクター データベースVectorDB を使用できます。
  4. ユーザーはクエリ/質問を含むプロンプトを発行します。
  5. これにより、 VectorDB から検索および取得行われ、 VectorDBからより多くのコンテキストデータが取得されます
  6. このコンテキスト データはプロンプトコンテンツで使用されるようになります
  7. コンテキストによってプロンプトが強化されこれはコンテキスト強化と呼ばれることがよくあります。
  8. プロンプト情報は、クエリ/質問およびこの拡張されたコンテキストとともに大規模言語モデル(LLM )に渡されます
  9. この時点から、 LLM はこのコンテキストに基づいて応答します。

この例では、追加のコーパスとして Focusrite Clarett ユーザー マニュアルを使用することに注意してくださいFocusrite Clarett は、オーディオの録音と再生のためのシンプルな USB オーディオ インターフェイスです。ユーザー マニュアルは、リンク https://fael-downloads-prod.focusrite.com/customer/prod/downloads/Clarett%208Pre%20USB%20User%20Guide%20V2%20English%20-%20EN.pdfからダウンロードできます

実践演習

仮想環境の設定

システムで発生する可能性のあるバージョン/ライブラリ/依存関係の競合を回避するために、実装カプセル化する仮想環境を設定しましょうここで、次のコマンドを実行して新しいPython 仮想環境を作成します

 pip install virtualenv python3 -m venv ./venv source venv/bin/activate

OpenAIキーを作成する

次に、 GPT にアクセスするための OpenAI キーが必要になります。 OpenAI キーを作成しましょう。 https://platform.openai.com/apps のリンクで OpenAI にサインアップすると、OpenAIKey を無料で作成できます

登録が完了したら、ログインしてスクリーンショットのように API オプションを選択します (時間の制約により、私が撮影したスクリーンショットから開いたときに画面のデザインが変わる可能性があります)

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

次に、 「新しい秘密鍵を作成」を選択すると、以下のようなポップアップウィンドウが表示されます。名前を入力するキーが生成されます。

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

次に、上のフローチャートに示されているすべての手順を実装する Python コードを記述してみましょう。

依存ライブラリをインストールする

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

  • Lanchain : LLM アプリケーションを開発するためのフレームワーク。
  • ChromaDB: これはベクトル埋め込みを永続化するためのVectorDBです。
  • 非構造化: Word/ PDFドキュメントの前処理に使用されます。
  • Tiktoken :トークナイザーフレームワーク
  • pypdf: PDF ドキュメントの読み取りと処理のためのフレームワーク
  • OpenAI: OpenAIのフレームワークにアクセスする
pip install langchain pip install unstructured pip install pypdf pip install tiktoken pip install chromadb pip install openai

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

 export OPENAI_API_KEY=<OPENAI-KEY>

次にプログラミングを始めましょう。

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

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

 import os import openai import tiktoken import chromadb from langchain.document_loaders import OnlinePDFLoader, UnstructuredPDFLoader, PyPDFLoader from langchain.text_splitter import TokenTextSplitter from langchain.memory import ConversationBufferMemory from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.llms import OpenAI from langchain.chains import ConversationalRetrievalChain

次のコードでは、PDF が読み取られ、ドキュメントがトークン化されてトークンに分割されます。

 loader = PyPDFLoader("Clarett.pdf") pdfData = loader.load() text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=0) splitData = text_splitter.split_documents(pdfData)

次のコードでは、色度データベースを保存するためのローカル ディレクトリである色度コレクションを作成します。次に、ベクトル埋め込み作成、それを ChromaDB データベースに保存します

 collection_name = "clarett_collection" local_directory = "clarett_vect_embedding" persist_directory = os.path.join(os.getcwd(), local_directory) openai_key=os.environ.get('OPENAI_API_KEY') embeddings = OpenAIEmbeddings(openai_api_key=openai_key) vectDB = Chroma.from_documents(splitData, embeddings, collection_name=collection_name, persist_directory=persist_directory ) vectDB.persist()

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

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

 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) chatQA = ConversationalRetrievalChain.from_llm( OpenAI(openai_api_key=openai_key, temperature=0, model_name="gpt-3.5-turbo"), vectDB.as_retriever(), memory=memory)

セッション取得チェーンを初期化したので、チャットや質問に使用できます。次のコードでは、ユーザーが「done」と入力するまで、ユーザー入力(質問)を受け入れます次に、質問を LLM に渡して回答を取得し、印刷してもらいました。

 chat_history = [] qry = "" while qry != 'done': qry = input('Question: ') if qry != exit: response = chatQA({"question": qry, "chat_history": chat_history}) print(response["answer"])

出力のスクリーンショットを以下に示します。

まとめ

この記事からわかるように、検索拡張生成は、GPT-3 のような言語モデルの強みと情報検索の力を組み合わせた優れた手法です。検索拡張生成では、入力をコンテキスト固有の情報で強化することにより、言語モデルがより正確でコンテキストに適した応答を生成できるようになります。微調整が現実的でない可能性があるエンタープライズアプリケーションのシナリオでは、検索拡張生成により、ユーザーとのカスタマイズされた情報に基づいた対話のための効率的でコスト効率の高いソリューションが提供されます。

翻訳者紹介

Zhu Xianzhong 氏は、51CTO のコミュニティ エディターであり、51CTO の専門ブロガー兼講師であり、濰坊の大学のコンピューター教師であり、フリーランス プログラミング コミュニティのベテランです。

原題:プロンプトエンジニアリング: 検索拡張生成(RAG) 、著者: AB Vijay Kumar


<<:  Nvidia は、ハイエンド GPU チップ上の AI モデルのパフォーマンスを向上させる TensorRT-LLM オープンソース ソフトウェアをリリースしました。

>>: 

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

...

...

春の耕作が進むにつれ、農業ロボットが近代的な農業システムの形成に貢献している

春の耕作シーズンとなり、全国各地で春耕作が行われています。農業農村部の最新データによると、国内の春穀...

ジェネレーティブ AI 時代のデータ センターの再構築

最近の人工知能に関する議論には、OpenAI の大規模言語モデル (LLM) の GPT ファミリー...

AIが医療業界に参入すると、人間は看護師の仕事を失うのでしょうか?

AIに取って代わられにくい、人間の「鉄の飯碗」を探し続けていきましょう。医療業界では、AI と自動...

...

設計原則、テスト指標...顔アルゴリズムテストのハードコアスキルを体系的に整理

ビジュアル AI 分野の開発者にとって、適切なアルゴリズムを選択することはプロジェクトの戦いの半分を...

ニューラル ネットワーク アルゴリズムを使用した C# での手書き数字認識

デモをダウンロード - 2.77 MB (元のアドレス)手書き文字認識.zipソースコードをダウンロ...

WOT2019 検索推奨アルゴリズムフォーラム: さまざまな分野における AI ベースの検索推奨の実用化

6月21日、WOT2019グローバルテクノロジーサミットとグローバル人工知能テクノロジーサミットが北...

アマゾンのドローン配送部門の主要メンバーが目標未達成で辞任

アマゾンのドローン配送部門プライムエアで安全、飛行運用、規制業務を担当していたショーン・キャシディ氏...

...

ソフトウェアプログラマー試験: 最もシンプルなコード実装による最速のソートおよび検索アルゴリズム

アルゴリズムの中心的な問題はソートと検索です。これら 2 つの分野は最も広く使用され、最も徹底的に研...

...

Windows コンピューターでディープラーニング モデルをトレーニングしますか?非常に詳細な設定チュートリアルはこちら

ほとんどのディープラーニング モデルは Linux システムでトレーニングされていますが、Windo...