前言
單純的向量檢索不夠。BM25 擅長精確關鍵字比對,向量檢索擅長語意比對。兩者結合再加上 reranker 過濾,RAG 品質將顯著提升。
1. 為什麼要混合檢索
- BM25:精確搜尋錯誤碼、設定參數等術語
- 向量:理解「這個問題怎麼解決?」之類的語意查詢
- 結合:取兩者優勢,互補弱點
2. RRF(Reciprocal Rank Fusion)
整合兩個排序列表的簡單有效方法:
$$RRF(d) = \sum_{r \in R} \frac{1}{k + rank_r(d)}$$
其中 $k$ 通常設為 60。
結合各檢索方法的排名,計算最終分數。
3. 管線設計
使用者查詢
├── BM25 搜尋 → top-N 候選
├── 向量搜尋 → top-N 候選
└── RRF 融合 → top-2N 候選
└── Reranker → top-K 最終結果
└── Context Builder → LLM
4. Reranker 的角色
Reranker 重新評估查詢與各候選的配對,給出更精確的分數:
- Cross-encoder 基礎的精確度最高
- 也有可在本地運行的輕量 reranker
- 需考量與延遲的權衡
5. 調校重點
- BM25 與向量的 top-N 比例
- RRF 的 k 值
- Reranker 的截止閾值
- 最終 context 包含的 chunk 數
使用 golden set 衡量各參數的影響。
6. 幻覺控制
- 檢索結果分數低時回傳「資料不足」
- 回應中始終包含引用來源
- 以 prompt 限制不生成 context 外的資訊
Demo 程式碼
BM25 vs 向量 vs 混合的檢索結果比較:
