电竞比分网-中国电竞赛事及体育赛事平台

分享

干貨 | 詳述 Elasticsearch 向量檢索發(fā)展史

 銘毅天下 2023-08-07 發(fā)布于廣東

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)在:

  • (1)個(gè)性化推薦:通過余弦相似度分析用戶的行為和興趣,提供更個(gè)性化的推薦內(nèi)容;

  • (2)圖像識(shí)別和搜索:使用歐幾里得距離快速檢索與給定圖像相似的圖像;

  • (3)聲音分析:在聲音文件之間尋找相似模式,用于語(yǔ)音識(shí)別和分析。

值得一提的是:初始的時(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í)模型集成總共可分為三步:

  • 第一步:模型導(dǎo)入和管理:Elasticsearch 8.x 支持導(dǎo)入預(yù)訓(xùn)練的深度學(xué)習(xí)模型,并提供相應(yīng)的模型管理工具,方便模型的部署和更新。

  • 第二步:向量表示與轉(zhuǎn)換:通過深度學(xué)習(xí)模型,可以將非結(jié)構(gòu)化數(shù)據(jù)如圖像和聲音轉(zhuǎn)換為向量表示,從而進(jìn)行有效的檢索。

  • 第三步:自定義相似度計(jì)算:8.x 版本提供了基于深度學(xué)習(xí)模型的自定義相似度計(jì)算接口,允許用戶根據(jù)實(shí)際需求開發(fā)和部署專門的相似度計(jì)算方法。

關(guān)于深度學(xué)習(xí),可以是自訓(xùn)練模型,也可以是第三方模型庫(kù)中的模型,舉例:咱們圖搜圖案例中就是用的 HuggingFace 里的:clip-ViT-B-32-multilingual-v1 模型。

Elasticsearch 支持的第三方模型列表:

名稱模型釋義
BERT雙向Transformer模型
BART序列到序列模型
DPR bi-encoders雙向編碼器檢索模型
DistilBERT輕量化BERT
ELECTRA對(duì)抗性預(yù)訓(xùn)練模型
MobileBERT針對(duì)移動(dòng)設(shè)備的BERT
RoBERTa優(yōu)化版BERT
RetriBERT檢索-focused BERT
MPNet混合并行網(wǎng)絡(luò)
SentenceTransformers bi-encoders句子轉(zhuǎn)換雙向編碼器
XLM-RoBERTa多語(yǔ)言版RoBERTa

包括如下的 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)畫演示一下。

動(dòng)畫來自:Elasticsearch 官方文檔
  • 視頻剛開始,在文本里檢索 connection speed requirement, 這點(diǎn)屬于早期的倒排索引檢索方式,或者叫全文檢索中的短語(yǔ) match_phrase 檢索匹配 或者分詞 match 檢索匹配。這種可以得到結(jié)果。
  • 但是,中后半段視頻顯示,要是咱們要檢索:“How fast should my internet be” 怎么辦?

其實(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ǔ)義搜索。

項(xiàng)目語(yǔ)義搜索傳統(tǒng)分詞搜索
核心技術(shù)基于矢量搜索,機(jī)器學(xué)習(xí)和人工智能基于文本匹配和查詢擴(kuò)展
搜索目的理解查詢的深層意義和上下文直接匹配關(guān)鍵詞或擴(kuò)展的詞匯
處理上下文能夠根據(jù)搜索者的地理位置、搜索歷史等信息調(diào)整結(jié)果通常不考慮這些額外的上下文信息
搜索結(jié)果的相關(guān)性根據(jù)查詢的意圖和上下文排名結(jié)果主要基于關(guān)鍵詞的頻率和位置匹配
處理同義詞和多義詞能夠理解詞語(yǔ)在不同上下文中的意義,并據(jù)此返回結(jié)果通常使用同義詞表或詞匯擴(kuò)展工具,可能不總是理解上下文中的真正意義
對(duì)查詢的理解能夠區(qū)分如“chocolate milk”和“milk chocolate”這樣的查詢,即使關(guān)鍵詞順序或形式相同可能只是簡(jiǎn)單地匹配關(guān)鍵詞,而不理解它們的真正意思
學(xué)習(xí)和適應(yīng)能力通過機(jī)器學(xué)習(xí)不斷改進(jìn),根據(jù)用戶的反饋和行為適應(yīng)通?;诠潭ǖ乃惴ê鸵?guī)則,沒有持續(xù)學(xué)習(xí)和適應(yīng)的能力
用戶體驗(yàn)提供更準(zhǔn)確和有上下文的結(jié)果,從而提高用戶滿意度依賴于用戶精確輸入,可能返回與用戶實(shí)際意圖不匹配的結(jié)果

總體而言,深度學(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

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章