RAGで「無関係な」文書を入れると、逆に精度が上がる
本記事では、RAGの性能を高めるために「あえてノイズを注入する」手法について、ざっくり理解します。株式会社ナレッジセンスは、エンタープライズ企業向けにRAGを提供しているスタートアップです。
この記事は何
OpenAIがリリースした「Deep Research」[1]という機能が話題です。その中で、「AIが、全然関係ない思考を挟んでいる」という、興味深い報告がされています。[2]
そして面白いのは、OpenAIが意図的にそうしている可能性が指摘されていることです。
そこで、この記事では、上記の根拠として挙げられている論文[3]について、日本語で簡単にまとめます。
今回も「そもそもRAGとは?」については、知っている前提で進みます。確認する場合はこちらの記事もご参考下さい。
本題
ざっくりサマリー
この論文は、RAGシステムにおいて、ノイズ(=無関係な文書)が与える影響を分析したものです。サピエンツァ大学・Technology Innovation Instituteの研究者らによって2024年1月に発表されました。
通常のRAGでは、ユーザーの質問に対して関係のある文書を、LLMに渡すことが当たり前です。しかしこの研究では、「あえて無関係な文書(ノイズ)もLLMに渡した方が、RAGの精度が向上する」ということが示唆されています。
問題意識
従来のRAGでは、類似した文書を検索して、LLMに渡すことが当たり前に重要であるとされていました。実際、「無関係な文書を入れると回答精度が下がる」ということは、多くの研究[4]で指摘されていることです。
しかし、この論文では、「本当にそうなのか?」という疑問からスタートしています。
手法
この論文では、以下の4種類の文書をLLMに投入して、影響を分析しています。
-
ゴールド文書:回答が含まれる正解文書
(→実践では、これが予め判明していることは有り得ないですが) - 関連文書:正解を含む可能性がある文書(クエリを使って検索した文書)
- 紛らわしい文書:関連性があるが、誤情報や別の話題が含まれる文書
- ランダム文書:完全に無関係な文書
【実験内容】
クエリに対して、以下の組み合わせをLLMに渡したときに、正答できるかどうかをチェックしていく。
- ゴールド文書+紛らわしい文書
- ゴールド文書+ランダム文書
- 関連文書+ランダム文書(←実際にRAGが使われる場面に最も近い)
Llama2-7B、MPT-7B、Phi-2、Falcon-7B の4種類のLLMを利用します。
成果
(縦軸がランダム文書の数。横軸が関連文書の数。ランダム文書が0より大きいときの方がスコアが高いことが読み取れる。)
- 紛らわしい文書を追加すると、回答精度が低下。
- ランダム文書を追加すると、回答精度が向上。最大35%の精度向上。
この実験のキモは、「ノイズ」を2種類に分解していることです。正解ではない文書を「紛らわしい文書」と「全然関係ないランダム文書」に分けて考えています。そして、「全然関係ないランダム文書」であれば、むしろ回答精度が向上することを示唆しています。
まとめ
「有益なノイズ」について、直感に反する研究を紹介しました。面白いことに、「ノイズ」の重要性を示唆する論文は、他にもあります[5]。
「なぜ、ノイズを入れるとRAGの精度が上がるのか?」ですが、はっきりとしたことは分かっていません。仮説としては、「無関係な情報が混ざることで、LLMが重要な情報に集中するようになる」などが挙げられています。
ここまで見てきたように、「Deep Research」機能の中で、「たまに、AIが関係ないことを考えている」現象は、実は、意図的に実装されている可能性があります。
みなさまが業務でRAGシステムを構築する際も、選択肢として参考にしていただければ幸いです。今後も、RAGの回答精度を上げるような工夫や研究について、記事にしていこうと思います。我々が開発しているサービスはこちら。
-
こちら https://x.com/yuki_arano/status/1888211994941300788/photo/1 ↩︎
-
"The Power of Noise: Redefining Retrieval for RAG Systems", Cuconasu et al. ↩︎
-
例えば、"Making Retrieval-Augmented Language Models Robust to Irrelevant Context",Yoran et al. など ↩︎
-
例えば、"Pandora's Box or Aladdin's Lamp: A Comprehensive Analysis Revealing the Role of RAG Noise in Large Language Models", Wu et al. ↩︎
Discussion