13 種高維向量檢索算法全解析!數據庫頂會 VLDB 2021 論文作者乾貨分享

編者按:

以圖搜圖、商品推薦、社交推薦等社會場景中潛藏了大量非結構化數據,這些數據被工程師們表達爲具有隱式語義的高維向量。爲了更好應對高維向量檢索這一關鍵問題,杭州電子科技大學計算機專業碩士王夢召等人探索並實現了「效率和精度最優權衡的近鄰圖索引」,並在數據庫頂會 VLDB 2021 上發表成果。

作爲連接生產和科研的橋樑,Zilliz 研究團隊一直與學界保持交流、洞察領域前沿。此次,王夢召來到 Z 星,從研究動機、算法分析、實驗觀測和優化討論等維度展開講講最新的科研成果。

以下是他的乾貨分享,點擊這裏可獲得論文全文

高維數據檢索:基於近鄰圖的近似最近鄰搜索算法實驗綜述

導言

向量檢索是很多 AI 應用必不可少的基礎模塊。近年來,學術界和工業界提出了很多優秀的基於近鄰圖的ANNS 算法以及相關優化,以應對高維向量的檢索問題。但是針對這些算法,目前缺乏統一的實驗評估和比較分析。

爲了優化算法設計、進一步落地工業應用,我們完成了論文《A Comprehensive Survey and Experimental Comparison of Graph-Based Approximate Nearest Neighbor Search》。該論文聚焦實現了效率和精度最優權衡的近鄰圖索引,綜述了 13 種具有代表性相關算法,實驗在豐富的真實世界數據集上執行。我們的貢獻可總結如下:

根據圖索引的特徵,我們將基於近鄰圖的 ANNS 算法劃分爲四類,這給理解現存算法提供了一個新的視角。在此基礎上,我們闡述了算法間的繼承和發展關係,從而梳理出算法的發展脈絡;

我們分解所有算法爲 7 個統一的細粒度組件,它們構成一個完整的算法執行流程,從而實現了算法的原子級分析。我們可以公平評估當前工作在某一組件的優化通過控制其它組件一致;

我們採用多樣的數據集(包括 8 個真實世界數據集,它們包括視頻、語音、文本和圖像生成的高維向量)和指標評估當前算法的全面性能;

我們提供了不同場景下最優算法推薦、算法優化指導、算法改進示例、研究趨勢和挑戰的分析討論。

研究動機

根據以下觀測,我們對 13 種基於近鄰圖的 ANNS 算法進行了比較分析和實驗綜述:

目前,學術界和工業界提出 10 餘種常見的近鄰圖算法,但對於這些算法的合理分類和比較分析較爲缺乏。根據我們的研究,這些算法的索引結構可歸結爲 4 種基礎的圖結構,但這些圖存在着非常多的問題,如複雜度太高等。所以,在這 4 種圖結構基礎上有多種優化,如對相對鄰域圖(RNG)優化就包含 HNSW、DPG、NGT、NSG、SPTAG 等算法。

很多現有的論文從“分子”角度評估基於近鄰圖的 ANNS 算法(宏觀角度)。然而,我們發現,這些算法有一個統一的“化學表達式”,它們還可再向下細分爲“原子”(微觀角度),從“原子”角度分析可以產生一些新發現,比如很多算法都會用到某一“原子”(HNSW,NSG,KGraph,DPG的路由是相同的)。

除了搜索效率和精度的權衡之外,基於近鄰圖的 ANNS 算法的其它特徵(包含在索引構建和搜索中)也間接影響了最終的搜索性能。在搜索性能逐漸達到瓶頸的情況下,我們對於索引構建效率、內存消耗等指標給予了重視。

一個算法的優越性並不是一成不變的,數據集的特徵在其中起着至關重要的作用。比如,在 Msong(語音生成的向量數據集)上NSG 的加速是 HNSW 的 125 倍;然而,在 Crawl(文本生成的向量數據集)上 HNSW 的加速是 NSG 的 80 倍。我們在多樣的數據集上執行實驗評估,從而對算法形成更全面的認識。

近鄰圖算法“分子”級分析

