phpstudy 網(wǎng)站空白百度怎么推廣廣告
圖片來(lái)自Shutterstock上的Bakhtiar Zein
多年來(lái),以Elasticsearch為代表的基于全文檢索的搜索方案,一直是搜索和推薦引擎等信息檢索系統(tǒng)的默認(rèn)選擇。但傳統(tǒng)的全文搜索只能提供基于關(guān)鍵字匹配的精確結(jié)果,例如找到包含特殊名詞“Python3.9”的文檔,或是找到帶“花”字,“雨”字,“雪”字的古詩(shī)詞。
但在實(shí)際需求中,我們有時(shí)候需要的,不只是古詩(shī)詞中帶“雪”字,還要找到表示雪很大這樣意向的古詩(shī)詞。比如,初高中語(yǔ)文課里學(xué)到的“忽如一夜春風(fēng)來(lái),千樹(shù)萬(wàn)樹(shù)梨花開(kāi)”這句詩(shī),雖然沒(méi)有雪字,卻精準(zhǔn)表達(dá)了雪很大這樣的意向。
再以照片檢索為例,我們不僅需要1:1精準(zhǔn)搜索出圖像對(duì)應(yīng)的原圖,往往也需要對(duì)圖像的特征、關(guān)鍵信息提取后,去檢索具備類(lèi)似特征的圖像,完成以圖搜圖或者內(nèi)容推薦等任務(wù)。
如何通過(guò)檢索得到以上結(jié)果?
基于稠密向量打造的語(yǔ)義搜索就發(fā)揮了作用。通常來(lái)說(shuō),語(yǔ)義檢索,通過(guò)將我們輸入的詞匯、圖片、語(yǔ)音等原始數(shù)據(jù)轉(zhuǎn)化為向量,進(jìn)而捕捉不同數(shù)據(jù)之間的語(yǔ)義關(guān)系(例如知道“老師”和“教師”其實(shí)是一個(gè)意思),可以更精準(zhǔn)的理解用戶的搜索意圖,從而提供更準(zhǔn)確、更相關(guān)的搜索結(jié)果。
但如何實(shí)現(xiàn)語(yǔ)義檢索?Embedding模型和向量數(shù)據(jù)庫(kù)在其中的作用至關(guān)重要。前者主要完成原始信息的向量化,后者則提供對(duì)向量化信息的存儲(chǔ)、檢索等服務(wù)。目前,檢索增強(qiáng)生成(RAG)與多模態(tài)搜索,是語(yǔ)義檢索的核心應(yīng)用場(chǎng)景之一。
但通常來(lái)說(shuō),在實(shí)踐中,全文檢索與語(yǔ)義檢索不是非此即彼的關(guān)系。我們需要同時(shí)兼顧語(yǔ)義理解和精確的關(guān)鍵字匹配。比如學(xué)術(shù)論文的寫(xiě)作中,用戶不僅希望在搜索結(jié)果看到與搜索查詢相關(guān)的概念,同時(shí)也希望保留查詢中使用的原始信息返回搜索結(jié)果,比如基于一些特殊術(shù)語(yǔ)和名稱。
因此,許多搜索應(yīng)用正在采用混合搜索方法,結(jié)合兩種方法的優(yōu)勢(shì),以平衡靈活的語(yǔ)義相關(guān)性和可預(yù)測(cè)的精確關(guān)鍵字匹配。
01.
混合搜索挑戰(zhàn)
實(shí)現(xiàn)混合搜索的常見(jiàn)方法如下:
先使用像開(kāi)源Milvus這樣的專用向量數(shù)據(jù)庫(kù),進(jìn)行高效和可擴(kuò)展的語(yǔ)義搜索;
然后使用像Elasticsearch或OpenSearch這樣的傳統(tǒng)搜索引擎進(jìn)行全文搜索。
兩兩搭配雖然效果不錯(cuò),但也引入了新的復(fù)雜性:首先,搭配兩套不同的搜索系統(tǒng),也就意味著我們要同時(shí)管理不同的基礎(chǔ)設(shè)施、配置和維護(hù)任務(wù)。這會(huì)造成更重的運(yùn)營(yíng)負(fù)擔(dān)并增加潛在的集成問(wèn)題。

