Elasticsearch 現在默認啟用 BBQ,并通過 ACORN 實現過濾向量搜索

作者:來自 Elastic?Gilad Gal

探索 Elasticsearch 的向量搜索如何以更快的速度、更低的成本提供更優結果。

試用向量搜索:使用這套自定進度的 Search AI 實操學習課程,親自體驗向量搜索。你可以開始免費云試用,或立即在本地機器上試用 Elastic。


在由 AI 驅動的搜索世界里,有三件事最重要:查詢速度排序準確性,以及實現這些所需的資源成本。在 Elastic,我們持續在這三個方面突破極限。我很高興分享 Elasticsearch 9.1 中的兩項密集向量搜索新進展:一項名為 ACORN 的新算法,用于更快的過濾向量搜索;以及新證據表明,我們默認的量化方法 BBQ 不僅能降低成本,還可以提升排序質量。

ACORN:更智能的過濾搜索路徑

現實世界的搜索很少是簡單的“幫我找類似這個的東西”。它常常是 “幫我找尺碼合適的類似產品” 或 “幫我找和上個季度類似的文檔”。即使是避開已刪除文檔,也是一種過濾,因此實際中,過濾搜索非常常見。

讓過濾向量搜索既快速又不損失準確性,是一個深層的技術挑戰。 HNSW 算法基于圖搜索,圖中的節點表示向量。圖是在索引時構建的,而不是查詢時構建的。當支持預過濾時,為了得到準確結果(就像 Elasticsearch 所做的那樣),最直接的方法是在圖中遍歷,只收集通過過濾的節點。問題在于,這種方法仍然會評估未通過過濾的節點,以便繼續搜索它們的鄰居和整個圖,導致搜索變慢。當過濾條件較嚴格,大多數文檔不通過過濾時,這個問題尤其明顯。之前我們已有部分解決方案,但我們認為可以做得更好。

我們選擇使用 ACORN-1(ANN Constraint-Optimized Retrieval Network),這是一篇 2024 年學術論文中描述的新算法,用于執行過濾 k 近鄰(kNN)搜索。 ACORN 通過將過濾過程直接集成到 HNSW 圖遍歷中實現這一目標。使用 ACORN-1 時,只評估通過過濾的節點,但為了避免遺漏相關部分,會同時評估二級鄰居(即鄰居的鄰居),前提是它們也通過過濾。 Elasticsearch 使用的 Lucene 實現中還包含一些啟發式方法,進一步優化結果(詳見博客)。

在選擇具體算法和實現時,我們還探索了其他理論上可能進一步優化延遲的替代方案,但決定不采用它們,因為這些方法要求用戶在索引前聲明用于過濾的字段。而我們重視在文檔導入后仍可靈活定義過濾字段的能力,因為現實中的索引是不斷演變的。潛在的輕微性能提升不足以抵消靈活性喪失,我們也可以通過其他手段獲得性能,例如 BBQ(見下文)。

結果是性能的大幅提升。我們測得典型加速為 5 倍,在某些高選擇性過濾下提升更大。這對復雜的現實查詢是一項巨大增強。要使用 ACORN-1,只需在 Elasticsearch 中執行過濾向量查詢即可。

BBQ:更優排序的意外超能力

降低向量的內存占用對于構建可擴展、具成本效益的 AI 系統至關重要。我們的 Better Binary Quantization( BBQ )方法通過將高維 float 向量壓縮約 32 倍來實現這一目標。我們之前在 Search Labs 博客中已經討論過, BBQ 在召回率、延遲和成本方面優于諸如 Product Quantization 的其他技術:

  • Better Binary Quantization( BBQ )在 Lucene 和 Elasticsearch 中的應用

  • 如何將 Better Binary Quantization( BBQ )應用于你的使用場景,以及為什么要這么做

  • Better Binary Quantization( BBQ ) vs. Product Quantization

不過,直觀的假設是,這種極大幅度、有損壓縮必然會犧牲排序質量。然而我們近期的大規模基準測試顯示,通過擴大圖遍歷范圍并重新排序,我們完全可以彌補這一點,不僅在成本和性能上實現提升,還能提高相關性排序的質量。

BBQ 不僅僅是壓縮技巧;它是一個復雜的兩階段搜索過程:

  • 廣泛掃描:首先,使用體積極小的壓縮向量快速掃描數據集,識別出一組排名靠前的文檔。該集合的大小超過用戶請求的前 N 個結果(即超采樣)。

  • 精確重排:然后,從初始掃描中選出頂級候選項,使用它們原始的高精度 float32 向量進行重排,確定最終順序。