在分析基於近鄰圖的 ANNS 算法之前,首先給大家介紹下 4 個經典的圖結構,即:德勞內圖(DG)、相對領域圖(RNG)、K 近鄰圖(KNNG)、最小生成樹(MST)。如圖1所示,這四種圖結構的差異主要體現在選邊過程,簡單總結如下:DG 確保任意 3 個頂點 x, y, z 形成的三角形 xyz 的外接圓內部及圓上不能有除了 x, y, z 之外的其它頂點;RNG 要確保(b)中月牙形區域內不能有其它點,這裏的月牙形區域是分別以x和y爲圓心,x 與 y 之間的距離爲半徑的兩個圓的交集區域;KNNG 每個頂點連接 K 個最近的鄰居;MST 在保證聯通性的情況下所有邊的長度(對應兩個頂點的距離)之和最小。

圖1 四種圖結構在相同的數據集上的構建結果

接下來,我將基於圖1 中的 4 個圖結構來梳理 13 個基於近鄰圖的ANNS算法。爲了避免翻譯造成了理解偏差,算法名使用英文簡稱,算法的原論文鏈接、部分高質量的中文介紹、部分代碼請見參考資料。各算法之間更宏觀的聯繫可參考論文中的表2 和圖3。

算法1:NSW

NSW 是對 DG 的近似,而 DG 能確保從任意一個頂點出發通過貪婪路由獲取精確的結果(即召回率爲 1 )。NSW 是一個類似於“交通樞紐”的無向圖,這會導致某些頂點的出度激增,從論文的表11 可知,NSW 在某些數據集上的最大出度可達幾十萬。NSW 通過增量插入式的構建,這確保了全局連通性,論文表4 中可知,NSW的連通分量數均爲1。NSW 具有小世界導航性質:在構建早期,形成的邊距離較遠,像是一條“高速公路”,這將提升搜索的效率;在構建後期,形成的邊距離較近,這將確保搜索的精度。

原文:https://www.sciencedirect.com/science/article/abs/pii/S0306437913001300

中文介紹:https://blog.csdn.net/u011233351/article/details/85116719

代碼:https://github.com/kakao/n2

算法2:HNSW

HNSW 在 NSW 的基礎上有兩個優化:“層次化”和“選邊策略”。層次化的實現較爲直觀:不同距離範圍的邊通過層次呈現,這樣可以在搜索時形成類似於跳錶結構,效率更高。選邊策略的優化原理是:如果要給某個頂點連接 K 個鄰居的話,NSW 選擇 K 個距離最近的,而 HNSW 從大於 K 個最近的頂點裏面選出更離散分佈的鄰居(見參考資料1)。因此,從選邊策略考慮,HNSW 是對 DG 和 RNG 的近似。

原文:https://ieeexplore.ieee.org/abstract/document/8594636

中文介紹:https://blog.csdn.net/u011233351/article/details/85116719

代碼:https://github.com/kakao/n2

算法3:FANNG

FANNG 的選邊策略與 HNSW 是一樣的,都是對RNG近似。FANNG 比 HNSW 更早提出,不過當前 HNSW 得到更普遍的應用,可能的原因是:

(1)FANNG 的選邊策略是在暴力構建的近鄰圖的基礎上實現的,構建效率很低;

(2)HNSW 通過增量式構建且引入分層策略,構建和搜索效率都很高;

(3)HNSW 開源了代碼,FANNG 則沒有。

原文:https://www.cv-foundation.org/openaccess/content_cvpr_2016/html/Harwood_FANNG_Fast_Approximate_CVPR_2016_paper.html

算法4:NGT

NGT 是雅虎日本開源的向量檢索庫,核心算法基於近鄰圖索引。NGT 在構建近鄰圖時類似於 NSW,也是對 DG 的近似,後續有一些度調整優化,其中最有效的路徑優化也是對 RNG 的近似(論文的附件B 也給出了證明)。

原文1:https://link.springer.com/chapter/10.1007/978-3-319-46759-7_2

原文2:https://arxiv.org/abs/1810.07355

代碼:https://github.com/yahoojapan/NGT

算法5:SPTAG

