iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0

🔍為什麼需要 Hybrid Search?

讀者到這邊多少都有感覺到,其實目前介紹RAG的檢索階段就是以前的搜尋引擎,只是搜尋方法為 向量相似度搜尋(Vector Search),屬於所謂的Dense Vector,而過去在做知識管理或資料搜尋,更偏向採用 關鍵字搜尋(Keyword Search),屬於所謂的Sparse Vector
由於兩者著重的面相以及背後算法不同,有各自的限制,所以有了Hybrid Search ,其核心理念是:同時結合語義搜尋與關鍵字搜尋,互補不足


🧩Dense Vector 與 Sparse Vector

Dense Vector

  • 嵌入模型(embedding model) 所生成,例如 BGE-m3。
  • 表示方式:固定長度的 浮點數陣列(如 [0.2, 0.7, 0.1, 0.8, ...])。
  • 每個維度皆承載語意資訊,能捕捉詞彙間的潛在語義關聯
  • 常用於 語義相似度搜尋(semantic similarity search)
  • 優勢:
    • 能處理同義詞、近義詞與不同表述方式。
    • 能夠捕捉查詢與文件之間的潛在語意關聯(即使用詞不同)。
  • 相似度計算:常透過 cosine similarity,結果範圍通常在 -1~1 之間。

Sparse Vector(稀疏向量)

  • 由傳統的 關鍵字統計方法(如 TF-IDF、BM25)生成。
  • 表示方式:高維稀疏矩陣,每個維度對應一個詞,大部分元素為零。
  • 常用於 關鍵字精確匹配
  • 優勢:
    • 對專有名詞、品牌名稱、數字或短查詢特別有效。
    • 結果可預測且容易解釋。
    • 行為較可預測(例如詞頻越高通常得分越高),便於解析與調整。
      注意:對中文(尤其繁體中文)來說,稀疏向量依賴正確的分詞/斷詞,分詞品質直接影響檢索效果。

為何要融合 Dense 與 Sparse?

以繁體中文的場景來說:

  • Dense Vector隨著中文向量模型的進步,對繁體中文的支援越來越好。
  • -Sparse Vector(BM25) 則可精確匹配關鍵詞,尤其適合專有名詞(如「台積電」)與數字,且使用者輸入短 query 時,往往比 Dense 更精準。

👉 因此,Dense 與 Sparse 結合使用可預想能優化檢索結果。

參考資料:

Milvus-密集向量
Milvus-稀疏向量


⚖️融合策略:Weighted Fusion vs RRF

你一定會想,阿兩個策略找回不一樣的東西,那是要怎麼挑啊?
這邊提供在融合 Dense 與 Sparse 的檢索結果時,常見兩種方式:

Weighted Fusion

  • 透過加權方式組合,例如:
    • Dense 向量檢索前 5 筆,權重 0.7。
    • BM25 檢索前 5 筆,權重 0.3。
  • 問題:
    • Qdrant cosine similarity 範圍固定。
    • BM25 分數範圍不固定(可大可小)。
    • 權重難以公平調整,容易失衡。

RRF (Reciprocal Rank Fusion)

  • 基於 排名(rank) 而非分數,融合多個檢索來源:
    [
    Score(d) = \sum_{s \in Sources} \frac{1}{k + rank_s(d)}
    ]
  • 特點:
    • 不受分數範圍影響。
    • 自然給予不同來源「相對公平」的權重。
    • 在繁體中文中,能平衡語義搜尋與關鍵字搜尋的重要性。

👉 結論:RRF 較適合繁體中文場景,因為它受來源分數的範圍影響而失衡。

參考資料:

Hybrid and Multi-Stage Queries

🏗️建議的實作架構

Qdrant (Dense Vector)    ──┐
                           ├── RRF 融合 ── 最終結果
OpenSearch BM25 (Sparse) ──┘
  1. Dense Vector(語義檢索)

    • 使用 Qdrant 或其他向量資料庫內建的搜尋方法,搭配適合的embedding model。
    • 搜尋 top-5 文件(語義相似度最佳)。
  2. Sparse Vector(關鍵字檢索)

    • 使用 OpenSearch 或 Elasticsearch 搭配中文斷詞器例如Jieba。
    • 搜尋 top-5 文件(關鍵字最相關)。
  3. 融合結果

    • 採用 RRF,將兩組結果合併重新排序取top-5(捨棄5個)。

👉 我的建議

  • Dense Vector(Qdrant) + Sparse Vector(OpenSearch BM25) → 透過 RRF 融合,是目前繁體中文環境下最有效的 Hybrid Search 方案(又或是不要使用Hybrid Search,考慮自行fine-tuning embedding model)。
  • 備註: top-5並非最佳建議,還是要看場景與chunk策略做搭配。

💡 小結

  • Hybrid Search 能彌補單一檢索方式的不足。
  • Dense Vector:擅長語義理解。
  • Sparse Vector(BM25):擅長精確關鍵字匹配。
  • 在繁體中文的情境中,語義與關鍵字同等重要,但可以觀察場景是否有必要採用Hybrid search。
  • Weighted Fusion 容易受兩種搜尋發法的數值範圍不一致影響,不適合。
  • RRF 個人建議基於排名的融合方式,也比較好解釋。

上一篇
Day 8 - 實作補充: RAG中的 AG- Augmented Generation
系列文
從 RAG 到 Agentic RAG:30 天打造本機智慧檢索系統9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言