在此基礎(chǔ)上,混合檢索統(tǒng)一解決方案橫空出世。
混合搜索的統(tǒng)一解決方案將提供許多好處:
減少基礎(chǔ)設(shè)施維護(hù):管理一個(gè)系統(tǒng)而不是兩個(gè)系統(tǒng)大大降低了操作復(fù)雜性,節(jié)省了時(shí)間和資源。這也意味著更少的上下文切換和掌握兩組不同API的算力開(kāi)銷(xiāo)。
合并數(shù)據(jù)管理:統(tǒng)一的表結(jié)構(gòu)允許用戶將密集(基于向量)和稀疏(基于關(guān)鍵字)數(shù)據(jù)與共享元數(shù)據(jù)標(biāo)簽一起存儲(chǔ)。使用兩個(gè)單獨(dú)的系統(tǒng),則需要將元數(shù)據(jù)標(biāo)簽存儲(chǔ)兩次,以便雙方能夠進(jìn)行元數(shù)據(jù)過(guò)濾。
簡(jiǎn)化查詢:單個(gè)請(qǐng)求可以執(zhí)行語(yǔ)義和全文搜索任務(wù),無(wú)需對(duì)單獨(dú)的系統(tǒng)進(jìn)行兩次API調(diào)用。
增強(qiáng)的安全性和權(quán)限改造:統(tǒng)一的方法可以實(shí)現(xiàn)更直接和更強(qiáng)大的安全管理,因?yàn)樗性L問(wèn)控制都可以在向量數(shù)據(jù)庫(kù)中集中管理,從而提高安全性合規(guī)性和一致性。
02.
如何使用統(tǒng)一的向量方法簡(jiǎn)化混合搜索
在語(yǔ)義搜索中,機(jī)器學(xué)習(xí)模型會(huì)根據(jù)文本的含義將文本“嵌入”為高維空間中的點(diǎn)(稱為密集向量) 。具有相似語(yǔ)義的文本在此空間中,彼此的距離會(huì)更接近。例如,“蘋(píng)果”和“水果”就比“蘋(píng)果”和“汽車(chē)”更接近。這使得我們能夠通過(guò)使用近似最近鄰 (ANN)算法計(jì)算每個(gè)點(diǎn)之間的距離來(lái)快速找到語(yǔ)義相關(guān)的文本。
這種方法也可以通過(guò)將文檔和查詢編碼為稀疏向量,進(jìn)而應(yīng)用于全文搜索。
在稀疏向量中,每個(gè)維度代表一個(gè)術(shù)語(yǔ),值表示每個(gè)術(shù)語(yǔ)在文檔中的重要性。
文檔中不存在的術(shù)語(yǔ)的值為零。由于任何給定的文檔通常只使用詞匯表中所有可能術(shù)語(yǔ)的一小部分,因此,大多數(shù)術(shù)語(yǔ)不會(huì)出現(xiàn)在文檔中。這也就意味著生成的向量是稀疏的——因?yàn)樗鼈兊拇蠖鄶?shù)值為零。例如,在通常用于評(píng)估信息檢索任務(wù)的MS-MARCO數(shù)據(jù)集中,雖然大約有 900 萬(wàn)個(gè)文檔,100 萬(wàn)個(gè)詞,但大多數(shù)文檔只覆蓋不足幾百個(gè)詞,生成的向量中絕大多數(shù)維度值為零。
這種極端稀疏性對(duì)于我們高效存儲(chǔ)和處理這些向量具有重要意義。比如,我們可以將其用于優(yōu)化搜索性能,同時(shí)保持準(zhǔn)確性。
最初為密集向量設(shè)計(jì)的向量數(shù)據(jù)庫(kù),其實(shí)也可以高效處理這些稀疏向量。例如,開(kāi)源向量數(shù)據(jù)庫(kù)Milvus剛剛發(fā)布了使用Sparse-BM25的原生全文搜索功能。
Sparse-BM25 由 Milvus提出,其原理類(lèi)似 Elasticsearch 和其他全文搜索系統(tǒng)中常用的BM25算法,但針對(duì)稀疏向量設(shè)計(jì),可以實(shí)現(xiàn)相同效果的全文搜索功能:
具有數(shù)據(jù)剪枝功能的高效檢索算法:通過(guò)剪枝來(lái)丟棄搜索查詢中的低值稀疏向量,向量數(shù)據(jù)庫(kù)可以顯著減小索引大小并以最小的質(zhì)量損失達(dá)成最優(yōu)的性能。
帶來(lái)進(jìn)一步的性能優(yōu)化:將詞頻表示為稀疏向量而不是倒排索引,可以實(shí)現(xiàn)其他基于向量的優(yōu)化。比如:用圖索引替代暴力掃描,實(shí)現(xiàn)更有效的搜索;乘積量化(PQ)/標(biāo)量量化(SQ),進(jìn)一步減少內(nèi)存占用。
除了這些優(yōu)化之外,Sparse-BM25還繼承了高性能向量數(shù)據(jù)庫(kù)Milvus的幾個(gè)系統(tǒng)級(jí)優(yōu)勢(shì):
高效的底層實(shí)現(xiàn)和內(nèi)存管理:Milvus 的核心向量索引引擎采用 C++ 實(shí)現(xiàn),可以提供比基于Java的系統(tǒng)(如Elasticsearch)更高效的內(nèi)存管理。與基于JVM的方法相比,僅此一項(xiàng)就節(jié)省了數(shù) GB 的內(nèi)存占用。
對(duì)MMap的支持:與Elasticsearch在內(nèi)存和磁盤(pán)中使用page-cache進(jìn)行索引存儲(chǔ)類(lèi)似,Milvus支持內(nèi)存映射(MMap)以在索引超過(guò)可用內(nèi)存時(shí)擴(kuò)展內(nèi)存容量。
03.
為什么傳統(tǒng)搜索引擎在向量搜索方面有先天不足
Elasticsearch是為傳統(tǒng)的倒排索引構(gòu)建的,在不根本改變架構(gòu)的情況下,支持向量索引具有非常大的挑戰(zhàn)。這導(dǎo)致其相比于專用向量數(shù)據(jù)庫(kù)有非常大的性能差異:即使只有100萬(wàn)個(gè)向量,Elasticsearch也需要200毫秒(在全托管的 Elastic Cloud 上測(cè)試)才能返回搜索結(jié)果,而在Milvus上(在全托管的Zilliz Cloud上測(cè)試)需要6毫秒——性能差異超過(guò)30倍。
每秒查詢率(QPS)測(cè)量的吞吐量也有3倍的差異,Zilliz Cloud上性能最高的實(shí)例運(yùn)行在6,000QPS,而Elastic Cloud最多為1,900QPS。此外,Zilliz Cloud在加載向量數(shù)據(jù)和構(gòu)建索引方面比Elastic Cloud快15倍。
此外,Elasticsearch的Java/JVM實(shí)現(xiàn)導(dǎo)致其性能的可擴(kuò)展性也弱于基于 C++/Go 實(shí)現(xiàn)的向量數(shù)據(jù)庫(kù)。而且,Elasticsearch缺乏高級(jí)的向量搜索功能,如基于磁盤(pán)的索引(DiskANN、MMap)、優(yōu)化的元數(shù)據(jù)過(guò)濾和range search。

04.
結(jié)論
Milvus 作為性能領(lǐng)先的向量數(shù)據(jù)庫(kù),通過(guò)無(wú)縫結(jié)合語(yǔ)義搜索和全文搜索,將稠密向量搜索與優(yōu)化的稀疏向量技術(shù)相結(jié)合,提供了卓越的性能、可擴(kuò)展性和效率,并簡(jiǎn)化了基礎(chǔ)設(shè)施的部署難度,降低成本的同時(shí)還增強(qiáng)了搜索能力。
展望未來(lái),我們相信基于向量數(shù)據(jù)庫(kù)的新型基礎(chǔ)設(shè)施,將有望超越Elasticsearch成為混合搜索的標(biāo)準(zhǔn)解決方案。
作者介紹
陳將
Zilliz 生態(tài)和 AI 平臺(tái)負(fù)責(zé)人
推薦閱讀