SPTAG 是微軟發佈的向量檢索庫,它的構建過程基於分治策略,即迭代地劃分數據集,然後在每個子集上構建近鄰圖,接着歸併子圖,最後通過鄰域傳播策略進一步優化近鄰圖。上述過程旨在構建一個儘可能精確的 KNNG。在搜索時,SPTAG 採用樹索引和圖索引交替執行的方案,即先從樹上獲取距查詢較近的點作爲在圖上搜索的起始點執行路由,當陷入局部最優時繼續從樹索引上獲取入口點,重複上述操作直至滿足終止條件。

原文1:https://dl.acm.org/doi/abs/10.1145/2393347.2393378

原文2:https://ieeexplore.ieee.org/abstract/document/6247790

原文3:https://ieeexplore.ieee.org/abstract/document/6549106

中文介紹1:https://blog.csdn.net/whenever5225/article/details/108013045

中文介紹2:https://cloud.tencent.com/developer/article/1429751

代碼:https://github.com/microsoft/SPTAG

代碼使用:https://blog.csdn.net/qq_40250862/article/details/95000703

算法6:KGraph

KGraph 是對 KNNG 的近似,是一種面向一般度量空間的近鄰圖構建方案。基於鄰居的鄰居更可能是鄰居的思想,KGraph 能夠快速構建一個高精度的 KNNG。後續的很多算法(比如 EFANNA、DPG、NSG、NSSG)都是在該算法的基礎上的進一步優化。

原文:https://dl.acm.org/doi/abs/10.1145/1963405.1963487

中文介紹:https://blog.csdn.net/whenever5225/article/details/105598694

代碼:https://github.com/aaalgo/kgraph

算法7:EFANNA

EFANNA 是基於 KGraph 的優化。兩者的差別主要體現在近鄰圖的初始化:KGraph 是隨機初始化一個近鄰圖,而 EFANNA 是通過 KD 樹初始化一個更精確的近鄰圖。此外,在搜索時,EFANNA 通過 KD 樹獲取入口點,而 KGraph 隨機獲取入口點。

原文:https://arxiv.org/abs/1609.07228

中文介紹:https://blog.csdn.net/whenever5225/article/details/104527500

代碼:https://github.com/ZJULearning/ssg

算法8:IEH

類比 EFANNA,IEH 暴力構建了一個精確的近鄰圖。在搜索時,它通過哈希表獲取入口點。

原文:https://ieeexplore.ieee.org/abstract/document/6734715/

算法9:DPG

在 KGraph 的基礎上,DPG 考慮頂點的鄰居分佈多樣性,避免彼此之間非常接近的鄰居重複與目標頂點連邊,最大化鄰居之間的夾角,論文的附件4 證明了 DPG 的選邊策略也是對 RNG 的近似。此外,DPG 最終添加了反向邊,是無向圖,因此它的最大出度也是非常高的(見論文附件表11)。

原文:https://ieeexplore.ieee.org/abstract/document/8681160

中文介紹:https://blog.csdn.net/whenever5225/article/details/106176175

代碼:https://github.com/DBW

算法10:NSG

NSG 的設計思路與 DPG 幾乎是一樣的。在 KGraph 的基礎上,NSG 通過 MRNG 的選邊策略考慮鄰居分佈的均勻性。NSG 的論文中將 MRNG 的選邊策略與 HNSW 的選邊策略做了對比,例證了 MRNG 的優越性。論文中的附件1 證明了NSG的這種選邊策略與 HNSW 選邊策略的等價性。NSG 的入口點是固定的,是與全局質心最近的頂點。此外,NSG 通過 DFS 的方式強制從入口點至其它所有點都是可達的。

原文:http://www.vldb.org/pvldb/vol12/p461-fu.pdf

中文介紹:https://zhuanlan.zhihu.com/p/50143204

代碼:https://github.com/ZJULearning/nsg

算法11:NSSG

NSSG 的設計思路與 NSG、DPG 幾乎是一樣的。在 KGraph 的基礎上,NSSG 通過 SSG 選邊策略考慮鄰居分佈的多樣性。NSSG 認爲,NSG 過度裁邊了(見論文表4),相比之下 SSG 的裁邊要鬆弛一些。NSG 與 NSSG 另一個重要的差異是,NSG 通過貪婪路由獲取候選鄰居,而 NSSG 通過鄰居的一階擴展獲取候選鄰居,因此,NSSG 的構建效率更高。

