ChatGPTをはじめとした対話型AIがさまざまな場面で使われるようになりましたが、その応答は一般論でしか答えてくれません。社内の資料などを読み込んで応答してくれると業務に役立てられるのに......と感じている人もいるかもしれません。
この実現には対話型AIの外部にある文書などを検索した結果を踏まえて応答する技術が必要で、これを「RAG(検索拡張生成)」といいます。どんな技術なのか、その概要を理解しておきましょう。
RAGとは
対話型AIを開発するときに、一般的な文章を使うのではなく、社内にある文書やデータベースを使って学習させると、実務に役立つシステムができると考えられます。しかし、社内にある文書などを使って学習させて独自のLLM(大規模言語モデル)を開発しようと思っても、学習に使うデータ量が少なすぎてまともな文章での応答は得られません。
そこで、既存のLLMの持つ日本語などの文章生成能力を活かしつつ、その応答に社内の文書から得たデータを反映させようという考え方が「RAG」です。
RAGはRetrieval Augmented Generationの略で、外部にあるデータを検索(Retrieval)して、プロンプトを拡張(Augment)し、回答を生成(Generate)する技術です。つまり、「検索」と「生成」という2つのフェーズから構成されています。
検索の部分では、一般的な検索エンジンと同様に、指定されたキーワードに該当する部分を文書から抽出します。そして、質問文や検索結果をLLMに渡します。生成の部分では、質問文や検索結果をもとにテキストを生成して返します。
このように、元となるデータとして社内にある文書などを用意することで、一般的な対話型AIと比較して高い精度の結果が得られることが特徴です。また、文書やデータベースを更新すると、最新のデータについて応答が得られます。
RAGのメリットは?ファインチューニングとの違い
上記のように2つのフェーズに分けずに、既存のLLMに対して業界に特化した言葉を学ぶように学習させる方法も考えられます。このような方法は「ファインチューニング」と呼ばれます。
以前の記事では、機械学習における学習には主に2つの段階があると書きました。そして、GPTの「P」である「Pre-trained」は「事前学習」と訳され、上記の1つ目のステップであること、2つ目のステップとしてファインチューニングがあることを解説しました。
このように、ファインチューニングは「LLMを最適化する」といった方向性です。つまり、ファインチューニングには大量の計算が必要で、高性能なGPUなどのハードウェアが必要です。
一方で、RAGは既存のLLMはそのまま使い、事前に検索した結果を知識として渡します。このため、学習などに計算は必要なく、高性能なハードウェアなどが不要であるというメリットがあります。
いずれでも利用者は同じように質問を入力するだけで、欲しい情報が得られる可能性があります。理想的には、ファインチューニングとRAGを両輪で進めることだといえますが、最近はRAGが注目されています。
手軽に使えるRAGの事例
RAGの代表的な事例として、Googleが試験的に無料で提供しているNotebookLMなどがあります。NotebookLMでは、文書データをアップロードしておけば、その文書データに含まれる内容を踏まえて回答を返してくれます。
NotebookLMでは、GoogleドキュメントやGoogleスライドのファイルのほか、PDFやテキストファイル、WebサイトのURLなどを登録できます。そして、アップロードしたデータをもとに回答を生成してくれます。
NotebookLMの便利な使い方として、英語のマニュアルがあったときに日本語で質問して答えを得ることがあります。たとえば、英語で書かれたマニュアルのPDFをNotebookLMに格納しておきます。そして、日本語で質問をすると、該当箇所を英語で検索して、検索結果を日本語として表示してくれます。
*社内にある資料をNotebookLMなど外部のサービスに送信することになるため、情報漏えいのリスクがあります。NotebookLMでは個人データが学習に使用されることはないとされていますが、人間のレビュアーがアップロードされた内容や回答を確認することがあるとされています。見られると困る内容は送信しないようにしましょう。
RAGを導入するときに考えること
RAGは社内のデータベースや資料など、指定したデータから検索することで、LLMが持たない知識を参照できるため、一般的な回答でないものも生成できます。このため、質問に対して的確な回答を生成できます。
ただし、導入するときには以下のような注意点もあるため、理解した上で導入を検討するようにしましょう。
■プロンプトの上限
LLMに入力できるプロンプトの長さには上限があるため、検索結果をすべて渡すのは難しいものです。また、プロンプトの長さに応じてLLMの費用がかさむ可能性があります。
たとえば、ChatGPTであればAPIに入力されるトークンの長さによって費用が変わります。このため、データを検索した時点で、応答に必要な情報を絞り込んで渡す必要があります。
■用語の整備
社内用語や独特な略語など、特殊な用語は単純にLLMに入力するだけでは正しく処理できません。このため、用語などを定義したり、質問内容を変換したりする必要があります。
■検索結果の並べ替え
検索結果をうまく並べ替えてからLLMに渡さないと、欲しい結果が得られない可能性があります。利用者がどのような結果を望んでいるのか、利用者によるフィードバックを受けて調整することも重要です。
■社内ルールの確認
外部の企業に社内の機密情報を送信してはいけない、といったルールは多くの企業で定められています。もちろん、Google DriveやBoxなど、企業が契約しているオンラインストレージであれば認められていても、それ以外に社内のデータを送信すると問題になります。このため、LLMの契約条件を確認したり、ローカルLLMを実行したり、といった工夫が必要です。
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『Pythonではじめるアルゴリズム入門』『図解まるわかり プログラミングのしくみ』『「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック』(翔泳社)、最新刊の『データ分析に強くなるSQLレシピ 小規模データの前処理・分析の書き方&テクニック』(インプレス)がある。
※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。
※本稿に記載されている情報は2024年7月時点のものです。