Raudaschl/rag-fusion
RAG-Fusion: multi-query generation + Reciprocal Rank Fusion for better retrieval-augmented generation. Includes evaluation harness with NFCorpus/BEIR.
RAG-Fusion:クイック解説
概要 – RAG-Fusionは、検索拡張生成(RAG)をベースにした研究グレードの検索パイプラインです。これは、古典的な「語彙の不一致」問題を以下の方法で克服しようとします:
- 代替クエリの生成:小型のLLMを使用して、ユーザーの質問ごとに4つの書き換えを生成します。
- 各クエリの二重実行:キーワードベースのBM25インデックスと、密ベクトルインデックスの両方で検索を実行します。
- 10個の結果リストの統合:Reciprocal Rank Fusion (RRF) を使用して、多くのリストで上位に現れるドキュメントを高く評価します。
- オプションの再ランク付け:クロスエンコーダーや決定モデル(例:Jev, OpenAI Decisions API)を使用して統合された候補プールを再スコアリングし、上位5〜10件を生成回答モデルに渡します。
重要性 – 追加の書き換えとBM25 + ベクトル混合検索によるレイテンシの増加はわずか(書き換え呼び出しで約≈1.5秒)であり、APIコストも極めて低額(1,000クエリあたり約≈$0.06)です。医療分野のNFCorpusベンチマークを用いた実験では、完全な Hybrid + Diverse + Rerank 構成により、NDCG@10が約**+0.05**(単純なベクトルベースライン比で約19%向上)、MRRが**+0.09**向上しました。この効果は以下の場合に特に顕著です:
- ユーザーの表現がコーパスの用語と異なる場合、
- 精密な精度よりも再現率が重要な場合、
- 下流システムが短い検索結果リストを処理できる場合(例:合成LLMや複数の候補を表示するUI)。
適さないケース – サブ秒単位のレイテンシが必要な場合、厳密に管理されたFAQスタイルのナレッジベースがある場合、または完全一致が支配的なコードや識別子を検索する場合は、追加の計算コストに見合う価値はほとんどありません。
試用方法 – リポジトリをクローンし、Pythonの依存関係をインストールし、OpenAIキー(オプションでJevキー)を追加して、以下を実行してください:
python main.py # demo end-to-end
python evaluate.py # run the quantitative benchmark
eval/ フォルダには、完全な評価ハーネス(データセットローダー、IR指標、検索バリアント、再ランク付けツール、レイテンシ/コストベンチマーク、ブートストラップ信頼区間ユーティリティ)が含まれています。experiments/ サブフォルダには、各再ランク付けツール(Jev, OpenAI Decisions, Microsoft-Decision-1)の詳細なレポートと生の結果、およびarXiv論文の再現実験が格納されています。
結論 – RAG-Fusionは、低〜中程度のスループットで知識集約型の検索シナリオにおいて、検索品質を向上させるための具体的で再現可能なレシピです。安価なLLM駆動のクエリ拡張ステップと、無料のBM25 + ベクトル混合検索、そして適度な再ランク付けを組み合わせることで、標準的なRAGパイプラインに対して統計的に有意な向上を実現できることを示しています。
関連
- プロジェクト
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト