AIに「分からない」と言わせるための「RAG」の手法
株式会社ナレッジセンスは、生成AIやRAGを使ったプロダクトを、エンタープライズ向けに開発提供しているスタートアップです。本記事では、RAGシステムがより正直に、知らないことには「分からない」と言えるようにするための手法「DTA(Divide-Then-Align)」について、ざっくり理解します。
この記事は何
この記事は、RAGの新手法である「DTA」の論文[1]について、日本語で簡単にまとめたものです。
今回も「そもそもRAGとは?」については、知っている前提で進みます。確認する場合は、こちらの記事もご参考下さい。
本題
ざっくりサマリー
DTAは、RAGの精度を上げるための新しい手法です。USTCやCASIAなどの研究者らによって2025年5月に提案されました。
通常のRAGでは、外部ソースから検索して得た情報を直接利用して、最終的な回答を生成します。ただ、これだけだとLLMの元から持っている知識(=内部知識)を活かせません。そこで、「Astute RAG」や「RAFT」などの手法では、外部・内部の知識を組み合わせて回答できるようにして、精度向上しています。
ただ、これらの手法も完璧ではありません。本当は内部も外部も、全部の情報を使っても 「回答できないはず」 の質問であっても、無理やり、回答生成してしまうことがあります。これは、ハルシネーション(幻覚)に繋がります。
そこで、DTAは、LLMの内部知識と外部知識の両方を考慮して、 本当に回答できない質問には「分からない」と答えられるようにします。 こうすることで、医療や金融など、かなりの信頼性が求められる場面でも、RAGを使うことができるようになります。
問題意識
RAFTのような内部・外部知識を融合する手法では、回答精度は高いものの、ハルシネーションは起こしがちになります。これは、モデルが、「自分自身の知識の限界を認識する」ということがかなり難しいため、起きてしまう問題です。
手法
DTAでは、以下のステップでRAGの回答精度を高めます。
【事前にやっておくこと】
-
データセットの構築
- 既存の質問応答データセットについて、
LLMの内部知識で回答可能か
(KB_param) と、外部知識に正解が存在するか
(KB_r) というニ軸で評価 - それぞれに◯✕がつくので、合計4つのグループに分かれる(例えば「LLMも知っており、かつ、検索結果にも関連情報がある。」など)
- 既存の質問応答データセットについて、
-
ファインチューニング
- それぞれのデータセットにて、さらにラベリング。不明な回答や誤答を「望ましくない回答」とする
- ただし、1にて✕✕となったデータセット(=「LLMも知らず、検索結果にも関連情報がない」)については、「分からない」という回答を「望ましい回答」としてラベリングする
- 上記のデータ(10,000サンプル)を用いて、DPO(Direct Preference Optimization) する。(RAFTで訓練されたモデルを、さらにファインチューニング)
【ユーザーが質問を入力して来たとき】
上記で訓練したモデルを使って回答生成させる。(それ以外は通常のRAGと同じ)
DTA手法のキモは、AIが「知らない」と答えるべき状況(✕✕象限の部分)を明確に定義している点です。こうすることで、そういう状況では『分からない』と答えることが正解なのだと、効率的に教えることができています。
成果
- 従来のRAFTモデルなど他の手法と比較して、回答精度を維持しつつ、「分からない」と適切に表明する能力(Abstain F1スコアなど)が向上
- 特に、知識が全くないケース(✕✕の部分)でも、適切に「分からない」と回答する能力が大幅に向上
まとめ
弊社では普段、エンタープライズ企業向けにRAGサービスを提供しています。だからこそ、ハルシネーション対策は非常に重要です。特に、「回答精度を上げつつ、ハルシネーションは一切起こさないようする」というバランスを取りながらの開発は、結構、難しいポイントです。
企業によりますが、「生成AI入門者」が多い企業だと、「AIが一度でもハルシネーションを起こすと、それを体験したユーザーは二度と使ってくれない」というのは、まだまだ、よくある話です。
2025年はRAGがマルチモーダル化していくに従い、「不安定な情報であってもRAGに取り込む」みたいな手法が増えてくると思います。だからこそ、AI自身に知識の境界をメタ認知させることは、今後もますます重要になりそうです。
みなさまが業務でRAGシステムを構築する際も、選択肢として参考にしていただければ幸いです。今後も、RAGの回答精度を上げるような工夫や研究について、記事にしていこうと思います。我々が開発しているサービスはこちら。
Discussion