基于milvus向量數據庫的相似度檢索問題——稀疏-密集向量檢索和混合搜索 原創
“ 不同的向量類型可能會得到不同的檢索結果,因此需要根據不同的場景選擇合適的檢索策略 ”
相似度檢索是目前人工智能領域一個非常重要的應用場景,其不僅僅應用于人工智能技術,同樣應用于搜索技術;比如搜索引擎,電商搜索等多種技術領域。
因此,向量數據庫也成為現在技術領域不可缺少的一個中間件;雖然說向量檢索主要就是進行向量計算,不管是余弦,還是歐式距離等算法,目的都是通過計算向量之間的位置關系來確定相似度。
但這里就產生了一個問題,使用稠密向量和稀疏向量檢索會得到不一樣的結果;而使用混合搜索技術又會產生另一種結果。
因此,這里就涉及到向量數據庫在不同的應用場景下的檢索策略的選擇;什么情況下應該選擇稠密向量,什么情況下應該選擇稀疏向量,而什么情況下又應該選擇混合搜索。
相似度檢索的策略問題
milvus向量數據庫支持多種類型的度量方式,常見的有余弦和歐式距離;使用不同的度量算法其結果也不盡相同,而且有的算法是值越大越好,而有的算法卻是值越小越好。
而我們今天討論的不是值大小問題,而是不同向量類型之間的檢索策略問題。
在Milvus中有兩種經典的向量類型,稠密向量和稀疏向量;不同類型的向量可以表示不同的信息,使用不同的嵌入模型可以更全面地表示數據的不同特征和方面。
而稠密向量和稀疏向量的主要區別是,表示語義的密集向量和表示句子中詞頻的稀疏向量。
因此,稠密向量類型和稀疏向量類型,使用的是兩種完全不同的搜索方式;稠密向量一般使用機器學習模型,也就是Embedding模型生成語義相關的向量數據;而稀疏向量一般使用的是詞袋模型或BM25算法。
在milvus向量檢索中,返回值中會有一個距離值(distance),在某些情況下使用稠密向量,稀疏向量或者混合搜索的方式可能搜索到的結構都是一樣的。
但其距離值distance的值卻是不一樣的,在某些情況下可能混合搜索策略的距離值更大,而某些情況下普通檢索的距離值更大;當然,前提是使用了同樣的計算策略,比如說余弦函數。
那么什么情況下應該選擇稠密向量類型,什么情況下應該選擇稀疏向量類型?
由于稠密向量主要進行的是語義檢索,而稀疏向量主要進行的關鍵詞匹配;所以,在選擇上我們需要從多個方面進行考慮。
核心對比:稠密向量 vs 稀疏向量
維度 | 稠密向量 | 稀疏向量 |
生成方式 | 深度學習模型(如 BERT、ResNet) | 詞頻統計方法(如 TF-IDF、BM25) |
維度 | 低維(如 384、768 維) | 高維(如 10萬+ 維,大部分為0) |
語義理解 | ?????(捕捉上下文語義) | ?(僅關鍵詞匹配) |
關鍵詞敏感度 | ??(可能忽略術語細節) | ?????(精確匹配關鍵詞) |
計算開銷 | 高(需模型推理) | 低(直接統計計算) |
適用場景 | 語義搜索、跨模態檢索、長文本理解 | 短文本搜索、精確術語匹配、日志分析 |
Milvus 索引支持 | IVF_FLAT, HNSW, DISKANN 等 | SPARSE_INVERTED_INDEX |
當然,稠密向量搜索和稀疏向量搜索并不是非此即彼的關系,在某些場景下可以使用混合搜索的方式,也就是同時使用稠密向量和稀疏向量進行搜索。
總結建議
場景 | 推薦方案 | 案例 |
長文本、語義理解 | 純稠密向量 | 法律文檔語義檢索 |
短文本、精確關鍵詞匹配 | 純稀疏向量 | 商品型號搜索 |
復雜需求、混合意圖 | 混合搜索 | 電商搜索(“性價比 5G 手機”) |
資源有限、延遲敏感 | 稀疏向量 | 日志實時分析 |
本文轉載自公眾號AI探索時代 作者:DFires
