検索拡張生成(RAG )は、大規模言語モデル(LLM)が外部データソースから新しい情報を取得して組み込むことを可能にする技術です。 [ 1 ] RAGでは、LLMは指定された文書セットを参照するまで、ユーザーのクエリに応答しません。これらの文書は、LLMの既存のトレーニングデータからの情報を補完します。[ 2 ]これにより、LLMはトレーニングデータでは利用できないドメイン固有の情報や更新された情報を使用できます。[ 2 ]例えば、これはLLMベースのチャットボットが社内データにアクセスしたり、信頼できる情報源に基づいて応答を生成したりするのに役立ちます。
RAGは、応答を生成する前に情報検索を組み込むことで、大規模言語モデル(LLM)を改善します。 [ 3 ]静的なトレーニングデータに依存するLLMとは異なり、RAGはデータベース、アップロードされたドキュメント、またはWebソースから関連するテキストを取得します。[ 1 ] Ars Technicaによると、「RAGは、本質的にLLMプロセスをWeb検索またはその他のドキュメント検索プロセスと融合させることでLLMのパフォーマンスを向上させる方法であり、LLMが事実に忠実になるようにします。」この方法は、AIの幻覚を軽減するのに役立ちます。[ 3 ]チャットボットが存在しないポリシーを説明したり、議論を裏付ける引用を探している弁護士に存在しない訴訟事例を推奨したりする原因となっていました。[ 4 ]
RAGは、LLMを新しいデータで再学習させる必要性を軽減し、計算コストと費用を節約します。[ 1 ]効率性の向上に加え、RAGはLLMが回答に出典を含めることを可能にするため、ユーザーは引用元を検証できます。これにより、ユーザーは取得したコンテンツを相互に確認し、正確性と関連性を確認できるため、透明性が向上します。
RAGという用語は、2020年の研究論文で初めて導入されました。[ 3 ]
LLMは誤った情報を提供する可能性があります。例えば、GoogleがLLMツール「Google Bard」(後にGeminiに改名)を初めて公開した際、LLMはジェイムズ・ウェッブ宇宙望遠鏡に関する誤った情報を提供しました。この誤りは、同社の株価を1,000億ドル下落させる一因となりました。 [ 4 ] RAGはこれらの誤りを防ぐために用いられますが、すべての問題を解決できるわけではありません。例えば、LLMは事実上正しい情報源から情報を取得していても、文脈を誤って解釈すれば誤った情報を生成する可能性があります。MIT Technology Reviewは、AIが「アメリカ合衆国には、バラク・フセイン・オバマというイスラム教徒の大統領がいたことがある」と回答した例を挙げています。このモデルは、この回答を『バラク・フセイン・オバマ:アメリカ初のイスラム教徒大統領? 』という修辞的なタイトルの学術書から取得しました。LLMはタイトルの文脈を「認識」または「理解」していなかったため、誤った記述を生成しました。[ 2 ]
RAGを備えたLLMは、新しい情報を優先するようにプログラムされています。この手法は「プロンプトスタッフィング」と呼ばれています。プロンプトスタッフィングがない場合、LLMへの入力はユーザーによって生成されます。プロンプトスタッフィングがある場合、モデルの応答を導くために、この入力に関連するコンテキストが追加で追加されます。このアプローチは、LLMにプロンプトの早い段階で重要な情報を提供し、既存のトレーニング知識よりも提供されたデータを優先するように促します。[ 5 ]
検索拡張生成(RAG)は、情報検索メカニズムを組み込むことで大規模言語モデル(LLM)を強化します。このメカニズムにより、モデルは元のトレーニングセットを超えた追加データにアクセスし、それを活用できるようになります。Ars Technicaは、「新しい情報が利用可能になった場合、モデルを再トレーニングするのではなく、更新された情報でモデルの外部知識ベースを拡張するだけで済む」(「拡張」)と述べています。[ 4 ] IBMは、「生成フェーズでは、LLMは拡張されたプロンプトとトレーニングデータの内部表現から情報を取得し、その瞬間のユーザーに合わせた魅力的な回答を合成する」と述べています。[ 1 ]