原文:https://ieeexplore.ieee.org/abstract/document/9383170

中文介紹:https://zhuanlan.zhihu.com/p/100716181

代碼:https://github.com/ZJULearning/ssg

算法12:Vamana

簡單來說,Vamana 是 KGraph、HNSW 和 NSG 三者的結合優化。在選邊策略上,Vamana 在 HNSW (或 NSG)的基礎上增加了一個調節參數,選邊策略爲 HNSW 的啓發式選邊,取不同的值執行了兩遍選邊。

原文:http://harsha-simhadri.org/pubs/DiskANN19.pdf

中文介紹:https://blog.csdn.net/whenever5225/article/details/106863674

算法13:HCNNG

HCNNG 是目前爲止唯一一個以 MST 爲基本構圖策略的向量檢索算法。類似SPTAG,HCNNG 的構建過程基於分治策略,在搜索時通過 KD 樹獲取入口點。

原文:https://www.sciencedirect.com/science/article/abs/pii/S0031320319302730

中文介紹:https://whenever5225.github.io/2019/08/17/HCNNG/

近鄰圖算法“原子”級分析 我們發現所有的基於近鄰圖的 ANNS 算法都遵循統一的處理流程框架,該流程裏面有多個公共模塊(如圖2 的 C1->C7)。當一個近鄰圖算法按照該流程被解構後,我們可以很容易瞭解該算法是如何設計組裝的,這將給後續近鄰圖向量檢索算法的設計帶來很大的便利性。此外,我們也可固定其它模塊,保持其他模塊完全相同,從而更公平地評估不同算法在某一模塊實現上的性能差異。

圖2 近鄰圖向量檢索算法遵循的統一流程框架圖

接下來,我們以 HNSW 和 NSG 爲例,說明如何實現圖2 的流程框架分析算法。在此之前,我們要先熟悉這兩個算法的索引構建和搜索過程。

首先是 HNSW 分解,HNSW 的構建策略是增量式的。因此,每插入一個數據點都要執行一遍 C1->C3 過程。

HNSW 分解流程:

模塊 HNSW 具體實現
C1 生成新插入點所處的最大層;獲取搜索入口點
C2 新插入點作爲查詢點,從入口點開始,貪婪搜索,返回新插入點一定量最近鄰作爲鄰居候選
C3 啓發式選邊策略
C4 無額外步驟,最高層中的頂點作爲入口
C5 無額外步驟,增量式構建已隱式確保連通性(啓發式選邊有一定程度破壞連通性)
C6 最高層的頂點作爲入口
C7 最佳優先搜索

NSG 分解流程:

模塊 NSG 具體實現
C1 NN-Descent 初始化近鄰圖
C2 頂點作爲查詢,貪婪搜索獲取鄰居候選
C3 MRNG 選邊策略
C4 全局質心作爲查詢,貪婪搜索獲取最近頂點作爲入口
C5 從入口開始,DFS 確保連通性
C6 C4 獲取的入口
C7 最佳優先搜索

由於 HNSW 的 C3 與 NSG 的 C3 是等價的,因此,從上面兩個表格可知,HNSW 與 NSG 這兩個算法差別並不大。其實,論文涉及到的 13 種算法中很多算法之間都是很相似的,詳見論文第 4 章。

實驗觀測和討論

具體的實驗評估請參考論文第 5 章,接下來將概括介紹一下實驗的觀測結果和討論:

不同場景下的算法推薦

NSG 和 NSSG 普遍有最小的索引構建時間和索引尺寸,因此,它們適用於有大量數據頻繁更新的場景;如果我們想要快速構建一個精確的 KNNG(不僅用於向量檢索),KGraph、EFANNA 和 DPG 更適合;DPG 和 HCNNG 有最小的平均搜索路徑長度,因此,它們適合需要 I/O 的場景;對於 LID 值高的較難數據集,HNSW、NSG、HCNNG 比較適合;對於 LID 值低的簡單數據集,DPG、NSG、HCNNG 和 NSSG 較爲適合;NGT 有更小的候選集尺寸,因此適用於 GPU 加速(考慮到 GPU 的內存限制);當對內存消耗要求較高時,NSG 和 NSSG 適合,因爲它們內存佔用更小。

