譯者 | 布加迪
審校 | 重樓
幾十年來,以Elasticsearch為代表的關(guān)鍵詞匹配(又稱為全文搜索)一直是企業(yè)搜索和推薦引擎等信息檢索系統(tǒng)的默認(rèn)選擇。
隨著基于人工智能的搜索技術(shù)不斷進(jìn)步,如今企業(yè)組織在向語義搜索轉(zhuǎn)變,從而使系統(tǒng)能夠理解用戶查詢背后的含義和意圖。嵌入模型和矢量數(shù)據(jù)庫已成為這一轉(zhuǎn)變的核心。
語義搜索將數(shù)據(jù)表示為矢量嵌入,從而比關(guān)鍵字匹配更勝一籌,提供了對(duì)搜索意圖更深入細(xì)致的理解,并徹底改變從檢索增強(qiáng)生成(RAG)到多模態(tài)搜索的各種應(yīng)用場(chǎng)景。
在實(shí)踐中,有效的信息檢索系統(tǒng)既需要語義理解,又需要精確的關(guān)鍵詞匹配。比如說,用戶希望搜索結(jié)果顯示與其搜索查詢相關(guān)的概念,又同時(shí)尊重查詢中使用的字面文本,比如特殊術(shù)語和名稱,并返回精確匹配的結(jié)果。
基于密集矢量的語義搜索有助于理解含義(比如知道“car”和“automobile”是同一個(gè)意思),而傳統(tǒng)的全文搜索提供用戶期望的精確結(jié)果(比如找到“Python 3.9”的精確匹配)。因此,許多組織正在采用混合搜索方法,結(jié)合兩種方法的優(yōu)勢(shì),以兼顧靈活的語義相關(guān)性和可預(yù)測(cè)的精確關(guān)鍵字匹配。
混合搜索面臨的挑戰(zhàn)
實(shí)現(xiàn)混合搜索的一種常見方法是使用專門構(gòu)建的矢量數(shù)據(jù)庫(比如開源Milvus)進(jìn)行高效、可擴(kuò)展的語義搜索,同時(shí)使用傳統(tǒng)的搜索引擎(比如Elasticsearch或OpenSearch)進(jìn)行全文搜索。
雖然這種方法可以獲得良好的效果,但也帶來了新的復(fù)雜性。管理兩個(gè)不同的搜索系統(tǒng)意味著要處理不同的基礎(chǔ)設(shè)施、配置和維護(hù)任務(wù),這會(huì)造成更沉重的操作負(fù)擔(dān),并加大潛在集成問題的可能性。
混合搜索的統(tǒng)一解決方案帶來了許多好處:
- 減少基礎(chǔ)設(shè)施維護(hù):管理一個(gè)系統(tǒng)而不是兩個(gè)系統(tǒng)大大降低了操作復(fù)雜性,還節(jié)省了時(shí)間和資源。這也意味著可以減少上下文切換和掌握兩組不同API的麻煩。
- 統(tǒng)一的數(shù)據(jù)管理:統(tǒng)一的表結(jié)構(gòu)允許你存儲(chǔ)密集數(shù)據(jù)(基于矢量)和稀疏數(shù)據(jù)(基于關(guān)鍵字)以及共享的元數(shù)據(jù)標(biāo)簽。使用兩個(gè)獨(dú)立的系統(tǒng)需要將元數(shù)據(jù)標(biāo)簽存儲(chǔ)兩次,以便雙方能夠進(jìn)行元數(shù)據(jù)過濾。
- 簡(jiǎn)化的查詢:單單一個(gè)請(qǐng)求可以執(zhí)行語義搜索任務(wù)和全文搜索任務(wù),因而不需要對(duì)不同的系統(tǒng)進(jìn)行兩次API調(diào)用。
- 增強(qiáng)的安全性和訪問控制:統(tǒng)一的方法可以實(shí)現(xiàn)更直接、更穩(wěn)健的安全管理,因?yàn)樗性L問控制都可以在矢量數(shù)據(jù)庫中加以集中管理,從而增強(qiáng)了安全合規(guī)和一致性。
統(tǒng)一矢量方法如何簡(jiǎn)化混合搜索?
在語義搜索中,機(jī)器學(xué)習(xí)模型基于文本的含義,將文本作為點(diǎn)(即密集矢量)“嵌入”到高維空間中。語義相似的文本在這個(gè)空間中彼此挨得更近。比如說,“apple”(蘋果)和“fruit”(水果)在這個(gè)空間中可能比“apple”(蘋果)和“car”(汽車)挨得更近。這便于我們只需使用近似最近鄰(ANN)算法計(jì)算每個(gè)點(diǎn)之間的距離,就可以快速找到語義相關(guān)的文本。
通過將文檔和查詢編碼為稀疏矢量,該方法還可以應(yīng)用于全文搜索。在稀疏矢量中,每個(gè)維度表示一個(gè)術(shù)語,其值表示每個(gè)術(shù)語在文檔中的重要程度。
文檔中沒有出現(xiàn)的術(shù)語的值為零。由于任何給定的文檔通常只使用詞匯表中所有可能術(shù)語的一小部分,因此大多數(shù)術(shù)語不會(huì)出現(xiàn)在文檔中。這意味著得到的矢量是稀疏矢量——它們的值大部分是0。比如說,在通常用于評(píng)估信息檢索任務(wù)的MS-MARCO數(shù)據(jù)集中,雖然有大約900萬個(gè)文檔和100萬個(gè)獨(dú)特的術(shù)語,但搜索系統(tǒng)通常將這個(gè)龐大集合分成比較小的部分,以便于管理。
即使在片段級(jí)別,詞匯表中有數(shù)十萬個(gè)術(shù)語,每個(gè)文檔通常包含少于100個(gè)術(shù)語,這意味著每個(gè)矢量的值超過99%為0。這種極端稀疏性對(duì)我們有效地存儲(chǔ)和處理這些矢量的方式有著重要的意義。
可以利用這種稀疏模式來優(yōu)化搜索性能,同時(shí)保持準(zhǔn)確性。最初為密集矢量設(shè)計(jì)的矢量數(shù)據(jù)庫可加以改動(dòng),以便有效地處理這些稀疏矢量。比如說,開源矢量數(shù)據(jù)庫Milvus剛剛發(fā)布了原生全文搜索支持,使用Sparse-BM25,這是Elasticsearch及其他全文搜索系統(tǒng)使用的BM25算法的稀疏矢量實(shí)現(xiàn)。Sparse-BM25借助以下機(jī)制,充分發(fā)揮了基于近似的全文搜索優(yōu)化:
- 基于數(shù)據(jù)修剪的高效檢索算法:通過運(yùn)用基于啟發(fā)式方法的修剪,丟棄片段索引中稀疏矢量值最低的文檔,并忽略搜索查詢中的低值稀疏矢量,矢量數(shù)據(jù)庫就可以顯著減少索引大小,優(yōu)化性能,同時(shí)確保質(zhì)量損耗最小。
- 充分利用進(jìn)一步的性能優(yōu)化:將術(shù)語頻率表示為稀疏矢量而不是反向索引,可以實(shí)現(xiàn)額外的基于矢量的優(yōu)化。這些包括:
- 圖索引用于比蠻力掃描更有效的搜索。
- 產(chǎn)品量化(PQ)/標(biāo)量量化(SQ)進(jìn)一步減少內(nèi)存占用。
除了這些優(yōu)化外,Sparse-BM5實(shí)現(xiàn)還繼承了高性能矢量數(shù)據(jù)庫Milvus的幾個(gè)系統(tǒng)級(jí)優(yōu)勢(shì):
- 高效的低級(jí)實(shí)現(xiàn)和內(nèi)存管理:Milvus的核心矢量索引引擎是用C++實(shí)現(xiàn)的,提供了比Elasticsearch等基于Java的系統(tǒng)更高效的內(nèi)存管理。與基于JVM的方法相比,僅這一點(diǎn)就可以節(jié)省數(shù)GB,從而減少內(nèi)存占用。
- 支持MMap:與Elasticsearch在內(nèi)存和磁盤中使用頁面緩存用于存儲(chǔ)索引相似,Milvus支持內(nèi)存映射(MMap),以便在索引超過可用內(nèi)存時(shí)擴(kuò)展內(nèi)存容量。
為什么傳統(tǒng)的搜索堆棧面對(duì)矢量搜索表現(xiàn)不佳?
Elasticsearch是為傳統(tǒng)的反向索引構(gòu)建的,這使得它從根本上難以為密集矢量搜索進(jìn)行優(yōu)化。其影響顯而易見:即使只有100萬個(gè)矢量,Elasticsearch也需要3770毫秒(ms)來返回搜索結(jié)果,而Milvus僅需6毫秒,足足相差600倍。這種性能差距隨著規(guī)模的擴(kuò)大而拉大,Elasticsearch的Java/JVM實(shí)現(xiàn)很難與基于C++ /Go的矢量數(shù)據(jù)庫的可擴(kuò)展性相匹配。此外,Elasticsearch缺乏關(guān)鍵的矢量搜索功能,比如基于磁盤的索引(DiskAnn和MMap)、經(jīng)過優(yōu)化的元數(shù)據(jù)過濾以及范圍搜索。
VectorDBBench基準(zhǔn)測(cè)試結(jié)果
結(jié)語
以Milvus為代表的矢量數(shù)據(jù)庫有望超越Elasticsearch,成為混合搜索的統(tǒng)一解決方案。通過將密集矢量搜索與經(jīng)過優(yōu)化的稀疏矢量技術(shù)相結(jié)合,矢量數(shù)據(jù)庫提供了卓越的性能、可擴(kuò)展性和效率。
這種統(tǒng)一的方法簡(jiǎn)化了基礎(chǔ)設(shè)施,減少了內(nèi)存占用,并增強(qiáng)了搜索功能,使其可以滿足未來的高級(jí)搜索需求。因此,矢量數(shù)據(jù)庫提供了一種全面的解決方案,可以無縫地結(jié)合語義搜索和全文搜索,性能比Elasticsearch等傳統(tǒng)的搜索系統(tǒng)更勝一籌。
原文標(biāo)題:Elasticsearch Was Great, But Vector Databases Are the Future,作者:Jiang Chen