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 オープンソース ソフトウェアをリリースしました。

>>: 

ブログ    
ブログ    

推薦する

JavaScript ChatGPT プラグインの構築、学習しましたか?

チャット プラグイン システムは、ChatGPT の機能を拡張し、独自のビジネス データを組み込み、...

AIを新たな段階へ導くYLearn因果学習オープンソースプロジェクトがリリース

2022年7月12日、九張雲済DataCanvas社は、もう一つの画期的なオープンソース技術成果であ...

人工知能の影響を受ける低リスクおよび高リスク職業トップ10

囲碁は伝統的な高知能ゲームです。旗取りのプレイヤーは、正方形の格子模様のチェス盤と白黒の丸いチェスの...

スマートホームテクノロジーを通じて AI があなたの家を乗っ取るでしょうか?

スマートホーム テクノロジーは、家電製品、ホーム セキュリティ、照明、エンターテイメントを強化します...

ジェネレーティブAIがソフトウェア配信を支援する方法

レイチェル・レイコック約 2 か月前、私は Thoughtworks の CTO になりました。それ...

AIデザイナー「ルバン」のコア技術が明らかに:1秒間に8,000枚のポスターをデザインする方法とは?

[[228895]] AI は囲碁のゲームを変え、今度はポスターのデザインを変えています。アリババ...

一般的な視覚的推論が出現、カリフォルニア大学バークレー校が単一の純粋なCV大規模モデルを改良、3人の上級学者が参加

最近では、GPT や LLaMA などの大規模言語モデル (LLM) が世界中で人気になっています。...

理解を助ける7種類の人工知能

[[269361]] [51CTO.com クイック翻訳] 人工知能は、これまでで最も驚くべきイノベ...

国内の多くの大学が共同でオープンソースコミュニティLAMMを構築しています。マルチモーダル言語モデルファミリーに参加する時が来ました

ChatGPTの登場以来、大規模言語モデル(LLM)は飛躍的な発展を遂げ、自然言語に基づく人間とコン...

...

潜在意識を使うとAIと何ら変わりません

誰もが騙される可能性がある現代では、別の人を騙して機械が騙されるかどうか試してみませんか?人工知能の...

アート業界におけるメタバースの探究

メタバースの概念がますます普及するにつれて、さまざまな業界がこの豊かな土地を探索し始めました。多くの...

機械学習における不均衡なクラスに対処するための 5 つの戦略

クラスの不均衡: 希少疾患の機械学習データセット(陽性が約 8%)があるとします。この場合、トレーニ...

人工知能(AI)はアパレル業界をどのように変えるのでしょうか?

衣服のデザインから将来のファッショントレンドの発見、パーソナルスタイリストになること、そして消費者の...