ホームページ > テクノロジー周辺機器 > AI > Python コードを実装して大規模モデルの検索機能を強化する

Python コードを実装して大規模モデルの検索機能を強化する

WBOY
リリース: 2023-11-21 11:21:11
転載
1696 人が閲覧しました

Python コードを実装して大規模モデルの検索機能を強化する

この記事の主な焦点は、RAG の概念と理論です。次に、LangChain、OpenAI 言語モデル、および Weaviate ベクトル データベースを使用して、シンプルな RAG オーケストレーション システムを実装する方法を示します。

検索拡張生成とは何ですか?

検索拡張生成 (RAG) の概念は、外部知識ソースを通じて LLM に追加情報を提供することを指します。これにより、LLM は幻覚を軽減しながら、より正確で状況に応じた回答を生成できます。

#コンテンツを書き換える場合、元の文章をそのまま中国語に書き直す必要があります。

#現時点でのベストLLM は大量のデータを使用してトレーニングされるため、大量の一般知識 (パラメーター メモリ) がニューラル ネットワークの重みに保存されます。ただし、プロンプトで LLM がトレーニング データ以外の知識 (新しい情報、独自のデータ、ドメイン固有の情報など) を必要とする結果を生成する必要がある場合、事実の不正確さが発生する可能性があります。以下のスクリーンショットに示すように、元の文なしで中国語に書き直されました (錯覚):

Python コードを実装して大規模モデルの検索機能を強化する

したがって、これは重要なのは、LLM の一般的な知識と追加のコンテキストを組み合わせて、幻覚を減らし、より正確で状況に応じた結果を生成することです。

ソリューション

従来、モデルを微調整してニューラル ネットワークを特定のドメインや独自情報に適応させることができました。このテクノロジーは効果的ではありますが、大規模なコンピューティング リソースを必要とし、高価であり、技術専門家のサポートが必要なため、変化する情報に迅速に適応することが困難になります。の論文「知識集約型 NLP タスクのための検索拡張生成」では、より柔軟なテクノロジである検索拡張生成 (RAG) が提案されています。この論文では、研究者らは生成モデルと、より簡単に更新できる外部知識ソースを使用して追加情報を提供できる検索モジュールを組み合わせました。

専門用語で言うと、LLM にとっての RAG は、人間にとってのオープンブック試験と同じです。オープンブック試験の場合、学生は教科書やノートなどの参考資料を持参して、質問に答えるための関連情報を見つけることができます。オープンブック試験の背後にある考え方は、試験では学生の特定の情報を記憶する能力ではなく、推論する能力に焦点を当てるというものです。

#同様に、事実に関する知識は LLM 推論機能とは異なり、簡単にアクセスして更新できる外部知識ソースに保存できます

パラメータ化された知識: トレーニング中に学習した知識は、ニューラル ネットワークの重みに暗黙的に保存されます。

  • ノンパラメトリック知識: ベクトル データベースなどの外部知識ソースに保存されます。
  • 次の図は、最も基本的な RAG ワークフローを示しています。

書き換えられたコンテンツ: ワークフロー検索拡張生成 (RAG) の再構築用

Python コードを実装して大規模モデルの検索機能を強化する

# 検索: ユーザー クエリを使用して、外部の知識ソースから関連するコンテキストを取得します。これを行うには、埋め込みモデルを使用して、ユーザー クエリをベクトル データベース内の追加のコンテキストとして同じベクトル空間に埋め込みます。これにより、類似性検索を実行し、このベクトル データベース内でユーザー クエリに最も近い k データ オブジェクトを返すことができます。

  1. 機能強化: ユーザー クエリと取得した追加コンテキストは、プロンプト テンプレートに入力されます。
  2. 生成: 最後に、検索強化プロンプトが LLM に供給されます。
  3. LangChain を使用して検索拡張生成を実装する

次に、Python を使用して RAG ワークフローを実装する方法を紹介します。 OpenAI LLM、Weaviate ベクトル データベース、OpenAI 埋め込みモデル。 LangChain の役割はオーケストレーションです。

言い換えてください: 必須の前提条件

必要な Python パッケージがインストールされていることを確認してください:

  • #langchain、オーケストレーション
  • openai、組み込みモデルと LLM
  • ##weaviate-client、ベクトル データベース
  • #!pip install langchain openai weaviate-client
    ログイン後にコピー
