Re:ゼロから始めるML生活

どちらかといえばエミリア派です

Naive RAGからModular RAGまで

RAGの評価についてちょこちょこ調べたりしてましたが、今回はRAGの改善方法について調べたいと思います。 正直、今でもいたるところで手法が提案されているので追いかけきれませんが、包括的なレポートで言及されている考え方くらいは調べてみたいと思います。

Naive RAG

欠点

NaiveなRAGには明確な欠点がいくつか指摘されています。

  • 検索段階ではprecisionとrecallを高める必要があり、検索されたチャンクが無関係だったり重要な情報が抜け落ちたりする
  • 生成段階ではハルシネーションを起こすおそれがある。
  • augmentation時には、似たようなチャンクが検索されると、同じような内容が繰り返されたりする。また様々なパッセージの重要性や関連性を推測し、文体や調性の一貫性を確保することは、さらに複雑さを増す。

改善方針

RAGシステムが(ユーザーの質問に対して有用で関連性の高い回答を提供するという意味で)成功とみなされるためには、実際には2つのハイレベルな要件しかない

  • 検索: ユーザーの質問に対して最も関連性の高い文書を見つけることができなければならない。
  • 生成: ユーザーのクエリに十分に答えるために、検索された文書をうまく利用できなければならない

Advanced RAG

Advanced RAGではNaive RAGなRAGの課題を解決するために開発されたそうです。

medium.com

Advanced RAGでは、検索品質の向上に焦点を当て事前検索と事後検索の戦略を採用しています。

そのため、主に下記の処理に分割して改善を行っていくようです。

  • Pre-retrieval
  • Retrieval
  • Post-Retrieval

"Advanced Retrieval-Augmented Generation: From Theory to LlamaIndex Implementation"より引用

実装やテクニックなどは下記の記事が分かりやすいのでご参照ください。

towardsdatascience.com

Modular RAG

Modular RAGでは、RAGの改善テクニックやAdvanced RAGなどで登場した様々な技術をモジュールとして捉え、それらの組み合わせによってRAGを構築するパラダイムになっています。

"Modular RAG and RAG Flow: Part Ⅰ"より引用

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

"Modular RAG and RAG Flow: Part II"より引用

参考文献

この記事を書くにあたって下記の文献を参考にさせていただきました。

感想

以上、Advanced RAGやModular RAGのパラダイムについて調べてみました。 実装はだいたいがllamaindexなどでサンプル実装などで公開されていたりしますが、パラダイムが頭に入っていると読み込みが楽になりそうですね。