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