さらに、ルート ディレクトリの .env ファイルを使用して、関連する環境変数を定義します。 OpenAI API キーを取得するには、OpenAI アカウントが必要です。その後、API キー (https://platform.openai.com/account/api-keys) で「新しいキーを作成」します。

OPENAI_API_KEY="<your_openai_api_key>"</your_openai_api_key>
ログイン後にコピー

次に、次のコマンドを実行して、関連する環境変数をロードします。

import dotenvdotenv.load_dotenv()
ログイン後にコピー

準備作業

#準備フェーズでは、外部知識としてベクトルデータベースを準備する必要がありますソース。すべての追加情報を保存するために使用されます。このベクトル データベースの構築には、次の手順が含まれます。

    データの収集と読み込み
  1. ドキュメントをチャンクに分割する
  2. テキスト ブロックを埋め込んで保存します
書き換えたコンテンツ: まず、データを収集してロードする必要があります。たとえば、バイデン大統領の 2022 年の一般教書演説を追加のコンテキストとして使用したい場合、LangChain の GitHub リポジトリはファイルの元のテキスト ドキュメントを提供します。このデータをロードするには、LangChain のさまざまな組み込みドキュメント ロード ツールを利用できます。ドキュメントはテキストとメタデータで構成される辞書です。テキストを読み込むには、LangChain の TextLoader ツールを使用できます

元のドキュメントのアドレス: https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/modules/ state_of_the_union.txt

import requestsfrom langchain.document_loaders import TextLoaderurl = "https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/modules/state_of_the_union.txt"res = requests.get(url)with open("state_of_the_union.txt", "w") as f:f.write(res.text)loader = TextLoader('./state_of_the_union.txt')documents = loader.load()
ログイン後にコピー

次に、ドキュメントをいくつかのチャンクに分割します。ドキュメントの元の状態は長すぎて LLM のコンテキスト ウィンドウに収まらないため、ドキュメントを小さなテキストの塊に分割する必要があります。 LangChain には多くの組み込み分割ツールもあります。この単純な例では、chunk_size を 500 に設定し、chunk_overlap を 50 に設定して CharacterTextSplitter を使用できます。これにより、テキスト チャンク間のテキストの連続性が維持されます。

from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)chunks = text_splitter.split_documents(documents)
ログイン後にコピー

最後に、テキスト ブロックを埋め込んで保存します。テキスト ブロック全体でセマンティック検索を実行するには、テキスト ブロックごとにベクトル埋め込みを生成し、その埋め込みとともに保存する必要があります。ベクトル埋め込みを生成するには、OpenAI 埋め込みモデルを使用し、保存には Weaviate ベクトル データベースを使用します。 .from_documents() を呼び出すことで、テキストのブロックをベクトル データベースに自動的に入力できます。

from langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Weaviateimport weaviatefrom weaviate.embedded import EmbeddedOptionsclient = weaviate.Client(embedded_options = EmbeddedOptions())vectorstore = Weaviate.from_documents(client = client,documents = chunks,embedding = OpenAIEmbeddings(),by_text = False)
ログイン後にコピー

ステップ 1: 取得

ベクター データベースにデータを書き込んだ後、次のことができます。これは、ユーザー クエリと埋め込みブロックの間の意味論的な類似性に基づいて追加のコンテキストを取得できる取得コンポーネントとして定義されています。

retriever = vectorstore.as_retriever()
ログイン後にコピー

ステップ 2: 強化

from langchain.prompts import ChatPromptTemplatetemplate = """You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.Question: {question} Context: {context} Answer:"""prompt = ChatPromptTemplate.from_template(template)print(prompt)
ログイン後にコピー

次に、追加のコンテキストでプロンプトを強化するには、プロンプト テンプレートを準備する必要があります。以下に示すように、プロンプトはプロンプト テンプレートを使用して簡単にカスタマイズできます。

ステップ 3: 生成

最後に、思考チェーンを構築してリンクします。レトリーバー、プロンプト テンプレート、LLM を組み合わせます。 RAG チェーンが定義されると、それを呼び出すことができます。

from langchain.chat_models import ChatOpenAIfrom langchain.schema.runnable import RunnablePassthroughfrom langchain.schema.output_parser import StrOutputParserllm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)rag_chain = ({"context": retriever,"question": RunnablePassthrough()} | prompt | llm| StrOutputParser() )query = "What did the president say about Justice Breyer"rag_chain.invoke(query)"The president thanked Justice Breyer for his service and acknowledged his dedication to serving the country. The president also mentioned that he nominated Judge Ketanji Brown Jackson as a successor to continue Justice Breyer's legacy of excellence."
ログイン後にコピー

次の図は、この特定の例の RAG プロセスを示しています。

Python コードを実装して大規模モデルの検索機能を強化する

##概要

この記事では、2020 年の論文「Retrieval-Augmented Generation for Knowledge-」から初めて生まれた RAG の概念を紹介します。集中的な NLP タスク」。この記事では、動機や解決策など、RAG​​ の背後にある理論を紹介した後、Python で RAG を実装する方法を示します。この記事では、OpenAI LLM を Weaviate ベクトル データベースおよび OpenAI 埋め込みモデルと組み合わせて使用​​して、RAG ワークフローを実装する方法を説明します。 LangChain の役割はオーケストレーションです。

以上がPython コードを実装して大規模モデルの検索機能を強化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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