RAGを複雑な質問に強くする手法「CoA」について
本記事では、「Chain-of-Abstraction (CoA) Reasoning」についてざっくり理解します。軽めの記事です。
株式会社ナレッジセンスでは普段の業務で、生成AIやRAGシステムを活用したサービスを開発しています。
この記事は何
この記事は、最近聞くようになった「Chain-of-Abstraction (CoA) Reasoning」の論文[1]について、日本語で簡単にまとめたものです。
今回も「そもそもRAGとは?」については、知っている前提で進みます。確認する場合は以下の記事もご参考下さい。
本題
ざっくりサマリー
LLMが外部ツールを使って回答を生成するときの、回答精度を高める手法についての論文です。Metaの研究者らによって2024年1月に提案されました。「Chain-of-Abstraction (CoA)」という手法を使うメリットは、RAGに応用することで回答精度向上が期待できる点ですが、個人的にはその点だけでなく、類似手法に比べて時間を短縮できる点に注目しています。
CoAが従来のRAGよりも力を発揮できるシーンは、ユーザーの質問が「複数の知識を組み合わせなければ正答できない」ような質問だった場合です。通常のRAGでは1回のドキュメント検索で回答に使えるドキュメントを見つけようとしますが、CoAでは、問題(ユーザーからの質問)を複数の問題に分解し、複数回のドキュメント検索を行った上で総合的な回答を生成できます。それだけでなく、類似手法の「Chain-of-Thought (CoT)」[2]と違い、回答時間が短くて済むのが特徴です。
問題意識
大規模言語モデル(LLM)を実用的に利用するためには、Web情報、数学、物理の法則など、外部知識が必要です。
この問題対し、「LLM自身が外部APIを呼び出せるようにする(ツール)」を使うことで、LLMが必要な回答に知識を適宜引き出せるようにする手法が注目されています。この「ツール」として、「ドキュメント検索ツール」のようなものを活用できるようにしたものがいわゆる「Retrieval-Augmented Generation (RAG)」という仕組みです。
しかし、複数回のツール呼び出しを必要とするような複雑な推論タスクでは、回答精度が悪かったり、(それを克服したCoT手法を使うと)回答速度が遅くなったり、という課題があります。
手法
本論文では、複数ツール・知識の呼び出しを短時間で行える手法「Chain-of-Abstraction (CoA) Reasoning」を提案しています。CoAの主なポイントは以下の4つです。
【事前にやっておくこと】
-
LLMをファインチューニング。1回の出力で複数ツールを呼び出せるようにする
CoAでは、独自にファインチューニングしたLlama 2モデルを生成に利用します。
【ユーザーが質問を入力して来たとき】
-
ユーザーの質問に対し、回答に必要な複数ステップの命令を出力
例
上がユーザーの質問、下が微調整したLLMの回答。こんな形で固有のフォーマットを出力できるようにします。 -
複数の命令に基づき、それぞれのツールを呼び出す
外部API(ツール)を呼び出したり、ドキュメントを検索したりします。 -
ツールからの複数の出力を組み合わせて最終回答を出す
成果
数学的タスクとWikiペディアを使ったQ&Aで、評価を行ったところ、
CoAは、Chain-of-Thought(CoT)などの既存の手法と比較して、以下の成果が出ました。
- 正解率の向上
学習データと同じ分布のテストセット(In-Distribution)だけでなく、分布が異なるテストセット(Out-of-Distribution)でも、平均~6%の正解率向上を達成。 - 推論速度の向上
CoAを活用したLLMエージェントは、平均~1.4倍という短時間で生成可能。
まとめ
CoAは、LlamaIndexに取り上げられる[3]など、CoTに替わる手法として注目されています。ただ、やはりファインチューニングするのは面倒ですので、今後の展開については、「CoAのエッセンスだけを活かし、プロンプトで解決したり、ChatGPTのJSONモードなどで解決したり」という工夫がなされる事例が増えてきそうだなと感じます。[4]
普段からRAGシステムを大企業に提供している弊社としても、実際、「複数の知識・ツールを合わせないと回答できない」ようなユースケースを相談いただくことはよくあります。
みなさまが業務でRAGシステムを構築する際も、回答精度を上げる工夫として参考にしていただければ幸いです。今後も、RAGの回答精度を上げるような工夫や研究について、機会があれば記事にする予定です。
Discussion