這種超采樣加重排的過程是一種強大的校正機制,常常能發現純 float32 HNSW 搜索在其較有限圖遍歷中可能遺漏的高相關結果

排序結果證明一切

為了衡量效果,我們使用了 NDCG@10(歸一化折扣累計增益@10),這是一項評估前 10 條搜索結果質量的標準指標。 NDCG 分數越高,說明相關性更高的文檔排名越靠前。你可以在我們的排序評估 API 文檔中了解更多信息。

我們在 BEIR 數據集中的 10 個公開數據集上運行了多項基準測試,比較了傳統 BM25 搜索、使用 e5-small 模型的向量搜索( float32 向量),以及同一模型結合 BBQ 的向量搜索。我們選擇 e5-small,是因為根據之前的基準測試, BBQ 在高維向量上表現最佳,而我們希望在其挑戰較大的場景下測試 BBQ —— 比如 e5-small 生成的低維向量。我們使用 NDCG@10 進行測量,這是一個考慮結果順序的排序質量指標。下面是我們觀察到的結果的代表性示例。

Data setBM25e5-small float32e5-small BBQ with defaults
Climate-FEVER0.1430.19980.2059
DBPedia0.3060.31430.3414
FiQA-20180.2510.30020.3136
Natural Questions0.2920.48990.5251
NFCorpus0.3210.29280.3067
Quora0.8080.85930.8765
SCIDOCS0.1550.13510.1381
SciFact0.6830.65690.677
Touché-20200.3370.20960.2089
TREC-COVID0.6150.71220.7189

結果令人震撼。在 10 個數據集中, BBQ 在其中 9 個的排序質量優于純 float32 搜索。即便在唯一的例外中,差異也可以忽略不計。此外,在這 10 個數據集中, BBQ 是整體表現最好的方法之一,在 6 個數據集中排名第一。順帶一提,最佳排序結果通常是通過將 BM25 與向量查詢結合使用,并融合其他因素如距離、時間和熱度來獲得的,而 Elasticsearch 在這種類型的查詢中表現出色。

有人可能會問: BBQ 是有損壓縮,為什么它的排序會優于 float32?確實,在 BBQ 中我們進行超采樣并用 float32 向量進行重排,但理論上使用 float32 時,我們應該可以直接用 float32 向量為所有文檔排序。那么為什么 BBQ 排序反而更好?

答案在于:在 HNSW 中,我們每個分片只評估一部分向量,這由一個參數 num_candidates 決定。默認情況下,在未使用量化時, num_candidates = 1.5 * k,其中 k 是返回給用戶的結果數量。你可以在這里閱讀我們為確定該默認值所進行的基準測試。

而當我們使用 BBQ 進行量化時,向量比較速度更快,因此我們可以使用更大的 num_candidates,同時還降低了延遲。經過基準測試,我們將 BBQ 的默認 num_candidates 設置為 max(1.5 * k, oversample * k)。

對于上面的基準測試,我們使用默認設置,其中 k = 10,因此 num_candidates 的計算如下:

  • Float32: 1.5*k = 1.5*10 = 15
  • BBQ: max(1.5*k, oversample*k) = max(1.5*10, 3*10) = 30

由于 num_candidates 的不同,使用 BBQ 時我們掃描了更大范圍的 HNSW 圖,并在前 30 個候選中獲得了更優的結果,這些候選隨后由 float32 重排。這也解釋了 BBQ 如何帶來更好的排序質量。你可以根據自己的需求設置 num_candidates(例如見此),或者像大多數用戶一樣,信任我們的基準測試并使用默認值。

這也回答了我曾被咨詢的一個問題:“是用 e5-large 搭配 BBQ 更好,還是用 e5-small 搭配 float32 更好?”答案現在非常明確。使用更強大的模型 e5-large 搭配 BBQ,能夠兼得所有優勢:

  • 更優排序:來自更強大的 e5-large 模型,再通過 BBQ 進一步增強。

  • 更低延遲:得益于極高效率的 BBQ 搜索流程。

  • 更低成本:由于內存縮減 32 倍。

這是一種三贏的局面,證明你無需在質量和成本之間做取舍。

正因為 BBQ 的優勢已經得到驗證,我們在 Elasticsearch 9.1 中將 BBQ 設為默認的量化方法,適用于維度 ≥ 384 的密集向量。我們推薦大多數現代嵌入模型使用該方法,這些模型通常能很好地在向量空間中分布,使其非常適合 BBQ 的方式。