通常、参照対象となるデータは、大規模なベクトル空間の形式で数値表現されるLLM埋め込みに変換されます。RAGは、非構造化データ(通常はテキスト)、半構造化データ、または構造化データ(例えばナレッジグラフ)に使用できます。これらの埋め込みは、ドキュメント検索を可能にするためにベクトルデータベースに保存されます。
ユーザクエリが与えられると、まずドキュメントリトリーバーが呼び出され、クエリを補強するために使用される最も関連性の高いドキュメントが選択されます。[ 2 ] [ 3 ]この比較は、使用されるインデックスの種類に応じてさまざまな方法で行うことができます。[ 1 ]
モデルは、ユーザーの元のクエリを迅速にエンジニアリングすることで、取得した関連情報をLLMにフィードします。新しい実装(2023年現在)では、クエリを複数のドメインに拡張したり、メモリと自己改善を利用して過去の検索から学習したりする機能を備えた特定の拡張モジュールを組み込むこともできます。
最後に、LLMはクエリと取得された文書の両方に基づいて出力を生成することができる。[ 2 ] [ 6 ]一部のモデルでは、取得された情報の再ランク付け、コンテキストの選択、微調整など、出力を改善するための追加ステップが組み込まれている。
上記の基本プロセスの改善は、RAG フローのさまざまな段階で適用できます。
これらの手法は、テキストを密ベクトルまたは疎ベクトルとして符号化することに重点を置いています。単語の同一性を符号化する疎ベクトルは、通常辞書長で、ほとんどがゼロで構成されます。意味を符号化する密ベクトルは、よりコンパクトで、ゼロの数が少なくなります。様々な機能強化により、ベクトルストア(データベース)における類似度の計算方法を改善できます。[ 7 ]
これらの方法は、ベクター データベースでのドキュメント検索の品質を向上させることを目的としています。
言語モデルをリトリーバーを考慮して再設計することで、25分の1の小さなネットワークでも、はるかに大きなネットワークと同等のパープレキシティを実現できます。[ 14 ]この手法(Retro)はゼロから学習するため、元のRAG方式では回避できた高い学習コストが発生します。Retroは学習中にドメイン知識を与えることで、ドメインへの集中度が低くなり、より小さな重みリソースを言語意味論にのみ割り当てることができるという仮説が立てられています。再設計された言語モデルを以下に示します。
Retroは再現性がないという報告があったため、再現性を高めるための修正が行われました。より再現性の高いバージョンはRetro++と呼ばれ、コンテキスト内RAGが含まれています。[ 15 ]
チャンキングには、データをベクトルに分割して、リトリーバーが詳細を見つけられるようにするためのさまざまな戦略が含まれます。
チャンキング戦略には次の 3 つのタイプがあります。
ベクトルデータベース検索では、ユーザーの質問に答えるために必要な重要な事実が見逃されることがあります。これを軽減する方法の一つは、従来のテキスト検索を行い、その結果をベクトル検索で取得したベクトルにリンクされたテキストチャンクに追加し、その複合テキストを言語モデルに入力して生成することです。
RAGシステムは、検索可能性、検索精度、生成品質をテストするために設計されたベンチマークを用いて評価されるのが一般的です。よく使用されるデータセットには、多様な分野にわたる情報検索タスク群であるBEIRや、オープンドメインQA用のNatural QuestionsやGoogle QAなどがあります。
RAGはLLMにおける幻覚を防ぐことはできません。Ars Technicaによると、「LLMは依然として反応において元の物質に関する幻覚を起こす可能性があるため、RAGは直接的な解決策ではありません。」[ 4 ]
RAGは大規模言語モデル(LLM)の精度を向上させますが、すべての課題を解消するわけではありません。RAGは頻繁なモデルの再学習の必要性を軽減するものの、完全に解消するわけではないという限界があります。さらに、LLMは、信頼性の高い回答を提供するのに十分な情報が不足している場合、それを認識するのが困難になることがあります。特別な学習を行わないと、モデルは不確実性を示すべき場合でも回答を生成する可能性があります。IBMによると、この問題は、モデルが自身の知識の限界を評価できない場合に発生する可能性があります。[ 1 ]
RAGシステムは、事実上は正しいものの誤解を招く情報源を取得し、解釈エラーにつながる可能性があります。場合によっては、LLMが情報源の文脈を考慮せずに文言を抽出し、誤った結論に至ることもあります。さらに、矛盾する情報に直面した場合、RAGモデルはどの情報源が正確であるかを判断するのに苦労する可能性があります。この制限による最悪の結果は、モデルが複数の情報源の詳細を組み合わせ、古い情報と最新の情報を誤解を招く形で融合させた回答を生成することです。MIT Technology Reviewによると、これらの問題はRAGシステムが取得したデータを誤って解釈する可能性があるために発生します。[ 2 ]