より大きく、より賢いモデルが次々とリリースされているにもかかわらず、最先端の生成ラージ・ランゲージ・モデル(LLM)は依然として大きな問題を抱えている。このような専門知識の欠如は、モデルが不正確な情報や捏造された情報を生成するファントム現象などの問題につながる可能性がある。検索機能拡張ジェネレーション(RAG)これは、モデルが外部ソースからドメイン固有のデータにリアルタイムでアクセスできるようにすることで緩和され、正確で詳細な回答を提供する能力が強化される。
このような制約があるにもかかわらず、生成モデルは日常的なタスクを自動化し、日常業務を支援し、新しい方法でデータと対話するのに役立つ、非常に影響力のあるツールである。では、どのようにすれば生成モデルの幅広い知識を活用しながら、私たちの特定の使用シナリオに役立つようになるのだろうか?その答えは、タスクに関連したデータを生成モデルに提供することにある。
本稿では、外部データを参照できるようにすることで、モデルの能力を強化するフレームワークであるRAG(Retrieval Augmented Generation)を詳しく見ていく。このフレームワークは、外部データを参照できるようにすることで、モデルの能力を強化するものである。 ラグ RAGがどのように機能するかを説明し、RAGパイプラインのアーキテクチャを詳細に分析する。さらに、いくつかの実用的なRAGの使用例を提供し、具体的なRAGの実装方法を提案し、いくつかの高度なRAG技術を紹介し、RAGの評価方法について議論する。
LLMは、テキストや言語に関連するさまざまなタスクを実行できる、大規模なデータセットで訓練された言語モデルを指す広い用語である。生成型LLMは、チャットボットで使用されるような、ユーザーのプロンプトに応答して新しいテキストを生成できるモデルであり、以下のように呼ばれることが多い。生成モデル.テキストデータを意味空間にエンコードするLLMは、次のように呼ばれる。モデルの埋め込み.したがって、本稿では、生成モデルと埋め込みモデルという用語を使用して、これら2種類のモデルを区別する。
生成モデリングの限界
生成モデルは、ソーシャルメディアの投稿、書籍、学術論文、クロールされたウェブページ(これらに限定されない)を含む多数のデータセットで学習することで、ある程度の一般的な知識を獲得するように訓練される。その結果、これらのモデルは人間のようなテキストを生成し、様々な質問に答え、回答、要約、創作などのタスクを支援することができる。
しかし、生成モデルのトレーニング用データセットは、ニッチなトピックやデータセットカットオフ日以降の新しい開発に関する情報が欠けているため、必然的に不完全なものとなる。また、生成モデルは、社内データベースやリポジトリにある独自のデータにアクセスすることもできない。さらに、これらのモデルは質問の答えを知らない場合、推測する傾向があり、その推測が不正確なこともある。不正確な、あるいは架空の情報を生成するこの現象は幻覚として知られており、顧客向けのAIアプリケーションでは実際の風評被害につながる可能性がある。
特殊なタスクにおける生成モデルのパフォーマンスを向上させ、錯覚を減少させる鍵は、トレーニングデータには存在しない追加情報を提供することである。これがRAGの出番である。
検索拡張世代(RAG)とは?
検索機能拡張ジェネレーション(RAG) には、外部データソースから現在のタスクに関連する追加データを取得する方法がある。補強ジェネラリスト知識の生成的マクロ言語モデリングのためのフレームワーク。
外部データソースには、社内のデータベース、ファイル、リポジトリのほか、ニュース記事、ウェブサイト、その他のオンラインコンテンツなど、一般に入手可能なデータを含めることができます。このようなデータにアクセスすることで、モデルはより事実に基づいた回答を提供し、回答でソースを引用することができるようになり、モデルの元のトレーニングデータセットで情報が見つからない場合の「当て推量」を避けることができます。
RAGの一般的な使用例としては、最新情報の検索、専門分野の知識へのアクセス、複雑なデータ駆動型の質問への回答などがある。
RAG建築
RAGパイプラインの基本的な構成要素は次のように分けられる。三要素外部知識ソース、プロンプトテンプレート、生成モデル。これらのコンポーネントにより、大規模な言語モデル駆動型アプリケーションは、貴重なタスク固有のデータを使用して、より正確な応答を生成することができます。
外部の知識源
外部知識のサポートがなければ、生成モデルはその知識に基づいてしか成り立たない。パラメトリックな知識モデルの学習段階で学習された答えを生成する。RAGでは、パイプラインに外部の知識源別名ノンパラメトリック知識.
外部データソースは通常タスクに特化しており、モデル本来のトレーニングデータやパラメータ化された知識の範囲を超えていることが多い。さらに、外部データソースは通常ベクトルデータベースに保存され、その内容や形式は様々です。
一般的な外部データソースには、社内のデータベース、法律、規制、文書、医学・科学文献、クロールされたウェブページなどがある。マイクロソフトのCopilotのようなパーソナルAIアシスタントは、電子メール、文書、インスタントメッセージを含む幅広いパーソナルデータソースを活用し、カスタマイズされた回答を提供し、タスクをより効率的に自動化する。
先端テンプレート
プロンプトは生成モデルにリクエストを伝えるために使用するツールです。プロンプトは複数の要素を含むことができますが、通常、クエリ、ディレクティブ、関連するレスポンスを生成する際にモデルをガイドするコンテキストを含みます。
先端テンプレート 標準化されたプロンプトを生成する構造化された方法が提供され、様々なクエリやコンテキストを挿入することができる。RAG (Retrieval Augmented Generation) プロセスでは、外部データソースから関連データを取得し、ヒントテンプレートに挿入してヒントを補強する。基本的に、プロンプトテンプレートは外部データとモデルの橋渡し役として機能し、モデルが推論で使用するコンテキストに関連した情報を提供し、正確な応答を生成する。
プロンプト・テンプレート = "文脈上の情報は以下の通りである。\n"
"---------------------\n"
"{context_str}"。\n"
"---------------------\n"
"予備知識ではなく、文脈的な情報に基づいて質問に答える。\n"
質問:{query_str}」。\n"
答え
生成的大規模言語モデリング(LLM)
RAGの最後のコンポーネントは、生成モデルとしても知られる大規模言語モデル(LLM)であり、ユーザーのクエリに対する最終的な回答を生成するために使用される。外部知識ベースによって提供された情報で強化されたプロンプトは、その後モデルに送られ、内部知識と新たに検索されたデータを組み合わせた回答を生成する。
RAGのアーキテクチャーとその主要コンポーネントについて説明したので、RAGワークフローでそれらがどのように組み合わされているかを見てみよう。
RAGはどのように機能するのか?
RAGは2つのフェーズを持つマルチステップ・フレームワークである。まず、取り込みフェーズでは、外部知識が前処理され、検索の準備がされる。次に推論フェーズでは、モデルが外部知識ベースから関連データを検索し、ユーザーからのプロンプトでそれを補強し、応答を生成する。それでは、各フェーズを詳しく見ていこう。
ステージ1:摂取
まず、外部の知識ソースを準備する必要がある。簡単に言えば、外部データをクリーニングし、モデルが理解できる形式に変換する必要がある。これを 取り込み期.取り込みプロセスにおいて、テキストまたは画像データは、以下のようなプロセスを経ます。 定量的 元のフォーマットから 埋め込み.エンベッディングが生成されると、後日簡単に検索できるように保存する必要があります。最も一般的には、これらのエンベッディングはベクトルデータベースに格納され、下流のタスクのために情報を迅速かつ効率的に検索できるようにします。
ステージ2:推論
外部データがエンコードされて 推論 検索段階では、モデルが回答を生成したり、質問に答えたりする。推論は、検索、強化、生成の3段階に分けられる。
取り出す
推論フェーズは、ユーザーのクエリに応答して外部知識ソースからデータを検索する、検索から始まる。検索方法は形式や複雑さによって異なるが、外部知識がベクトルデータベースに埋め込まれ格納される単純なRAGモデルでは類似検索 は最も単純な検索形式である。
類似検索を行うには、まず、ユーザクエリを外部データと同じ多次元空間に埋め込み、埋め込まれた外部データと直接比較できるようにする必要がある。その際 類似検索 クエリと外部データ点間の距離が計算され、最短距離の点が返され、検索プロセスが完了する。
オーグメンテーション
最も関連性の高いデータポイントが外部データソースから取得されると、エンハンスメントプロセスでは、この外部情報を事前に定義されたプロンプトテンプレートに挿入して統合する。
世代
拡張されたプロンプトがモデルのコンテキストウィンドウに入力された後、モデルはユーザー入力に対する最終的な応答を生成する。生成フェーズでは、モデルは内部の言語理解と拡張された外部データを組み合わせて、首尾一貫した文脈化された回答を生成する。
このステップでは、流動的で自然な方法で応答を生成する一方、豊富な情報を活用して、出力がユーザーのクエリに対して正確かつ適切であることを保証する。エンハンスメントは、外部の事実を統合することを目的とし、一方、ジェネレーションは、この組み合わされた知識を、特定のリクエストに対する、よく構造化された、人間のような出力に変換する。
RAG使用例
RAGの定義、仕組み、アーキテクチャについて説明したところで、このフレームワークが実世界でどのように使用できるかを見るために、いくつかの実用的な応用シナリオを探求する。生成的な大規模言語モデルを最新のタスクに特化したデータで補強することで、その精度、関連性、特殊なタスクを処理する能力を向上させることができる。その結果、RAGはリアルタイム情報検索、コンテンツ推薦システム、パーソナルAIアシスタントの構築に広く利用されている。
リアルタイム情報検索
生成モデルを単独で使用する場合、学習データセットに存在する情報しか取得できない。しかし、RAGのフレームワークでは、モデルは外部ソースからデータや情報を取得することができるため、より正確で最新の応答を保証することができます。そのような例として、ChatGPT-4oはリアルタイムでウェブページから直接アクセスして情報を取得することができます。これは、ベクターデータベースに組み込まれていない外部データソースを利用するRAGユースケースであり、株価、旅行アドバイス、天気予報など、ニュースやその他のタイムセンシティブなイベントに関するユーザーの問い合わせに答えるのに特に役立ちます。
コンテンツ推薦システム
コンテンツ推薦システムは、ユーザに関連する製品やコンテンツを推薦するために、ユーザデータと嗜好を分析します。伝統的に、これらのシステムは、複雑な統合モデルとユーザーの嗜好の大規模なデータセットを必要とします。RAGは、外部の文脈に関連したユーザーデータをモデルの一般的な知識と直接統合することにより、推薦システムの構築を簡素化し、パーソナライズされた推薦を生成することを可能にします。
パーソナルAIアシスタント
文書、電子メール、Slackメッセージ、メモを含む私たちの個人データは、モデルを生成するための重要なデータソースです。個人データに対してRAGを実行することで、会話形式で対話することができ、効率を高め、ありふれた作業を自動化することができる。マイクロソフトのようなAIアシスタントの助けを借りて コパイロット 歌で応える ノーティオン (Ask AI)を使えば、簡単なプロンプトを使って関連文書を検索したり、パーソナライズされたEメールを書いたり、文書や議事録を要約したり、会議のスケジュールを立てたりすることができる。
RAGの実施方法
RAGがどのように機能するかを理解したところで、機能的なRAGパイプラインを構築する方法を見ていきます。RAGは、個々のRAGコンポーネントだけでなく、ベクターデータベース、エンベッディング生成ツール、その他のAPIなどの外部サービスの統合を可能にするビルド済みのツールやモジュールを提供することで、ビルドプロセスを簡素化するさまざまなフレームワークを通じて実装することができます。
LangChain、LlamaIndex、DSPyはすべて、RAGパイプラインと大規模言語モデル(LLM)アプリケーションを構築し最適化するための強力なツールと統合を提供する、活発なコミュニティを持つ強力なオープンソースのPythonライブラリです。
- ラングチェーン LLMベースのアプリケーションを開発するためのビルディングブロック、コンポーネント、サードパーティとの統合を提供します。以下のものと組み合わせて使用できます。 ラングラフ は、プロキシ・スタイルのRAGパイプラインを構築するために併用される。 ラングスミス RAG評価を行う。
- ラマインデックス LlamaIndexは、外部データソースを統合するLLMアプリケーションを構築するためのツールを提供するフレームワークです。 ラマハブこれは、データローダー、プロキシ、データセット、およびRAGパイプラインの作成を簡素化するその他のコンポーネントの豊富なライブラリです。
- DSPy は、LLMパイプラインを最適化するためのモジュラーフレームワークです。LLMとRM(検索モデル)をDSPyで設定することで、RAGパイプラインをシームレスに最適化できます。
Weaviateは以下を提供する。 インテグレーテッド 歌で応える 式 Weaviateは、これらのフレームワークで使用することができます。具体的な例については、Weaviateを ラマインデックス 歌で応える DSPy RAGパイプラインを構築する。
RAGを素早く立ち上げたい場合は、以下をご覧ください。 ヴェルバVerbaは、RAGパイプラインのテストや実験のための遊び場としてだけでなく、研究支援や社内文書の分析、様々なRAG関連タスクの効率化など、個人的な作業にも使用できる汎用性の高いツールです。Verbaは、RAGパイプラインのテストや実験のための遊び場としてだけでなく、研究の支援、内部文書の分析、さまざまなRAG関連タスクの合理化などの個人的なタスクにも使用できる汎用性の高いツールです。
Verbaですぐに使えるRAGを実装する
RAGテクノロジー
従来のRAGワークフローは、通常、類似性検索によって取得されるベクトルデータベースに組み込まれた外部データソースで構成されています。しかし、より正確でロバストな結果を得るためにRAGワークフローを強化する方法がいくつかあり、総称してAdvanced RAGと呼ばれています。
RAGパイプラインの機能は、より高度な推論と動的なデータ検索を可能にするグラフデータベースとエージェントを導入することで、さらに拡張することができる。次のセクションでは、一般的な高度なRAG技術を紹介し、エージェントベースのRAGとグラフRAGの概要を提供する。
上級RAG
高度なRAG技術は、パイプラインのすべての段階で展開することができる。以下のような事前検索戦略 メタデータのフィルタリング およびテキスト チャンク 検索を絞り込み、データの最も関連性の高い部分のみを考慮するようにすることで、検索効率と関連性を向上させることができる。次のような、より高度な検索テクニックを使用することもできる。 ハイブリッド検索また、類似検索とキーワード検索の長所を併せ持つ「類似検索」を用いることで、よりロバストな検索結果を得ることができる。最後に、検索結果に対してソート・モデルを用いることで、検索結果のロバスト性を高めることができる。 再注文 そして、ドメイン固有のデータに基づいて微調整された大規模言語モデル(LLM)を使用して生成することで、生成結果の品質を向上させることができる。
このトピックをより深く掘り下げたい方は、以下の記事をご覧ください。 先進のRAGテクノロジー ブログの記事
代理RAG
AIエージェント は、情報を解釈し、計画を立て、意思決定を行うことができる自律的なシステムである。RAGパイプラインに追加されたエージェントは、ユーザーのクエリを再定義し、最初の結果が不正確であったり、無関係であったりした場合に、より関連性の高い情報を再取得することができる。エージェントベースのRAGは、複数の文書にまたがる情報を比較したり、フォローアップの質問をしたり、検索と生成の戦略を反復的に調整するなど、多段階の推論を必要とする、より複雑なクエリも扱うことができる。
プロキシを含み、テキストチャンキングや並べ替えなどの高度なテクニックを活用したRAGパイプラインをもっと深く知りたい方は、LlamaIndexブログの次の投稿をご覧ください。 文 マッチング ノート.
グラフィック RAG
従来のRAGは、単純な検索によってQ&Aのタスクを解決することには優れているが、次のような質問に答えることはできない。合計外部の知識ベースから結論を導き出す問題。グラフィカルRAGは、生成モデルを使用して知識グラフを作成し、主要なエンティティ間の関係を抽出して保存することで、この問題に対処することを目指している。これにより、RAGシステムは、複数の文書やデータソースを比較し要約する必要があるクエリに対応することができる。
グラフィックスRAGの構築プロセスの詳細については、MicrosoftのGraphRAGを参照のこと。 ソフトウェアパッケージ歌で応える(さんぷ.
RAGの評価方法
RAGはマルチフェーズ、マルチステップのフレームワークであり、グローバルかつきめ細かな対応が要求される。評価.この評価手法は、コンポーネント・レベルの信頼性と全体的な正確性を保証する。このセクションでは、これら2つの評価方法について検討し、一般的な評価フレームワークであるRAGASを紹介する。
コンポーネント・レベルの評価
コンポーネントレベルでは、RAG評価は通常、リトリーバーとジェネレーターの品質評価に焦点を当てる。
検索者の評価は、主に正確さと関連性に焦点を当てている。この文脈では精度 リトリーバーがクエリに直接対応する情報を選択する精度を測定する。 関連性 そして、検索されたデータがクエリの特定のニーズやコンテキストにどれだけ合致しているかを評価する。
一方、ジェネレーターの評価は真実性と正しさに関わる。妥当性 モデルによって生成されたレスポンスが、関連文書の情報を正確に反映しているかどうかを評価し、オリジナルのソースとの一貫性をチェックする。ちょく そして、生成されたレスポンスが、クエリの文脈における実際の状況や期待される回答と一致しているかどうか、真正かどうかが評価される。
エンド・ツー・エンドの評価
レトリーバーとジェネレーターは2つの独立したコンポーネントだが、ユーザーのクエリに対して一貫したレスポンスを生成するために互いに依存している。
答えの意味的類似性を計算することは、検索者と生成者がどの程度うまく連携しているかを評価するための簡単で効率的な方法である。回答 意味的類似性 生成された回答と実際の回答サンプルの間の意味的類似度が計算される。生成されたレスポンスと実際の回答サンプルの類似度が高いということは、プロセスが関連する情報を取得し、文脈に適したレスポンスを生成できることを示している。
RAG評価フレームワークは、RAGプロセスを評価するための構造化された方法論、ツールまたはプラットフォームを提供する。ラガス(Retrieval Augmented Generation Assessment)は、検索関連性、生成品質、真正性を評価するための一連のメトリクスを提供するフレームワークで、手動でデータに注釈を付ける必要がなく、特に人気があります。このWeaviateのポッドキャストでは、RAGASの作成者から、RAGASがどのように機能するのか、またRAGASのスコアを最適化するための高度なテクニックを直接学ぶことができます。
RAG対微調整
RAGは、生成的な大規模言語モデルの能力を拡張し、制限を緩和する方法の一つである。大規模言語モデルのファインチューニングは、ドメインに特化したデータでモデルをトレーニングすることで、高度に特殊化されたタスクを実行できるようにする、特によく使われる手法です。ファインチューニングは、特定のトーンや文体を採用するためにビッグラングモデルをトレーニングするような特定のユースケースに適しているかもしれませんが、RAGはモデルの精度を向上させ、錯覚を減らし、特定のタスクのためにビッグラングモデルをカスタマイズする最も簡単な方法です。
RAGの利点は、基礎となる生成モデルの重みを更新する必要がないことであり、これはしばしばコストと時間のかかるプロセスである。このため、RAGはリアルタイム情報を必要とするアプリケーションにとって実用的なソリューションとなる。次のセクションでは、RAGのアーキテクチャと、そのコンポーネントがどのように連携して強力な検索機能拡張システムを構築しているのかを掘り下げて説明する。
概要
本稿では、生成モデル駆動型アプリケーションのパフォーマンスを向上させるために、タスク固有の外部知識を活用するフレームワークとしてRAGを紹介した。外部知識ソース、ヒントテンプレート、生成モデルなど、RAGプロセスのさまざまなコンポーネントについて学び、それらがどのように連携して検索、強化、生成を可能にするかを学びました。また、LangChain、LlamaIndex、DSPyなど、RAGの一般的なユースケースや実装フレームワークについても議論する。最後に、高レベルRAG手法、エージェントベースRAG、グラフィカルRAGなど、RAGのための特殊な手法や、RAGプロセスの評価方法についても言及する。
少なくとも、この記事の各セクションは、単独でブログ記事として、あるいは本の1章として成り立つだろう。そこで、この記事で紹介したトピック、フレームワーク、メソッドについてより深く学ぶために、学術論文、ブログ記事、YouTubeビデオ、チュートリアル、ノートブック、レシピなどのリソースガイドをまとめた。
リソースガイド
📄 知識集約的な自然言語処理タスクのための検索機能強化型生成 (オリジナルRAGペーパー)
👩🍳 DSPyでRAGを始める処方
👩🍳 LlamaIndexのシンプルなRAG処方
📝 先進のRAGテクノロジー(ブログ記事)
📒 複数の文書エージェントによるエージェントベースRAG(ノート)
📝 RAG評価の概要(ブログ記事)
📄 検索強化生成の評価:概要(学術論文)