はじめに
ベクトル検索だけでは不十分です。BM25は正確なキーワード一致に強く、ベクトル検索はセマンティック一致に強い。両方を組み合わせ、リランカーでフィルタリングすると、RAGの品質が大幅に向上します。
1. なぜハイブリッドなのか
- BM25:エラーコード、設定パラメータなど正確な用語の検索に強い
- ベクトル:「この問題の解決方法は?」のような意味的な検索に強い
- 組み合わせ:両方の長所を活かし、弱点をカバー
2. RRF(Reciprocal Rank Fusion)
2つのランキングリストを統合するシンプルで効果的な方法:
$$RRF(d) = \sum_{r \in R} \frac{1}{k + rank_r(d)}$$
ここで$k$は通常60に設定します。
各検索メソッドのランキングを組み合わせ、最終的なスコアを算出します。
3. パイプライン設計
ユーザークエリ
├── BM25検索 → top-N候補
├── ベクトル検索 → top-N候補
└── RRF統合 → top-2N候補
└── リランカー → top-K最終結果
└── コンテキストビルダー → LLM
4. リランカーの役割
リランカーはクエリと各候補ペアを再評価し、より精度の高いスコアを付けます:
- クロスエンコーダーベースが最も精度が高い
- ローカルで動作可能な軽量リランカーも存在
- レイテンシとのトレードオフを考慮
5. チューニングポイント
- BM25とベクトルのtop-N比率
- RRFのk値
- リランカーのカットオフしきい値
- 最終コンテキストに含めるチャンク数
ゴールデンセットで各パラメータの影響を測定してください。
6. ハルシネーション制御
- 検索結果のスコアが低い場合は「データ不足」を返す
- 引用ソースを常にレスポンスに含める
- コンテキスト外の情報を生成しないようプロンプトで制約
デモコード
BM25 vs ベクトル vs ハイブリッドの検索結果比較:

ソースコード:05-hybrid-retrieval