AIにおける検索拡張生成(RAG)とは?

検索拡張生成(RAG)とは、再学習することなく大規模言語モデル(LLM)に新しいデータソースを追加する手法です。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • AIにおける検索拡張生成(RAG)について理解する
  • RAGがLLMをどのように強化するかについて説明する
  • RAGチャットボットとAutoRAGについて理解する

記事のリンクをコピーする

AIにおける検索拡張生成(RAG)とは?

検索拡張生成(RAG)とは、大規模言語モデル(LLM)を完全に再トレーニングすることなく、そのコンテキストに関連するナレッジベースにアクセスさせることで、特定のコンテキストで使用する大規模言語モデル(LLM)を最適化するプロセスです。RAGは、LLMを特殊なユースケースに素早く適応させる費用対効果の高い方法です。開発者が人工知能(AI)モデルを微調整するために使用できる方法の1つです。

LLMは、膨大な量のデータでトレーニングされますが、設定によっては必要な特定の情報を生成できない場合があります。人間の言語の仕組みに関する一般的な理解は持っていますが、あるトピック分野に関して必ずしも専門知識を持っているわけではありません。RAGはこれを修正する方法の1つです。

車の整備士が1964年製のシボレーを整備しようとする場面を想像してください。その整備士は、何千時間もの経験を積んだことで車の整備に関する一般的な知識を豊富に持っていますが、特定の車種を正しく整備するためには、その車のオーナーズマニュアルが必要です。しかし、その整備士は再び整備士として資格を取得する必要はありません。マニュアルを参照するだけで、既存の一般知識を活かして作業ができます。

RAGも同様です。LLMに「マニュアル」、つまりナレッジベースを提供することで、LLMは一般的な知識を特定のユースケースに適応させることができます。例えば、一般的なLLMはAPIクエリの仕組みについてのコンテンツは生成できても、特定のアプリケーションのAPIをどのようにクエリするかは説明できないかもしれません。しかしRAGでは、そのLLMをアプリケーションの技術文書とリンクさせることで、そのアプリケーションで使用するために適応させることができます。

RAGはどのように機能するか?

通常、LLMがクエリを受け取ると、既存のパラメータとトレーニングに従ってそのクエリを処理します。

RAGにより、LLMは、LLMのトレーニングデータセットに含まれないデータベースである「外部データ」を参照することができるようになります。したがって、通常のLLMの動作とは異なり、RAGを備えたLLMは外部データを取り込んで応答を強化します。これが「Retrieval(外部データの取得)- Augmented(このデータで応答を強化)- Generation(応答を生成)」という名前の由来です。

上記の例の自動車の整備担当が、ユーザーのマニュアルを直接参照するのではなく、LLMを使用したいとします。RAGを利用することで、LLMはオーナーのマニュアルの参照をそのプロセスに直接組み込むことができます。LLMはクラシックカーのマニュアルで学習されていない、あるいは学習されていたとしてもわずかな割合しか含まれていないかもしれませんが、RAGを使うことで関連性が高く正確な回答を生成できるのです。

LLMが外部データソース(車のマニュアルなど)を使用し、クエリできるようにするために、データはまずベクトルに変換され、次にベクトルデータベースに保存されます。このプロセスは、機械学習モデルを使用して、データセットの項目の数学的表現を生成します(各「ベクトル」は、[-0.41522345,0.97685323...] のような数字の配列です)。

ユーザーがプロンプトを送信すると、LLMはそのプロンプトをベクトルに変換し、外部のデータソースから作成されたベクトルデータベースを検索して関連する情報を探します。プロンプトの追加コンテキストとしてその情報を追加し、拡張されたプロンプトを典型的なモデルで実行して応答を作成します。

AIにおけるRAGの長所と短所は?

LLMの微調整にRAGを使う長所:

  • ユースケースにおける精度の向上:LLMは、マニュアルがあれば、整備士が車を適切に修理できる可能性が高いように、プロンプトに関連する知識ベースにアクセスできる場合に、正しい応答を提供できる可能性が高くなります。
  • 低コストでモデルを改良できる:再学習が不要なため、新しい文脈でLLMを使い始める際、計算コストや時間が少なくて済みます。
  • 柔軟性:モデルのパラメータを調整する必要はないため、同じモデルをさまざまなユースケースに素早く応用できます。

潜在的な短所:

  • 応答時間の短縮:RAGでは再学習は不要ですが、推論(プロンプトに基づいて推測・応答するプロセス)に時間がかかることがあります。これは、LLMが応答を生成する際に複数のデータセットを照会する必要があるからです。
  • データセット間の不整合:2セットの辞書が歴史的な出来事の記述が若干異なるように、外部知識ベースはモデルのトレーニングデータセットとシームレスに統合できない場合があります。そのため、クエリに対する応答に一貫性がない可能性があります。
  • 手動によるメンテナンス:外部ナレッジベースが更新されるたびに(新モデルの車が登場するなど)、開発者は新しいデータをベクトルに変換し、ベクトルデータベースを更新するプロセスを手動で開始する必要があります(Cloudflareは、開発者がこの手作業のプロセスを回避できるように、AutoRAGを開発しました。詳細は後述します)。

RAGチャットボットとは?

RAGチャットボットは、RAGを通じて特定のユースケースに特化したLLMベースのチャットボットです。このチャットボットは、動作する文脈に関連する1つまたは複数の外部データソースに接続されています。例えば、自動車整備工場向けのRAGチャットボットであれば、自動車の技術文書にアクセスでき、汎用のLLMチャットボットに質問するよりも整備士にとって実用的です。

RAGと低ランク適応(LoRA)の違い

低ランク適応(LoRA)は、モデルを特定の文脈に適応させるもう1つの方法です。完全な再学習を行わずにモデルを微調整します。ただし、LoRAではモデルのパラメータを調整する必要がありますが、RAGではモデルのパラメータを一切変更しません。LoRAの詳細は、こちらをご覧ください

AutoRAGとは?

AutoRAGは、開発者向けにRAGパイプラインを構築し、管理します。インデックス作成、検索、生成に必要なツールを接続し、定期的にデータとインデックスを同期させることですべてを最新の状態に保ちます。セットアップすると、AutoRAGはバックグラウンドでコンテンツのインデックスを作成し、リアルタイムでクエリに応答します。AutoRAGの仕組みの詳細は、こちらをご覧ください