今天就開始吧

ACORN 和 BBQ 的這些進展讓你能夠在 Elastic 上構建更強大、可擴展且具成本效益的 AI 應用。你可以以高速執行復雜的過濾查詢,同時提升排序相關性并大幅降低內存成本。

升級到 Elasticsearch 9.1,享受這些新功能。

  • 在我們的文檔中了解更多關于 kNN 搜索和向量量化的內容。
  • 通過我們的排序評估 API 深入了解排序質量。

我們幫你處理復雜性,讓你專注于打造出色的搜索體驗。祝搜索愉快。

原文:Elasticsearch now with BBQ by default & ACORN for filtered vector search - Elasticsearch Labs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93675.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93675.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93675.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 14 新特性解析與代碼示例

Java 14 新特性解析與代碼示例 文章目錄Java 14 新特性解析與代碼示例1. 開關表達式(Switch Expressions)2. 記錄類型(Records)3. 文本塊(Text Blocks)4. instanceof的模式匹配(Pattern Matchin…

在虛擬機ubuntu上修改framebuffer桌面不能顯示圖像

目錄 一、測試程序 二、排查原因 三、為什么 Xorg 會導致程序無法工作&#xff1f; 一、測試程序 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #in…

語言模型的評估指標整理

語言模型&#xff08;Language Models&#xff09;是自然語言處理&#xff08;NLP&#xff09;的核心組件&#xff0c;廣泛應用于機器翻譯、文本生成、對話系統等領域。隨著模型復雜度的提升&#xff0c;如何科學、系統地評估模型性能變得至關重要。評估指標不僅幫助我們理解模…

【開發技術】.Net中配置Serilog日志分級記錄

目錄 一、目的 二、解決方案 2.1 下載serilog包 2.2 Serilog配置 2.2.1 使用多個File sink配置不同的最小日志級別 2.2.2 使用Filter條件分流到不同文件 三、使用建議 四、文章總結 一、目的 在日常開發中&#xff0c;需要根據不同的場景去記錄日志&#xff0c;根據實際…

聊聊如何判斷發現的缺陷屬于前后端

目錄 一、觀察缺陷現象 二、檢查網絡請求&#xff08;核心方法&#xff09; 三、模擬請求驗證后端 四、查看日志 五、數據流分析 六、判斷前后端缺陷方法 判斷發現的缺陷是前后端&#xff0c;可以通過觀察缺陷現象&#xff0c;檢查網絡請求&#xff0c;查看后端日志&…

Python3與MySQL的PyMySQL連接與應用

Python3與MySQL的PyMySQL連接與應用 引言 隨著互聯網技術的飛速發展,數據庫在各個領域的應用日益廣泛。MySQL作為一種開源的關系型數據庫管理系統,因其穩定性和高效性,被廣泛應用于各種場景。Python作為一種高級編程語言,以其簡潔、易讀、易學等特點,受到了廣大開發者的…

智慧城市SaaS平臺|市政公用管理系統

【道路監測運維系統】1.數據可視化a) 實時監控支持對道路監測數據進行分析評估&#xff0c;為道路養護、交通管理、環境保護等提供數據支撐2.道路基礎設施監測支持對道路基礎設施的運行狀態進行實時監測&#xff0c;包括路面狀況3.交通流量監測支持對道路交通流量進行實時監測&…

Maven 配置阿里云鏡像加速

Maven 配置阿里云鏡像加速&#xff1a; 完整配置步驟&#xff08;Windows 系統&#xff09; 1. 找到 Maven 的 settings.xml 文件 全局配置&#xff1a;D:\software\apache-maven-3.9.11\conf\settings.xml用戶配置&#xff1a;C:\Users\Admin\.m2\settings.xml&#xff08;推薦…

去除視頻字幕 3 : 繼續研究 IOPaint,記錄幾個問題

1. 為什么單獨運行&#xff0c;效果很好&#xff0c;批量運行&#xff0c;效果很差。 1. 我運行 iopaint start --modellama --devicecuda --port8080在瀏覽器中單獨選擇圖片&#xff0c;涂選區域&#xff0c;然后處理&#xff0c;此時的效果非常好。2. 但是我進行 iopaint ru…

【深度之眼機器學習筆記】04-01-決策樹簡介、熵,04-02-條件熵及計算舉例,04-03-信息增益、ID3算法

