RAGとは
RAG (Retrieval Augmented Generation) とは
RAGは「検索拡張生成」と訳される
LLMに外部の知識源を組み合わせることで、その生成能力を向上させる手法
RAGは、情報の検索(Retrieval)と生成(Generation)を組み合わせたアーキテクチャ。
通常2つの主要なコンポーネントで構成される。
Retriever
Retrieverは、大規模なテキストデータベースやウェブ上の情報を検索して、入力された質問やクエリに関連するコンテキストを見つけ出します。これにより、モデルは豊富な情報に基づいてより正確な応答を生成することができます。
Generator
Generatorは、Retrieverから取得した情報をもとに、最終的な自然言語の生成を行います。一般的には、GPTなどの言語モデルがこの役割を果たします。
RAGの処理の流れ
https://scrapbox.io/files/657faf6768eb1c0023972e43.png
ユーザーから入力を受け取る
入力に関連する文書やデータを外部のデータベースから検索する
検索結果と入力をLLMに入力する
LLMがこれらの情報を参考にしつつ、回答を生成する
このように外部の知識源を利用することで、LLMがそのドメインの知識を獲得し、質の高い回答を生成できるようになる
RAGの課題
ドキュメントの適切な分割単位
ベクトルデータベースにドキュメントを格納するためには、ドキュメントをチャンクに分割し、Embeddingを行う必要があり
ます。 一般的には、一定のトークン数で分割する方法や、改行や空行で分割する方法などがあります。また、前後の文脈を保
つためにチャンクの前後を重複させて分割する方法もあります。
しかし、これらの単純な分割方法を用いると、検索を妨げる不適切なコンテンツがチャンクに含まれる可能性が高くなりま
す。 取得するコンテキストは生成される回答の質に影響するため、検索のための最適な形式でドキュメントを格納する必要が
あります。
誤字脱字・表記揺れ
ユーザーの入力をクエリとして利用することには、いくつか問題点があります。
・まず、ユーザーによる誤字脱字です。
そのままクエリとして利用すると検索精度に影響が出るため、可能であれば検索を行う前に誤字脱字を修正する処理を組み込
む必要があります。
・次に、表記揺れが挙げられます。
同じ対象を表す単語でも、ドキュメント内の表現とユーザーの表現で食い違う可能性があります。
LLMの汎用的な知識でカバーできる範囲であれば良いですが、独自に定義された単語についてそのような表記揺れが起きてし
まうと、正しいコンテキストを取得できない可能性があります。
検索の精度と効率
検索の際にフィルタリングを行わない場合、その都度データベース全体を検索する必要があり、データベースのサイズが大きくなるにつれ、検索の精度と効率を維持することが困難になります。