算法設計嚮導

一個實用的近鄰圖向量檢索算法一般滿足以下四個方面:

  • 高構建效率

  • 高路由效率

  • 高搜索精度

  • 低內存負載

針對第一方面,我們不要在提升近鄰圖索引質量(即一個頂點的鄰居中真實的最近鄰居所佔的比例)上花費太多的時間。因爲最好的圖質量(可通過圖中與距它最近的頂點有邊相連的頂點所佔比例度量)不一定實現最佳搜索性能(結合論文中表4 和圖7、8)。

針對第二方面,我們應當控制適當的平均出度,多樣化鄰居的分佈,減少獲取入口點的花費,優化路由策略,從而減少收斂到查詢點的鄰域所需的距離計算次數。

針對第三方面,我們應當合理設計鄰居的分佈,確保連通性,從而提升對陷入局部最優的"抵抗力"。

針對第四方面,我們應當優化鄰居選擇策略和路由策略,從而減小出度和候選集尺寸。

優化算法示例

基於上面的嚮導,我們組裝了一個新的近鄰圖算法(圖3 中的 OA),該算法在圖2 中的 7 個組件中每個組件選中現存算法的一個具體實現,即 C1 採用 KGraph 算法的實現;C2 採用 NSSG 算法的實現;C3 採用 NSG 算法的實現;C4 採用 DPG 算法的實現;C5 採用 NSSG 算法的實現;C6 採用 DPG 算法的實現;C7 採用 HCNNG 和 NSW 算法的實現。

OA 算法實現了當前最優的綜合性能,詳見論文原文。因此,我們甚至不用優化當前算法,僅僅把現存算法的不同部分組裝起來就可以形成一個新算法。

圖3 OA 算法與當前最優的近鄰圖算法的搜索性能對比

趨勢與挑戰

基於 RNG 的選邊策略設計在當前近鄰圖向量檢索算法的效率提升中起到了關鍵作用。在論文的評估中,唯一一個基於 MST 的算法 HCNNG 也表現出來很好的綜合性能。

在上述純近鄰圖算法基礎上,後續發展有三個主要方向:

  • 硬件優化;
  • 機器學習優化;
  • 更高級的查詢需求,比如結構化和非結構化混合查詢。

我們未來面對這三個挑戰:

  • 數據編碼技術與圖索引如何有機結合以解決近鄰圖向量檢索算法高內存消耗問題;
  • 硬件加速近鄰圖索引構建減少近鄰圖索引構建時間;
  • 根據不同場景的特徵自適應選擇最優的近鄰圖算法。

參考資料

https://blog.csdn.net/whenever5225/article/details/106061653?spm=1001.2014.3001.5501

關於作者:

王夢召,杭州電子科技大學計算機專業碩士。主要關注基於近鄰圖的向量相似性檢索、多模態檢索等研究內容,並在相關方向申請發明專利三項,在數據庫頂會 VLDB 和 SCI 一區 top 期刊 KBS 等發表論文兩篇。

日常愛好彈吉他、打乒乓球、跑步、看書,他的個人網站是 http://mzwang.top,Github主頁是 http://github.com/whenever5225


Arch Meetup 深圳站開始報名啦,點擊查看活動議程!

GitHub @Milvus-io|CSDN @Zilliz Planet|Bilibili @Zilliz-Planet

Zilliz 以重新定義數據科學爲願景,致力於打造一家全球領先的開源技術創新公司,並通過開源和雲原生解決方案爲企業解鎖非結構化數據的隱藏價值。

Zilliz 構建了 Milvus 向量數據庫,以加快下一代數據平臺的發展。Milvus 數據庫是 LF AI & Data 基金會的畢業項目,能夠管理大量非結構化數據集,在新藥發現、推薦系統、聊天機器人等方面具有廣泛的應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章