「知識の扱い方」を渡してRAGの精度を上げる
導入
こんにちは、株式会社ナレッジセンスの須藤英寿です。
今回は、通常の知識を検索するRAGとその知識の扱い方を組み合わせることで、専門分野に強いRAGを作るRAG+
について紹介します。
サマリー
通常のRAGでは、LLMがユーザーの質問に正確に回答するために必要な情報を正確に検索すること
に焦点を当てています。しかし、これだけでは特に専門性の高い分野では正確な回答はできません。これはちょうど数学で公式だけを知っていても、難しい問題が解けないのと近い状態です。
RAG+
では、情報をどう使えばよいかをRAGで検索できるようにすることで、LLMが得た知識をどのように捉えて活用すれば良いかを把握することができるようになります。この手法は既存のRAGの手法を拡張することができ、ベースラインとなる手法から平均で3〜5%、タスクによっては最大で10%程度の精度向上を実現しています。
専門性の高い分野におけるRAGの課題
得られた情報を正しく活用できない
専門性の高い分野におけるLLMの課題は大きく分けて2つ存在します。
- LLMが専門的な用語や知識を知らないこと。
- 検索で得られた情報を元に、どのように回答を構成すれば良いかわからないこと。
前者については、これまでに紹介した記事を参考にしてみて下さい(ファインチューニングを用いた手法、検索精度を高めるための手法)。
後者の問題に対しては、一つの対処法として、プロンプトに事前に手法の例示を組み込む手法がありますが、ユーザーの多様な入力に対応することができないという問題点がありました。具体的な例としては、たとえば数学の公式を検索できるようにして、三角関数を応用した解き方をシステムプロンプトに入力したとしても、ユーザーの質問が数列に関するものだと、山間関数のシステムプロンプトはノイズにしかなりません。
手法
RAG+では、2つのデータ基盤を用意します。
1つ目は「知識」のRAG(Knowledge Corpus)で、ここから回答に必要な比較的独立した情報を取得します。数学で言えば、公式などの基礎的な情報を指しています。
2つ目は「知識の扱い方」のデータ(Application Corpus)です。「知識」と1対1で結びついた「知識の扱い方」を取得します。数学で言えば、公式を利用した実際の問題とその解法を指しています。
これら2つの情報をまとめてLLMに渡して、最終的な回答を得ます。
成果
RAG+は非常に汎用的な手法です。RAGの検索そのものには言及しておらず、検索対象を「知識」とその「扱い方」のペアにする。というシンプルな拡張です。そのため、既存のRAG手法をそのまま+
の手法に変換することが出来ます。
既存の代表的なRAG手法をRAG+に拡張することでどの程度精度が向上したかを検証しています。この検証では刑事事件の量刑を過去の判例から推測するタスクとなっています。精度の向上の程度はまばらですが、同程度~10%の精度向上が実現していることがわかります。
まとめ
RAGに単なる情報だけではなく、その扱い方まで渡す手法RAG+
について紹介しました。応用の仕方までわかることで精度の向上が期待できるというのは、非常に直感的でわかりやすいポイントですね。一方でこの手法には課題があります。それはハルシネーションのリスクです。「知識の扱い方」を間違えてLLMに伝えてしまうと、本来であれば正解できるタスクにも誤った回答を導いてしまう可能性があります。リスクを減らすには、必要な「知識の扱い方」をできる限り多く収集する必要があり、問題の種類によっては現実的ではない場面もあり得ます。また事前に知識の扱い方をシステムプロンプト経由で伝えるFew-shot promptingもかなり強力な手法なので、静的な例示で十分な場合はFew-shotで対応し、手法が数百を超えてかつ例外が少ない場合に絞ってRAG+
を使用するのが良さそうです。ぜひ、最適な場面で使用していただければと思います。
Discussion