RAG評価の不安定性を解消する手法
DEV.to
2026年7月15日 (水)
- •検索拡張生成(RAG)の評価が不安定な原因は、モデルの性能よりも検索処理の非決定性に起因する場合が多い。
- •RRF(相互順位融合)では、検索結果の同順位が発生した際、取得順序の不一致がRecall@Kスコアの変動を引き起こす。
- •SQLクエリにID列などの決定論的なタイブレーカーを追加することで、評価結果の再現性を確保できる。
検索拡張生成(RAG)の評価結果は、モデルの不安定さよりも検索プロセスの非決定性によって大きく変動する可能性があると、開発者のVasylは指摘する。オープンソースプラットフォーム「TextStack」の「Ask this Book」機能を開発する過程で、同一のクエリやモデルを使用してもRecall@K指標が実行ごとに異なる現象が確認された。この問題は、pgvectorによるセマンティック検索とPostgreSQLの全文検索結果を統合するために用いるRRFアルゴリズムに起因している。
RRFは生スコアではなくアイテムの順位に基づいて統合結果を算出する。そのため、同スコアのアイテムが存在する場合に順位が入れ替わると、Top-Kのセットおよび後続の評価指標が変化してしまう。特に「ORDER BY score DESC」を用いるSQLクエリでは、PostgreSQLが同値に対する順序を保証しないため、順序が予測不可能になるケースが多い。
この問題を解決するため、SQLクエリを「ORDER BY score DESC, id」へと変更し、決定論的なタイブレーカーを実装した。これにより、同順位の行が一貫した順序で維持され、検索の再現性と評価の安定性が確保された。開発者は、モデルの温度パラメータと同様に、検索やランキング、データ読み込みのレイヤーにも厳格な管理を行うべきだと強調する。非決定的なパイプライン段階は、評価に対する信頼を損ない、真のパフォーマンス問題を隠蔽する恐れがあるためだ。