💨

RAG開発における7つの故障~前半~(論文解説)

に公開

最近はRAG開発に関する文献調査も気が向いたら行なっていますが、とても参考になる記事を見つけたので自分の理解も含めて解説記事を書きます。

元論文: https://arxiv.org/pdf/2401.05856.pdf

イントロ

検索による知識拡張を行った上で生成AIを用いるいわゆるRAG(Retrive Augumented Generation)システムの重要性は日々高まっています。in-contextで知識拡張することで生成AIのハルシネーションを抑え、よりアライメントされた生成を行うことができます。

そんな魅力たっぷりのRAGですが、実用性のあるシステムを構築しようとすると意外と困難があります。例えば、あるケースの生成ではうまくいくが、ユーザーからの入力の傾向が変わってしまって生成がうまくいかなくなってしまったり、知識拡張が思うようにできなかったりなどです。

基本的にはソフトウェア的な思想に基づいて開発を進めれば良いですが、RAG開発における抑えるべきポイントが未だにはっきりしていないのが現状だと思います。それらを実践的な事例から定義づけして、課題の認識がうまくいくようにしましょうね、というのが元論文の中身です。
こういった一定の体系だった知識を実践的な事例と併せて学ぶことができるのは非常に嬉しいことだと思います。

本記事の構成

本記事では元論文で紹介されている7つの典型的な故障をそれぞれ解説したのちに、併せて紹介されているそれぞれの対応策などにも解説します。

第一の故障 ~回答に必要な知識がソースに存在しない~

これは非常にシンプルなケースです。RAGを使うことで回答に必要な知識拡張を行いますが、そもそも回答のための知識がソースとなるデータベースに存在しないため、それが行えないということです。

そういったケースでの正しい生成AIの出力は「すいません。回答に必要な知識がないようです。」のように知識がないことを生成AI自身が認識することが望まれますが、必ずしもそうはなりません。

実践的にはプロンプトなどに「拡張された知識をもとに回答を行なってください」というふうな文言を加えることで、ある程度それに沿った回答を行なってくれ、知識の不足を生成AIが認識することも一定可能です。

第二の故障 ~知識拡張の失敗~

これも非常に良くある話だなぁと論文を見ながら深く頷きました。知識となるドキュメントがソースには含まれているが、検索(Retrive)した結果には含まれていないということです。

一般的に生成AIのin-context学習はサイズが限定されています。gpt-4では8000文字、32000文字などのコンテキストサイズのモデルがありますね。基本的にはこの文字数以内の知識量しか学習させることができません。なのでシチュエーションごとに有用な知識ドキュメントのみを検索して生成に活かすわけですが、この検索がうまくいかないケースのことをここでは指摘されています。

個人的にはRAGにおいて一番のハマりポイントがここではないかなと思っています。そもそもユーザーの入力情報が不足しているパターンや、ドキュメント整備が不足しているパターンなど様々な要因が存在しているためです。
しかし解決策も多く提案されている分野ではあるため、この分野の最新情報をキャッチアップすることが解決の糸口となることも多いと思います。

第三の故障 ~知識統合の失敗~

RAGにおける知識統合は大量な知識ドキュメントを学習させるため、コンテキストウインドウに合ったサイズまでドキュメントの編集を行うことを指します。
一つの知識ドキュメントが非常に大きい場合、そこから有用な部分のみをコンテキストに加えることで生成AIのハルシネーションを防ぎ、回答が安定することが考えられます。有用な部分の抽出はパターン抽出によって行うことができます。

この問題点は、知識統合の処理であるドキュメントが本来は生成に有用だったのに、コンテキスト学習から除外してしまったことにより生成がうまくいかないケースを指しています。

終わり

元論文で紹介されている7つの故障のうち3つを紹介しました。
需要があれば、続く内容も別記事で解説します。

Discussion