Repolode
Raudaschl

Raudaschl/rag-fusion

LLMによるクエリ書き換え、BM25とベクトル検索、Reciprocal Rank Fusionを組み合わせて検索精度を高めるRAG-FusionのPythonリファレンス実装。NFCorpus評価用ハーネスも含みます。

スター
960
フォーク
113
未解決の Issue
0
最終コミット
28 日前

これは何?

RAG-Fusionは、検索拡張生成(RAG)のための検索手法です。LLMがユーザーのクエリを異なる観点から複数の表現に書き換え、各表現をBM25によるキーワード検索とベクトル検索の両方にかけます。その後、Reciprocal Rank Fusionで順位付きリストを統合し、多くのリストに登場する文書ほど上位に表示します。ユーザーの言葉遣いとコーパスのインデックス作成時の表現が異なる場合など、クエリを一つの表現だけで検索すると関連情報を見落とすケースを対象としています。

このリポジトリには、ChromaDBとOpenAIを使ったベクトル検索の基本的なパイプラインを実装するmain.pyと、BEIRのNFCorpusデータセットでベースライン、ハイブリッド、RAG-Fusion、hybrid-diverseの各方式を比較するeval/内の評価ハーネスがあります。また、cross-encoderによる再ランキング段階や、NDCG、precision、recall、MRRを測定する実験レポートに加え、構成ごとのコストとレイテンシの測定結果も含まれています。

このリポジトリの測定結果によると、ハイブリッド検索による統合の後に再ランキングを加えると、小さいながらも統計的に有意な改善が得られます。一方、強力な再ランキングを導入した後では、ベクトル検索のみの結果を統合しても効果はほとんどありません。

主な機能

  • 01ユーザークエリを複数の表現に書き換え、異なる言い回しをカバーします。
  • 02クエリの各表現について、BM25によるキーワード検索とベクトル検索を組み合わせます。
  • 03Reciprocal Rank Fusionで順位付きの検索結果を統合します。
  • 04統合後の候補群に対して、cross-encoderなどの再ランキング処理を利用できます。
  • 05NFCorpusデータセットを使い、IR指標とブートストラップ信頼区間で検索方式を評価します。
  • 06LLMによるクエリ書き換えをディスクにキャッシュし、ChromaDBの埋め込みをローカルに保存します。

ユースケース

  • 医療・科学論文など、専門用語の表記に揺れがある文献を検索する。
  • 関連文書を見落とすコストが高い検索パイプラインで、再現率を高める。
  • RAGシステムに導入する前に、クエリ書き換えや順位統合を試す。

クイックスタート

  1. 1

    コア依存関係をインストールする

    pip install openai chromadb python-dotenv tqdm tabulate rank_bm25
  2. 2

    テンプレートから .env ファイルを作成する

    cp .env.example .env
  3. 3

    OpenAI API キーを .env に追加してから、デモを実行する

    python main.py

使う前に知っておきたいこと

  • デモの実行とリライトには、有料の OpenAI API キーが必要です。
  • main.py のデモで使われるのはベクトル検索のみです。最も高い性能を発揮する hybrid-plus-rerank の構成は eval/ にあり、追加のパッケージが必要です。
  • 実験では特定の LLM と判定モデルに依存しており、その一部は提供終了または利用不可になっている可能性があります。

トピック

#rag#information-retrieval#vector-search#reciprocal-rank-fusion#query-expansion#reranking#chromadb#openai#python#rag-fusion

よくある質問

rag-fusion とは?
LLMによるクエリ書き換え、BM25とベクトル検索、Reciprocal Rank Fusionを組み合わせて検索精度を高めるRAG-FusionのPythonリファレンス実装。NFCorpus評価用ハーネスも含みます。 RAG-Fusionは、検索拡張生成(RAG)のための検索手法です。LLMがユーザーのクエリを異なる観点から複数の表現に書き換え、各表現をBM25によるキーワード検索とベクトル検索の両方にかけます。その後、Reciprocal Rank Fusionで順位付きリストを統合し、多くのリストに登場する文書ほど上位に表示します。ユーザーの言葉遣いとコーパスのインデックス作成時の表現が異なる場合など、クエリを一つの表現だけで検索すると関連情報を見落とすケースを対象としています。
rag-fusion は無料で使えますか?ライセンスは?
rag-fusion は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
rag-fusion は今もメンテナンスされていますか?
活発にメンテナンス中。rag-fusion の最終コミットは 2026年10月10日 です。
rag-fusion は何に使えますか?
医療・科学論文など、専門用語の表記に揺れがある文献を検索する。 関連文書を見落とすコストが高い検索パイプラインで、再現率を高める。 RAGシステムに導入する前に、クエリ書き換えや順位統合を試す。
rag-fusion のインストール方法は?
コア依存関係をインストールする: pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 テンプレートから .env ファイルを作成する: cp .env.example .env OpenAI API キーを .env に追加してから、デモを実行する: python main.py
rag-fusion はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/Raudaschl/rag-fusion

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト