SimRAGで専門分野にも強いRAGを作る
導入
こんにちは、株式会社ナレッジセンスの須藤英寿です。普段はエンジニアとして、LLMを使用したチャットのサービスを提供しており、とりわけRAGシステムの改善は日々の課題になっています。
今回は、ドキュメントを活用して専門分野に強いRAGを構築できるSimRAGについて紹介します。
サマリー
SimRAGは、専門分野に関するドキュメントを用いてファインチューニングを行うことで、専門分野の質問に高精度で回答するRAGを作成できます。RAGに特化するためのファインチューニングと、専門分野に特化するためのファインチューニングを組み合わせることで高い精度を実現しています。
問題意識
RAGにLLMをそのまま使用することの問題点
多くのRAGのシステムでは、検索を工夫することはありますが、LLMになにか手を加えることはありません。その理由は、LLM自体がある程度万能にドキュメントを理解し回答に用いることができるからです。しかし、専門性の高い分野では、学習に使用できるデータの少なさに起因して正確に受け答えできる可能性が低下してしまいます。さらに、一般的なLLMがRAGのようなユースケースに特化していないために性能向上の余地が残っています。
手法
SimRAGの検索手法自体はかなりシンプルな手法で、クエリを用いてそのまま検索を行い、その結果を用いて回答します。つまり、ファインチューニングの過程にすべての特徴が含まれることになりますが、ファインチューニングは主に2つの段階を経て完了します。
- 一般的なRAGに適したLLMへとファインチューニング
LLMは質疑応答への学習がなされていますが、RAGのように質問と関連する文章のセットを入力として受取り、回答を作成するというタスクには最適化されていません。
そこで以下の3つの観点でファインチューニングを行います。
- 指示や質問に適切に応答できるようにするために数種類のデータセットを用いて学習を行い、基本的な応答の性能を向上させます。
- クエリと入力されたチャンクを元に正確な回答ができるようにこちらも数種類のデータセットを用いて学習を行い、入力の内容から正確に回答する能力を向上させます。
- 次のステップのファインチューニングに使用する学習データを生成するための学習を行います。具体的には以下の2つの観点で学習します。
- 回答生成タスク: ドキュメントを入力として、質問の回答候補となりうる箇所を抽出できるように学習します。
- 質問生成タスク: ドキュメントと回答が入力として渡された際に、回答が正解となるような質問を生成できるように学習します。
以上のフィンチューニングで、一般的なRAGの回答性能を向上させるとともに次のステップで作成する大量の質問と回答のデータを精度高く生成できるようにします。
- 分野特化のLLMへとファインチューニング
1の手順でファインチューニングを行ったモデルを利用して、更に以下の手順でファインチューニングを行います。
- 特化させたドメインのドキュメントを大量に用意します。
- 任意のドキュメントの中から回答に利用できそうな箇所を抽出します。
- ドキュメントと回答を元に、質問を生成します。このとき特定の形式に特化させないために、数種類の質問パターンを用意して質問を作成します。
- 一連の操作で取得できた質問、関連文書、回答を一つのセットとします。
- セットごとの品質を評価するために、質問をクエリとして文書を検索した際に関連文書が上位に入るかを検証しフィルタリングします。
- 品質の高いデータセットと、1の手順で使用したRAGに特化するために使用したデータセットを合わせて用いてLLMをファインチューニングします。
以上のステップで目的とするLLMが完成します。
成果
紹介している論文内では、ドメインに特化した質問に対して適切に回答できているかという観点で比較が行われています。
医療分野におけるRAGの性能の比較を行っています。一部医療分野に特化したLLMも含まれていますが、それらについてもRAGを用いて回答を行っています。
すべての面において、GPT-4を除いて一番良い性能を出しています。この点については、ファインチューニング前のモデルそのものの性能差を差し引いて考える必要があるかもしれません。
続いて科学分野における性能の比較です。こちらもGPT-4を除いて最も良い性能を引き出しています。
最後にコンピュータサイエンス分野における性能比較ですが、ほとんどの分野でGPT-4を除いて最も良い性能を示しています。
なお、すべての結果で「w/o Stage II」という表記がありますが、こちらは二段階目のドメイン特化用のファインチューニングを行っていないモデルの性能を示しています。
まとめ
今回の論文は、RAGとドメインに特化したLLMをファインチューニングで作ることで、RAGの性能を大幅に上げることができる。といった内容になっていました。個人的にはRAGに特化したフィンチューニングをすることでここまで性能が向上するとは思っていなかったので、かなり驚きの大きい内容となりました。
また、学習のプロセスが関連文章さえ用意すれば自動的に完結するという点、共通化できるプロセスがあるという点も導入ハードルを引き下げてくれているように感じます。
ただし、手放しに利用すればよいというわけでは無い点にも注意が必要です。まず、ファインチューニングは新しくモデルが登場するごとに再学習が必要になることが多いので、コストに見合うかは重要な観点になります。更に、成果でも触れていますが、元のモデルの性能が低いとはいえGPT-4の性能を超えることができていません。これが果たしてGPT-4でファインチューニングして性能があがるかはわからないため、実運用前には入念な調査が必要になるかと思います。
Discussion