1. 決策樹與熵 1.1 決策樹簡介 下面有一個貸申請樣本表&#xff0c;有許多特征 我們根據特征數據生成一棵樹&#xff0c;比如年齡有青年&#xff0c;中年&#xff0c;老年三個類別&#xff0c;那么就有三個分支&#xff0c;分別對應著三種類別。如果是青年那么就看工作&#xf…

八股文場景題

如何預估接口上線后的 QPS 問題引入 這個問題其實是一個非常實際的問題&#xff0c;因為我們在開發需求后&#xff0c;例如&#xff1a;新增了一個接口 有一個步驟是值得做的&#xff0c;那就是預估這個接口的QPS 因為我們是可以去調配對應服務器的數量和運行配置的 例如我…

【Web安全】深入淺出理解“SQL注入-偽靜態注入”及空格限制繞過技巧

文章目錄什么是偽靜態注入&#xff1f;偽靜態注入中如何繞過空格限制&#xff1f;1. 用注釋符替代空格2. 用不可見字符&#xff08;URL 編碼&#xff09;替代3. 用括號分隔語句4. 用特殊符號替代核心邏輯往期文章【Web安全】一次性搞懂 ReDOS 漏洞原理/檢測/防御 【Web安全】一…

【讀論文】Step-Audio 2 深度解讀:邁向工業級語音交互的「全能型選手」

引言:step-Audio升級 語音交互技術,作為人機交互最自然、最直接的方式之一,正以前所未有的速度發展。從簡單的語音指令到流暢的語音對話,我們對 AI 的期望越來越高。然而,要讓 AI 真正成為我們的“知心伙伴”,僅僅能“聽懂”和“說出”還遠遠不夠。 一個理想的語音 AI,…

java web 重定向

目錄結構 demo\day20\src\com\demo\service\Dome1.javademo\day20\src\com\demo\service\Dome2.javademo\day20\src\com\demo\service\Dome3.javademo\day20\src\com\demo\service\Dome4.javademo\day20\web\WEB-INF\lib\javax.servlet.jardemo\day20\web\index.jspdemo\day20\…

MySQL(配置)——MariaDB使用

一、簡介 MariaDB 和 MySQL 作為兩個流行的關系型數據庫管理系統&#xff0c;它們的區別可以從多個角度來探討。盡管 MariaDB 最初是 MySQL 的一個分支&#xff0c;但隨著時間的推移&#xff0c;它們逐漸在功能、性能和開發方向上有所不同。MariaDB 是 MySQL 的一個分支&#x…

Web3:賽道劃分與發展趨勢解析

區塊鏈技術現在已經從單一的加密貨幣支付系統發展為涵蓋金融、藝術、組織治理和社區文化的多元生態系統。這次我們將深入解析 DeFi&#xff08;去中心化金融&#xff09;、NFT&#xff08;非同質化代幣&#xff09;、DAO&#xff08;去中心化自治組織&#xff09;與 MEME&#…

LeetCode 283 - 移動零

思路 使用雙指針法&#xff0c;一次遍歷完成原地修改。 慢指針 slow&#xff1a;指向下一個非零元素應該被放置的位置。快指針 fast&#xff1a;遍歷整個數組&#xff0c;尋找非零元素。 當 fast 遇到非零數時&#xff0c;將其值賦給 slow 指向的位置&#xff0c;然后 slow 前進…

8. 網絡層

在復雜的網絡環境中確定一個合適的路徑.1. IP協議1. 基本概念IP協議&#xff1a;提供一種能力(有非常大的概率&#xff0c;做到某事)&#xff0c;把數據報從主機A&#xff0c;跨網絡&#xff0c;送到主機B --> 必須要有方式&#xff0c;標識通信兩端唯一性&#xff01;&…

【通識】線性代數(Linear Algebra)

線性代數被廣泛應用于抽象代數和泛函分析中&#xff1b;通過解析幾何&#xff0c;線性代數能被具體表示&#xff0c;線性代數被泛化為算子理論。而非線性模型被近似為線性模型&#xff0c;應用場景多為自然科學和社會科學。 費馬和笛卡爾的工作&#xff0c;線性代數出現于十七世…

Qt 嵌入式界面優化技術

在嵌入式系統中&#xff0c;界面性能直接影響用戶體驗和系統穩定性。由于嵌入式設備通常資源受限&#xff08;如低性能 CPU、有限內存、小尺寸屏幕&#xff09;&#xff0c;需針對性優化 Qt 界面以實現流暢顯示和高效交互。本文從渲染引擎、資源管理、布局優化到硬件加速&#…