1. 引言向量檢索已經(jīng)成為現(xiàn)代搜索和推薦系統(tǒng)的核心組件。 通過將復(fù)雜的對(duì)象(例如文本、圖像或聲音)轉(zhuǎn)換為數(shù)值向量,并在多維空間中進(jìn)行相似性搜索,它能夠?qū)崿F(xiàn)高效的查詢匹配和推薦。 ![]() 圖片來自:向量數(shù)據(jù)庫(kù)技術(shù)鑒賞【上集】(Ele實(shí)驗(yàn)室) Elasticsearch作為一款流行的開源搜索引擎,其在向量檢索方面的發(fā)展也一直備受關(guān)注。本文將回顧 Elasticsearch 向量檢索的發(fā)展歷史,重點(diǎn)介紹各個(gè)階段的特點(diǎn)和進(jìn)展。以史為鑒,方便大家建立起 Elasticsearch 向量檢索的全量認(rèn)知。 2. 初步嘗試:簡(jiǎn)單向量檢索的引入Elasticsearch 最初并未專門針對(duì)向量檢索進(jìn)行設(shè)計(jì)。然而,隨著機(jī)器學(xué)習(xí)和人工智能的興起,對(duì)于高維向量空間的查詢需求逐漸增長(zhǎng)。 在Elasticsearch的 5.x 版本中,Elastic 愛好者們開始嘗試通過插件和基本的數(shù)學(xué)運(yùn)算實(shí)現(xiàn)簡(jiǎn)單的向量檢索功能。如:一些早期的插件如 elasticsearch-vector-scoring、fast-elasticsearch-vector-scoring 就是為了滿足這樣的需求。 ![]() https://github.com/MLnick/elasticsearch-vector-scoring https://github.com/lior-k/fast-elasticsearch-vector-scoring 這一階段的向量檢索主要用于基本的相似度查詢,例如文本相似度計(jì)算。雖然功能相對(duì)有限,但為后續(xù)的發(fā)展奠定了基礎(chǔ)。 擴(kuò)展說明:關(guān)于機(jī)器學(xué)習(xí)功能,如果大家對(duì) Elasticsearch 版本更迭感興趣,印象中當(dāng)時(shí) 6.X 版本推出,非常振奮人心。不過受限于非開源功能,國(guó)內(nèi)的真實(shí)受眾還相對(duì)較少。 3. 官方支持:進(jìn)一步發(fā)展到 Elasticsearch 7.0 版本,正式開始增加對(duì)向量字段的支持,例如通過 dense_vector 類型。這標(biāo)志著Elasticsearch正式進(jìn)入向量檢索領(lǐng)域,不再只依賴于插件。 dense_vector 最早的發(fā)起時(shí)間:2018年12月13日,7.6 版本標(biāo)記為 GA。 https://github.com/elastic/elasticsearch/pull/33022 https://github.com/elastic/elasticsearch-net/issues/3836 關(guān)于 dense_vector 類型的使用,推薦閱讀:高維向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的實(shí)戰(zhàn)探索。 這一階段的主要挑戰(zhàn)是如何有效地在傳統(tǒng)的倒排索引結(jié)構(gòu)中支持向量檢索。通過與現(xiàn)有的全文搜索功能相結(jié)合,Elasticsearch能夠提供一種靈活而強(qiáng)大的解決方案。 從最初的插件和基本運(yùn)算,到后來的官方支持和集成,這一階段為Elasticsearch在向量檢索方面的進(jìn)一步創(chuàng)新和優(yōu)化奠定了堅(jiān)實(shí)的基礎(chǔ)。 4. 專門優(yōu)化:增強(qiáng)的相似度計(jì)算隨著需求的增長(zhǎng),Elasticsearch 團(tuán)隊(duì)開始深入研究并優(yōu)化向量檢索性能。這涉及了引入更復(fù)雜的相似度計(jì)算方法,例如余弦相似度、歐幾里得距離等,以及對(duì)查詢執(zhí)行的優(yōu)化。 從 Elasticsearch 7.3 版本開始,官方引入了更復(fù)雜的相似度計(jì)算方法。特別是 script_score 查詢的增強(qiáng),使用戶可以通過 Painless 腳本自定義更豐富的相似度計(jì)算。 https://www./guide/en/elasticsearch/reference/7.3/query-dsl-script-score-query.html#vector-functions 核心功能在于允許通過向量之間的夾角計(jì)算相似度,用 k 最近鄰 (k-NN) 的余弦相似度距離指標(biāo),從而為相似度搜索引擎提供支持。廣泛用于文本分析和推薦系統(tǒng)。 主要用于解決:復(fù)雜相似度需求,提供了更靈活和強(qiáng)大的相似度計(jì)算選項(xiàng),能夠滿足更多的業(yè)務(wù)需求。 應(yīng)用場(chǎng)景體現(xiàn)在:
值得一提的是:初始的時(shí)候,向量檢索支持的維度為:1024,直到 Elasticsearch 8.8 版本,支持維度變更為:2048(這是呼聲很高的一個(gè)需求)。 https://github.com/elastic/elasticsearch/pull/95257 https://discuss./t/vector-knn-search-with-more-than-1024-dimensions/332819 Elasticsearch 7.x 版本的增強(qiáng)相似度計(jì)算功能標(biāo)志著向量檢索能力的顯著進(jìn)展。通過引入更復(fù)雜的相似度計(jì)算方法和查詢優(yōu)化,Elasticsearch不僅增強(qiáng)了其在傳統(tǒng)搜索場(chǎng)景中的功能,還為新興的機(jī)器學(xué)習(xí)和AI應(yīng)用打開了新的可能性。 但,這個(gè)時(shí)候你會(huì)發(fā)現(xiàn),如果要實(shí)現(xiàn)復(fù)雜的向量搜索功能,自己實(shí)現(xiàn)的還很多。如果把后面馬上提到的深度學(xué)習(xí)的集成和大模型的出現(xiàn)比作:飛行的汽車,當(dāng)前的階段還是“拉驢車”,功能是有的,但用起來很費(fèi)勁。 ![]() 5. 深度學(xué)習(xí)集成與未來展望大模型時(shí)代,向量檢索和多模態(tài)搜索成為“兵家”必爭(zhēng)之地。 多模態(tài)檢索是一種綜合各種數(shù)據(jù)模態(tài)(如文本、圖像、音頻、視頻等)的檢索技術(shù)。換句話說,它不僅僅是根據(jù)文字進(jìn)行搜索,還可以根據(jù)圖像、聲音或其他模態(tài)的輸入來搜索相關(guān)內(nèi)容。 為了更通俗地理解多模態(tài)檢索,我們可以通過以下比喻和示例來加深認(rèn)識(shí):想象你走進(jìn)一個(gè)巨大的圖書館,這里不僅有書籍,還有各種圖片、錄音和視頻。你可以向圖書館員展示一張照片,她會(huì)為你找到與這張照片相關(guān)的所有書籍、音頻和視頻?;蛘撸憧梢院咭欢涡?,圖書館員能找到相關(guān)的資料,或者提供類似的歌曲或視頻。這就是多模態(tài)檢索的魔力! 隨著深度學(xué)習(xí)技術(shù)的不斷發(fā)展和應(yīng)用,Elasticsearch 已開始探索將深度學(xué)習(xí)模型直接集成到向量檢索過程中。這不僅允許更復(fù)雜、更準(zhǔn)確的相似度計(jì)算,還開辟了新的應(yīng)用領(lǐng)域,例如基于圖像或聲音的搜索。尤其在Elasticsearch的 8.x 版本,這一方向得到了顯著的推進(jìn)。 5.1 向量化是前提如下圖所示,先從左往右看是寫入,圖像、文檔、音頻轉(zhuǎn)化為向量特征表示,在 Elasticsearch 中通過 dense_vector 類型存儲(chǔ)。 從右往左看是檢索,先將檢索語(yǔ)句轉(zhuǎn)化為向量特征表示,然后借助 K 近鄰檢索算法(在 Elasticsearch 中借助 Knn search 實(shí)現(xiàn)),獲取相似的結(jié)果。 看中間,Results 部分就是向量檢索的結(jié)果。 綜上,向量檢索打破了傳統(tǒng)倒排索引僅支持文本檢索的缺陷,可以擴(kuò)展支持文本、語(yǔ)音、圖像、視頻多種模態(tài)。 ![]() 圖片來自:Elasticsearch 官方文檔 相信你到這里,應(yīng)該理解了向量檢索和多模態(tài)。沒有向量化的這個(gè)過程,多模態(tài)檢索無從談起。 5.2 模型是核心深度學(xué)習(xí)模型集成總共可分為三步:
關(guān)于深度學(xué)習(xí),可以是自訓(xùn)練模型,也可以是第三方模型庫(kù)中的模型,舉例:咱們圖搜圖案例中就是用的 HuggingFace 里的:clip-ViT-B-32-multilingual-v1 模型。
Elasticsearch 支持的第三方模型列表:
包括如下的 Hugging Face 模型庫(kù)也都是支持的。 圖片來自:HuggingFace 官方文檔模型是Elasticsearch與深度學(xué)習(xí)集成的核心,它能將復(fù)雜的數(shù)據(jù)轉(zhuǎn)化為“指紋”向量,使搜索更高效和智能。借助模型,Elasticsearch可以理解和匹配各種非結(jié)構(gòu)化數(shù)據(jù),如圖像和聲音,提供更為準(zhǔn)確和個(gè)性化的搜索結(jié)果,同時(shí)適應(yīng)不斷變化的數(shù)據(jù)和需求。“沒有了模型,我們還需要黑暗中摸索很久”。 第三方模型官網(wǎng)介紹:https://www./guide/en/machine-learning/8.9/ml-nlp-model-ref.html#ml-nlp-model-ref-text-embedding 值得一提的是:Elasticsearch 導(dǎo)入大模型需要專屬 Python 客戶端工具 Eland。 Eland是一個(gè) Python Elasticsearch客戶端,讓用戶能用類似Pandas的API來探索和分析Elasticsearch中的數(shù)據(jù),還支持從常見機(jī)器學(xué)習(xí)庫(kù)上傳訓(xùn)練好的模型到Elasticsearch。 Eland是為了與Elasticsearch協(xié)同工作而開發(fā)的庫(kù)。它不是Elasticsearch的一個(gè)特定版本產(chǎn)物,而是作為一個(gè)獨(dú)立的項(xiàng)目來幫助Python開發(fā)者更方便地在Elasticsearch中進(jìn)行數(shù)據(jù)探索和機(jī)器學(xué)習(xí)任務(wù)。 Eland 更多參見: https://www./guide/en/elasticsearch/client/eland/current/index.html https://github.com/elastic/eland 5.3 ESRE 是 Elastic 的未來前一段時(shí)間在分別給兩位阿里云、騰訊云大佬聊天的時(shí)候,都提到了 Elasticsearch Relevance Engine (ESRE) 才是 Elastic 未來。 ESRE 官方介紹如下:——Elasticsearch Relevance Engine 將 AI 的最佳實(shí)踐與 Elastic 的文本搜索進(jìn)行了結(jié)合。ESRE 為開發(fā)人員提供了一整套成熟的檢索算法,并能夠與大型語(yǔ)言模型 (LLM) 集成。借助ESRE,我們可以應(yīng)用具有卓越相關(guān)性的開箱即用型語(yǔ)義搜索,與外部大型語(yǔ)言模型集成,實(shí)現(xiàn)混合搜索,并使用第三方或我們自己的模型。 ESRE 集成了高級(jí)相關(guān)性排序如 BM25f、強(qiáng)大的矢量數(shù)據(jù)庫(kù)、自然語(yǔ)言處理技術(shù)、與第三方模型如 GPT-3 和 GPT-4 的集成,并支持開發(fā)者自定義模型與應(yīng)用。其特點(diǎn)在于提供深度的語(yǔ)義搜索,與專業(yè)領(lǐng)域的數(shù)據(jù)整合,以及無縫的生成式 AI 整合,讓開發(fā)者能夠構(gòu)建更吸引人、更準(zhǔn)確的搜索體驗(yàn)。 在 Elasticsearch 8.9 版本上新了:Semantic search 語(yǔ)義檢索功能,對(duì)官方文檔熟悉的同學(xué),你會(huì)發(fā)現(xiàn)如下截圖內(nèi)容,早期版本是沒有的。 ![]() https://www./guide/en/elasticsearch/reference/8.9/semantic-search.html 語(yǔ)義搜索不是根據(jù)搜索詞進(jìn)行字面匹配,而是根據(jù)搜索查詢的意圖和上下文含義來檢索結(jié)果。 更進(jìn)一步講:語(yǔ)義搜索不僅僅是匹配你輸入的關(guān)鍵字,而是試圖理解你的真正意圖,給你帶來更準(zhǔn)確、更有上下文的搜索結(jié)果。簡(jiǎn)單來說,如果你在英國(guó)搜索“football”,系統(tǒng)知道你可能想要搜橄欖球,而不是足球(在美國(guó) football 是足球)。 這種智能搜索方式,得益于強(qiáng)大的文本向量化等技術(shù)背景,使我們的在線搜索體驗(yàn)更加直觀、方便和滿意。 為了更清楚的解釋由向量檢索實(shí)現(xiàn)的文本檢索——語(yǔ)義檢索,這里給個(gè)動(dòng)畫演示一下。
其實(shí)這里轉(zhuǎn)換為向量檢索,fast 和 speed 語(yǔ)義相近,should be 和 required、needs 語(yǔ)義相近,internet 和 connection、wifi 語(yǔ)義相近。所以依然能召回結(jié)果。 這突破了傳統(tǒng)同義詞的限制,體現(xiàn)了語(yǔ)義檢索的妙處! 更進(jìn)一步,我們給出語(yǔ)義檢索和傳統(tǒng)分詞檢索的區(qū)別,以期望大家更好的理解語(yǔ)義搜索。
總體而言,深度學(xué)習(xí)集成已經(jīng)成為Elasticsearch向量檢索能力的有力補(bǔ)充,促使它在搜索和分析領(lǐng)域的地位更加牢固,同時(shí)也為未來的發(fā)展提供了廣闊的空間。 6.小結(jié)Elasticsearch 的向量檢索從最初的簡(jiǎn)單實(shí)現(xiàn)發(fā)展到現(xiàn)在的高效、多功能解決方案,反映了現(xiàn)代搜索和推薦系統(tǒng)的需求和挑戰(zhàn)。隨著技術(shù)的不斷演進(jìn),我們可以期待Elasticsearch在向量檢索方面將繼續(xù)推動(dòng)創(chuàng)新和卓越。 說一下最近的感觸,向量檢索、大模型等新技術(shù)的出現(xiàn)有種感覺“學(xué)不完,根本學(xué)不完”,并且很容易限于“皮毛論”(我自創(chuàng)的詞)——所有技術(shù)都了解一點(diǎn)點(diǎn),但經(jīng)不起提問;淺了說,貌似啥都懂,深了說,一問三不知。 這種情況怎么辦?我目前的方法是:以實(shí)踐為目的去深入理解理論,必要時(shí)理解算法,然后不定期將所看、所思、所想梳理成文,以備忘和知識(shí)體系化。這個(gè)過程很慢、很累,但我相信時(shí)間越長(zhǎng)、價(jià)值越大。 歡迎大家就向量檢索等問題進(jìn)行留言討論交流,你的問題很可能就是下一次文章的主題哦! 7、參考1、https://www./cn/blog/text-similarity-search-with-vectors-in-elasticsearch 2、https://www./guide/en/elasticsearch/reference/7.3/query-dsl-script-score-query.html#vector-functions-cosine 3、https://zhuanlan.zhihu.com/p/552249981 4、https://www./cn/what-is/elasticsearch-machine-learning 5、https://www./cn/enterprise-search/generative-ai 6、https://www./cn/blog/may-2023-launch-announcement 7、https://www./blog/2022/10/most-frequently-asked-interview-questions-on-knn-algorithm/ 8、https://www./guide/en/elasticsearch/reference/current/knn-search.html 9、https://www./cn/blog/how-to-deploy-nlp-text-embeddings-and-vector-search 10、https://www./cn/blog/privacy-first-ai-search-langchain-elasticsearch 11、https://www./watch?v=W_ZUUDJsUtA |
|
|