自信に満ちた回答の裏に潜む知識のギャップ
言語モデルは、広範なトレーニング中に学習したパターンに基づいて質問に回答することに長けています。しかし、会社の最新の内部ポリシーの更新や昨日起きた出来事など、トレーニングデータに含まれていない情報にはアクセスできません。例えば、先週の特定の内部「refund policy(返金ポリシー)」の変更について尋ねると、自信満々でありながら不正確、あるいは一般化された回答が返ってくる可能性が高いでしょう。
この「知識のギャップ」を埋めるのが Retrieval-Augmented Generation (RAG) です。RAGは、モデル自体を本質的に賢くしたり、そのコアとなる知識を更新したりするものではありません。そうではなく、特定の質問に回答するために必要な関連外部情報を「ジャストインタイム」でモデルに提供する仕組みです。
専門家に回答させる前にカンニングペーパーを渡すようなものだと考えてください。アプリケーションはまず、クエリに直接関連する情報を、多くの場合 vector database(ベクトルデータベース)である別のナレッジベースから検索します。このデータベースは、ドキュメント、記事、または内部ポリシーを、その意味を捉えた数値化された embeddings(埋め込み)に変換して保存します。
「どうすれば返金を受けられますか?」と尋ねると、vector databaseは「refund policy」というタイトルのドキュメントを見つけることができます。たとえ質問の中にその正確な言葉が含まれていなくても可能です。この取得されたテキストがプロンプトに追加されることで、言語モデルは正確な回答を生成するために必要な精密なコンテキストを得ることができます。このプロセスにより、モデルは明示的にトレーニングされていないドキュメントに関する質問にも回答できるようになります。
なぜ「Refund Policy」が「Get My Money Back」と一致するのか
タイトルと少し異なる言葉を使ってドキュメントを検索しようとしたことはありますか?従来の検索エンジンは、キーワードがほぼ完全に一致する必要があるため、苦戦することがよくあります。「how do I get my money back」と入力しても、「Refund Policy」というタイトルのドキュメントはヒットしないかもしれません。そこで semantic search(セマンティック検索)が状況を一変させます。
セマンティック検索は、単なる言葉そのものではなく、言葉の背後にある「意味」を理解します。同じ核心的な概念を伝えていると認識できるため、「get my money back」と「refund policy」を結びつけることができます。この魔法は、テキストを数値で表現した embeddings によって実現されます。
埋め込みを、広大な多次元空間における点だと考えてみてください。「apple」や「orange」のように意味が似ている単語やフレーズは、この空間内で非常に近い場所に配置されます。「car」のような全く無関係な概念は、はるかに遠い場所に配置されます。私たちはこれを2次元や3次元で視覚化できますが、現実世界のテキスト埋め込みでは、複雑な意味関係を捉えるために数百から数千の次元が使用されることがよくあります。
これらの数値の集合を vectors(ベクトル)と呼びます。vector databaseは、これらのベクトルを元のテキストチャンクと一緒に保存します。質問をすると、クエリも埋め込みに変換されます。その後、データベースはクエリのベクトルに最も近いベクトルを持つテキストチャンクを迅速に特定し、意味的に最も関連性の高い情報を取得します。これにより、表現が異なっていても、質問に直接関連する正確なソース箇所をシステムが抽出できるようになります。
RAGがソース付きで回答するための4つのステップ
ここでは、Retrieval-Augmented Generation (RAG) が、トレーニングされていない情報を使用してAIが質問に回答できるようにする仕組みを説明します。これは、ドキュメントと言語モデルの間で行われる巧妙な4ステップのダンスのようなものです。
まず、ソースドキュメントを小さなチャンクに分割します。各チャンクは、その意味を捉えた長い数値のリストであるエンベディングに変換されます。これは、巨大な多次元チャート上の座標に単語をマッピングするようなものだと考えてください。これらのエンベディングは、元のテキストチャンクとともに、ベクトルデータベースと呼ばれる特殊なデータベースに保存されます。
質問をすると、そのクエリも同じエンベディングプロセスを経て処理されます。次に、ベクトルデータベースが、エンベディングが数値的に最も近いチャンクを検索します。これにより、正確な単語が一致していなくても、意味的に類似したテキストを取得することが可能になります。
次に、アプリケーションは元の質問に取得したテキストチャンクを追加し、拡張されたプロンプトを作成します。この拡張されたプロンプトが言語モデルに送信されます。例えば、返金ポリシーについて質問した場合、プロンプトは「以下のコンテキスト(取得した返金ポリシーのテキスト)を使用して、返金方法を説明してください」といった内容になります。
言語モデルは、提供されたこの新しいコンテキストを使用して回答を生成します。モデルはトレーニングデータから事実を想起するのではなく、その瞬間に与えられた特定の情報を処理します。つまり、貴社の内部文書や昨日の出来事に関する質問にも自信を持って回答できるということです。技術的な詳細については、Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasksのオリジナル論文をご覧ください。
この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。
1日1通 · 2クリックで解除 · サードパーティのトラッキングなし
単純なRAGの限界と今後の展望
単純なRetrieval-Augmented Generation (RAG) は、すぐに実用上の限界に達します。セマンティック検索が関連性のないチャンクを取得したり、意味が似ていないエラーコードのような重要な完全一致を見逃したりすることがあります。また、エンベディングを再構築しない限り、ドキュメントの更新内容を反映することもできません。
そのため、本番環境のRAGシステムでは、キーワード検索とベクトル検索を組み合わせることが一般的です。両方の手法から結果を取得し、「リランカー(reranker)」モデルを使用して真の関連性に基づいて並べ替えます。これにより、モデルの動作を永続的に変更し、更新のたびに再トレーニングが必要となるファインチューニングとは異なり、RAGを柔軟かつ最新の状態に保つことができます。
コンテキストウィンドウが長くなったからといって、それが魔法の解決策だと勘違いしてはいけません。大規模言語モデルであっても、膨大な量のテキストを効率的に処理するのは困難です。エージェント型RAGのような高度なRAGアプローチでは、反復的な検索を導入し、AIがクエリを洗練させられるようにします。また、もう一つの革新であるGraphRAGは、データポイント間の関係性を発見し、単純なチャンク検索を超えた、より詳細なナレッジベースの理解を可能にします。
よくある質問
AIにおけるRAGとは何ですか?
Retrieval-Augmented Generation (RAG) は、関連する外部情報を取得し、それを言語モデルに提供することで、そのコンテキストを使用して回答できるようにする技術です。
ベクトルデータベースはRAGにどのように役立ちますか?
テキストのエンベディングを保存し、言い回しが異なっていても、ユーザーのクエリと意味が近い文章を取得します。
RAGはAIのハルシネーションを排除しますか?
いいえ。RAGは回答の根拠をソース資料に求めることができますが、関連性のない、あるいは不完全な検索やモデルの誤りによって、依然として不正確な回答が生成される可能性があります。
RAGとファインチューニングの違いは何ですか?
RAGはクエリ時に適切な情報を提供しますが、ファインチューニングは追加トレーニングを通じてモデルの学習済み動作を変更します。

