RAGの評価についてちょこちょこ調べたりしてましたが、今回はRAGの改善方法について調べたいと思います。 正直、今でもいたるところで手法が提案されているので追いかけきれませんが、包括的なレポートで言及されている考え方くらいは調べてみたいと思います。
Naive RAG
欠点
NaiveなRAGには明確な欠点がいくつか指摘されています。
- 検索段階ではprecisionとrecallを高める必要があり、検索されたチャンクが無関係だったり重要な情報が抜け落ちたりする
- 生成段階ではハルシネーションを起こすおそれがある。
- augmentation時には、似たようなチャンクが検索されると、同じような内容が繰り返されたりする。また様々なパッセージの重要性や関連性を推測し、文体や調性の一貫性を確保することは、さらに複雑さを増す。
改善方針
RAGシステムが(ユーザーの質問に対して有用で関連性の高い回答を提供するという意味で)成功とみなされるためには、実際には2つのハイレベルな要件しかない
- 検索: ユーザーの質問に対して最も関連性の高い文書を見つけることができなければならない。
- 生成: ユーザーのクエリに十分に答えるために、検索された文書をうまく利用できなければならない
Advanced RAG
Advanced RAGではNaive RAGなRAGの課題を解決するために開発されたそうです。
Advanced RAGでは、検索品質の向上に焦点を当て事前検索と事後検索の戦略を採用しています。
そのため、主に下記の処理に分割して改善を行っていくようです。
- Pre-retrieval
- Retrieval
- Post-Retrieval
実装やテクニックなどは下記の記事が分かりやすいのでご参照ください。
Modular RAG
Modular RAGでは、RAGの改善テクニックやAdvanced RAGなどで登場した様々な技術をモジュールとして捉え、それらの組み合わせによってRAGを構築するパラダイムになっています。
Module typeにはおおよそ下記の6つが考えられているようです。
- Indexing
- Pre-Retrieval
- Retrieval
- Post-Retrieval
- Generation
- Orchestration
更にこれらのモジュールを踏まえて、Fine Tuningや推論時のFlowのパターンも紹介されています。
- Fine Tuning
- Retriever FT
- Generator FT
- Dual FT
- Inference
- Sequential Pattern
- Conditional Pattern
- Branch Pattern
- Loop Pattern
参考文献
この記事を書くにあたって下記の文献を参考にさせていただきました。
- A Cheat Sheet and Some Recipes For Building Advanced RAG — LlamaIndex, Data Framework for LLM Applications
- [2312.10997] Retrieval-Augmented Generation for Large Language Models: A Survey
- Modular RAG and RAG Flow: Part Ⅰ. A compressive and high-level… | by Yunfan Gao | Medium
- Modular RAG and RAG Flow: Part II | by Yunfan Gao | Medium
感想
以上、Advanced RAGやModular RAGのパラダイムについて調べてみました。 実装はだいたいがllamaindexなどでサンプル実装などで公開されていたりしますが、パラダイムが頭に入っていると読み込みが楽になりそうですね。