📚

DeepRAG:Thinking to Retrieval Step by Step for LLMの論文ついて理解を深める!

に公開

はじめに

最近時マルチエージェントAIのシステム構築をプライベートでも検討しています。
そのなかで昨年末流行りとなったDeepResearch。そこからさらに、RAGのディープ版も出てきました。RAGといえば実際のところ色んな企業でも導入されたものの、検索精度の問題で使われ勝手が悪くうまく使えない、といったところが問題となっていると思いますが、DeepRAGがそれを解決する一つの手段となるでしょう。
その中でもそこそこ有名なDeepRAG: Thinking to Retrieval Step by Step for Large Language Modelsの論文について深堀したいと思います。ほとんど備忘録的な感じですが、メモとして残しておく所存です。

DeepRAGと従来のRAGの違い

DeepRAGは、検索拡張生成(Retrieval-Augmented Generation:RAG)を「逐次的な推論タスク」として捉える新しいフレームワークです。従来の一般的なRAGでは、質問に対して一度だけ検索(例:BM25やベクトル検索)を行い、その結果に基づいて回答を生成しますが、この手法では無関係な情報を多く取得したり、重要な事実を見逃したりする問題が主に検索モデル由来であったとおもいます。

項目 従来のRAG DeepRAG
検索タイミング 質問の最初に1回だけ 必要なときだけ、複数回可能
判断方法 固定 LLMが自ら判断
学習方法 分離(retrieverとgenerator) 検索と生成を統合的に学習
検索結果 すべて使用 取捨選択して使用

これに対してDeepRAGは、検索をマルコフ決定過程(MDP)としてモデル化し、質問を小さなサブクエリに分解しながら、必要なときだけ検索を行うか、モデル内の知識を使って済ませるかを動的に判断します。これにより、不要な検索を減らし、回答精度を向上させます。私の記事でもテストしていたLangchain open deep researchでも小さなサブクエリに分解し、必要な時に検索を行う仕組みで近しいようにも感じます。
そのほか、個人的にはAdaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexityの仕組みにも若干近そうに感じましたが、Adaptive RAGを実際に組んでみると一般的な質問を除き、LLMが分類器(=LLMがその情報を知っているかor知っていないかを認知する)としてほとんど機能しないので、この課題が結構大きいと感じています。これがDeepRAGでどういった工夫がされているのかが興味深いです。

Deep RAGのアーキテクチャと仕組み

DeepRAGは以下の3つの技術ステップで構成されています

ざっくりいうと、ユーザーの質問に対し、
①回答にはどういった知識が必要か?
②Web検索すべきか?それともLLMの自己知識で回答できるか?
というステップを経て検索を実行する仕組みです。この判断の精度を高めるために各ファインチューニングをしているのがこの手法のポイントです。

①バイナリツリー検索

質問を複数のサブクエリに分解し、それぞれに対して
「検索して答える」
「検索せずにLLMだけで答える」
の2パターンを検討し、これをツリー構造として展開し、最小限の検索で正答に至る経路(ナラティブ)を探索します。この全体プロセスをMDPとして定義し、状態(質問と履歴)、行動(検索か否か)、報酬(正解・検索コスト)を使って学習します。
マルコフ決定過程についてはこちらがわかりやすかったです。強化学習はDeepRacer等でかじっただけでド素人なので勉強しないと。。

②模倣学習(イミテーションラーニング)

上記で得た「最適な思考と検索の流れ」を教師データとして、LLMにそのプロセスを模倣させるようにファインチューニングします。これによってLLMは「いつ検索するか」「どのようにサブクエリを分解するか」「中間回答をどう生成するか」を一連の行動として身につけ、安定した検索挙動を示すようになります。つまり、これは最適な検索結果に導くための思考経路を学習しているに近しいです。また、工夫ポイントとして、自己合成データでLLMの自己知識を超えないように学習し、ハルシネーションを抑えているようです。Loraでうまくチューニングできなかった経験から、興味深い。。この論文によると、自己知識を超えたCoTを学習させると。。👇のように推論能力は上がるが知識に対するハルシネーションが増えるみたいなこともあるようです。最近だと下記のような例もありますよね。
https://www.itmedia.co.jp/aiplus/articles/2504/20/news061.html

③知識境界のチューニング(Chain-of-Calibration)

予想通りでしたが、DeepRAGの一番の肝はココです!
「この情報は自分で知っている(から検索不要)」
「これは外部知識が必要(だから検索すべき)」
という自己判断の精度を高めるファインチューニングを行います。
これは、同じサブクエリに対して「検索あり」と「検索なし」の両方の回答を生成し、「どちらが正しいか」を学習します。これによって、検索の必要性やLLMの知識があるかないかを強制しているような点が良いポイントですね。手法としてはDPOみたいなことをしているのかな。。さきほどのAdaptive RAG等も現時点ではこの手法はほぼ必須な気がします。

結果


DeepRAGの仕組みを用いることで、回答精度が平均21.99%向上、余計な検索回数を減らせた、とあります。

まとめ

マルチエージェントAI(=いわゆるDeep Research的なエージェントAI)による検索結果は確かに良いときもあるのですが、回答に時間がかかりすぎる、余計な検索によりゴミが入って回答精度が低い(=分類器として機能しないとかいろんな問題が。。)等がおきます。
今回紹介したDeepRAGという手法によって、LLMの分類器性能(=メタ認知能力)が向上することで、回答精度向上と時間を大幅に短縮できるので、実装の対象として結構よいなと感じました。

Discussion