この記事では、まず RAG の概念と理論に焦点を当てます。次に、オーケストレーション用の LangChain、OpenAI 言語モデル、および Weaviate ベクトル データベースを使用して、シンプルな RAG を実装する方法を示します。 検索強化生成とは何ですか?検索拡張生成 (RAG) の概念は、外部の知識ソースを通じて LLM に追加情報を提供することを指します。これにより、LLM は幻覚を減らしながら、より正確で文脈に沿った回答を生成できるようになります。 質問 現在最も優れた LLM は大量のデータを使用してトレーニングされるため、ニューラル ネットワークの重みには多くの一般的な知識 (パラメーター メモリ) が保存されます。ただし、プロンプトを通じて結果を生成するために LLM がトレーニング データ以外の知識 (新しい情報、独自のデータ、ドメイン固有の情報など) を必要とする場合は、次のスクリーンショットに示すように、事実の不正確さ (幻覚) が発生する可能性があります。 したがって、LLM の一般的な知識を追加のコンテキストと統合することが非常に重要であり、これにより、LLM はより少ない幻覚でより正確でコンテキストに沿った結果を生成するのに役立ちます。 解決 従来、ニューラル ネットワークは、モデルを微調整することでドメイン固有または独自の情報に適応されてきました。この手法は効果的ですが、計算量が多く、コストがかかり、技術的な専門知識が必要となるため、変化する情報に迅速に適応することが困難です。 2020 年、Lewis らによる論文「知識集約型 NLP タスクのための検索拡張生成」では、より柔軟な手法である検索拡張生成 (RAG) が提案されました。この論文では、研究者らは生成モデルと、より簡単に更新できる外部知識ソースを使用して追加情報を提供できる検索モジュールを組み合わせました。 簡単に言えば、RAG は LLM にとって、人間にとってのオープンブック試験のようなものです。オープンブック試験では、学生は教科書やノートなどの参考資料を持ち込み、質問に答えるための関連情報を得ることができます。オープンブック試験の考え方は、特定の情報を記憶する能力ではなく、学生の推論能力に重点を置くというものです。 同様に、事実の知識は LLM の推論機能とは別であり、簡単にアクセスして更新できる外部の知識ソースに保存できます。
次の図は、最も基本的な RAG ワークフローを示しています。 検索強化生成 (RAG) ワークフロー
LangChainを使用して検索強化型生成を実装する以下は、OpenAI LLM と Weaviate ベクター データベース、OpenAI 埋め込みモデルを使用して、Python で RAG ワークフローを実装する方法のチュートリアルです。 LangChainの役割はオーケストレーションです。 必要な前提条件 必要な Python パッケージがインストールされていることを確認してください。
さらに、ルート ディレクトリの .env ファイルを使用して、関連する環境変数を定義します。 OpenAI API キーを取得するには OpenAI アカウントが必要で、その後 API キー (https://platform.openai.com/account/api-keys) で「新しいキーを作成」する必要があります。 次に、次のコマンドを実行して、関連する環境変数を読み込みます。 準備 準備段階では、すべての追加情報を保存するための外部知識ソースとしてベクター データベースを準備する必要があります。このベクター データベースの構築には、次の手順が含まれます。
最初のステップは、データを収集してロードすることです。たとえば、バイデン大統領の 2022 年の一般教書演説を追加のコンテキストとして使用するとします。 LangChain の GitHub リポジトリには、オリジナルのテキスト ドキュメントが提供されています。このデータをロードするには、LangChain に組み込まれている多くのドキュメント ロード ツールを使用できます。ドキュメントは、テキストとメタデータで構成される辞書です。テキストを読み込むには、LangChain の TextLoader を使用できます。 元のドキュメントのアドレス: https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/modules/state_of_the_union.txt 次に、ドキュメントをチャンクに分割します。ドキュメントの元の状態は長すぎて LLM コンテキスト ウィンドウに収まらないため、小さなテキスト チャンクに分割する必要があります。 LangChain には、分割ツールも多数組み込まれています。この単純な例では、chunk_size が 500、chunk_overlap が 50 の CharacterTextSplitter を使用して、テキスト ブロック間のテキストの連続性を維持できます。 最後に、テキストブロックを埋め込んで保存します。テキスト チャンク全体でセマンティック検索を実行できるようにするには、テキスト チャンクごとにベクトル埋め込みを生成し、埋め込みとともに保存する必要があります。ベクトル埋め込みを生成するには、OpenAI 埋め込みモデルを使用できます。保存には、Weaviate ベクトル データベースを使用できます。 .from_documents() を呼び出すと、ベクター データベースにテキスト ブロックを自動的に入力できます。 ステップ1: 取得 ベクター データベースにデータを入力し終えたら、ユーザー クエリと埋め込みブロック間の意味的類似性に基づいて追加のコンテキストを取得できるリトリーバー コンポーネントとして定義できます。 ステップ2: 強化
次に、追加のコンテキストでプロンプトを強化するには、プロンプト テンプレートを準備する必要があります。プロンプトは、以下に示すように、プロンプト テンプレートを使用して簡単にカスタマイズできます。 ステップ3: 生成 最後に、リトリーバー、プロンプト テンプレート、LLM をリンクして、この RAG プロセスの思考チェーンを構築できます。 RAG チェーンが定義されると、それを呼び出すことができます。 次の図は、この特定の例の RAG プロセスを示しています。 要約するこの記事では、2020 年の論文「知識集約型 NLP タスクのための検索拡張生成」に由来する RAG の概念を紹介します。この記事では、RAG の背後にある理論 (動機と解決策を含む) を紹介した後、それを Python で実装する方法を示します。この投稿では、Weaviate ベクター データベースと OpenAI 埋め込みモデルを使用して OpenAI LLM で RAG ワークフローを実装する方法を説明します。 LangChainの役割はオーケストレーションです。 |
<<: GPT-4V の医師免許試験の点数は、ほとんどの医学生よりも高いです。AI がクリニックに参加するまでにはどれくらい時間がかかりますか?
>>: LangChain、RStudio、Enough Python を使って人工知能を構築する方法
人工知能は万能のように思えますが、実際には人工知能に代替できない職業も数多くあります。 HSBCは銀...
科学技術と経済社会の急速な発展に伴い、人工知能の応用はますます一般的になり、その発展は私たちの仕事や...
自動車のインテリジェンスの急速な発展に伴い、新たなスマートな運転体験を実現し、スマートな移動を再定義...
序文: 2020年、データセンター建設は中央政府による新インフラ戦略に正式に組み込まれ、新インフラの...
RPA コンサルティング サービスは、製造業者がソフトウェア ロボットを使用してさまざまな反復的なル...
人類はアフリカでホモ・サピエンスとして誕生して以来、約50万年にわたる進化の過程を経てきました。人類...
AI.com ドメイン名は、もともと今年 2 月に OpenAI によって購入され、ChatGPT ...
はじめに:AI(人工知能)技術は、Meituan AppからDianping App、フードデリバリ...
翻訳者 |ブガッティレビュー | Chonglou ChatGPTは2020年6月にリリースされ、 ...
先進運転支援システム(ADAS)および自律走行車向けの光ベースの測距技術(LIDAR)の革新企業であ...