RAG:七種用于向量數(shù)據(jù)庫(kù)+相似性搜索的索引方法 原創(chuàng)
01、概述
在現(xiàn)代數(shù)據(jù)庫(kù)類型中,盡管關(guān)系型數(shù)據(jù)庫(kù)(Relational DB)、NoSQL數(shù)據(jù)庫(kù)和圖數(shù)據(jù)庫(kù)(Graph DB)各有千秋,但在RAG(Retrieval-Augmented Generation)系統(tǒng)中,Vector DB卻成為首選。它不僅支持水平擴(kuò)展,還能結(jié)合CRUD操作(Create, Read, Update, Delete)提供元數(shù)據(jù)過濾功能,大幅提升數(shù)據(jù)檢索效率和智能性。
本文將帶你全面解析Vector DB,從基礎(chǔ)概念、工作原理到查詢加速的核心算法,幫助你更好地理解其強(qiáng)大功能及在RAG管道中的不可替代性。
02、為什么選擇Vector DB?
在一個(gè)包含1000份文檔的RAG系統(tǒng)中,假設(shè)我們將文檔分塊并嵌入到向量空間,生成三維向量,存儲(chǔ)詞條如“dog”“cat”“ball”。當(dāng)用戶查詢“horse”時(shí),傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)只能檢索精確匹配的記錄,而Vector DB通過近似最近鄰搜索(Approximate Nearest Neighbour, ANN),能夠返回“donkey”這一語(yǔ)義上最相似的記錄。
這種語(yǔ)義匹配能力使得Vector DB在知識(shí)增強(qiáng)生成(RAG)系統(tǒng)中脫穎而出。無論是回答簡(jiǎn)單查詢,還是在高維向量空間中發(fā)現(xiàn)隱藏的語(yǔ)義關(guān)聯(lián),Vector DB的性能和靈活性都遠(yuǎn)勝其他類型數(shù)據(jù)庫(kù)。
03、Vector DB與其他數(shù)據(jù)庫(kù)對(duì)比
主要數(shù)據(jù)庫(kù)類型及其應(yīng)用場(chǎng)景
與其他數(shù)據(jù)庫(kù)相比,Vector DB最大的特點(diǎn)是能以高效方式存儲(chǔ)和檢索高維向量。它不僅僅是數(shù)據(jù)存儲(chǔ)工具,更是支持語(yǔ)義推理和智能查詢的基礎(chǔ)設(shè)施。
04、Vector DB的核心工作原理
Vector DB的關(guān)鍵在于存儲(chǔ)和高效檢索高維向量,其主要流程包括:
- 索引構(gòu)建(Indexing)
- 查詢處理(Querying)
- 后處理(Post-Processing)
以下將重點(diǎn)介紹索引構(gòu)建中的關(guān)鍵算法,以及如何通過查詢和相似性度量加速檢索過程。
05、索引構(gòu)建:加速查詢的核心算法
索引是Vector DB性能的基石。良好的索引設(shè)計(jì)可在保證查詢精度的前提下,大幅提升檢索速度。以下是幾種常見索引構(gòu)建算法:
1) Flat Index(全量比較)
Flat Index采用暴力搜索方法,將每個(gè)查詢點(diǎn)與數(shù)據(jù)庫(kù)中的所有向量逐一比較,返回與查詢點(diǎn)最接近的k個(gè)向量。
- 優(yōu)點(diǎn):精度最高,適合對(duì)查詢結(jié)果要求極高的場(chǎng)景。
- 缺點(diǎn):速度慢,尤其在高維數(shù)據(jù)和大規(guī)模數(shù)據(jù)集上。
2) 局部敏感哈希(Local Sensitivity Hashing, LSH)
LSH通過哈希函數(shù)將相似的高維向量分組至相同的哈希桶中,只需在對(duì)應(yīng)桶內(nèi)搜索即可。
- 特點(diǎn):適合處理包含大量相似向量的大型數(shù)據(jù)集。
- 挑戰(zhàn):哈希函數(shù)和桶大小的選擇直接影響性能。
3) 層次化小世界圖(Hierarchical Navigable Small World, HNSW)
HNSW是一種基于圖結(jié)構(gòu)的算法,分層存儲(chǔ)向量數(shù)據(jù)。每一層的節(jié)點(diǎn)通過邊相連,邊的權(quán)重表示相似性。
- 工作原理:查詢時(shí)從頂層隨機(jī)節(jié)點(diǎn)開始,逐層向下搜索相似節(jié)點(diǎn),最終在底層找到最相似的向量。
- 優(yōu)勢(shì):高效處理大規(guī)模數(shù)據(jù),查詢速度快。
4) 倒排文件索引(Inverted File Indexing, IVF)
IVF通過聚類算法將向量劃分為多個(gè)簇,并構(gòu)建簇的索引。查詢時(shí)僅需在相關(guān)簇中進(jìn)行搜索。
- 特點(diǎn):通過控制簇的數(shù)量(nprobes)權(quán)衡精度與速度。
- 應(yīng)用:適合中等規(guī)模數(shù)據(jù)集的快速查詢。
5) 產(chǎn)品量化(Product Quantization, PQ)
PQ將高維向量分割為多個(gè)子向量,每個(gè)子向量通過k-means算法聚類,并存儲(chǔ)其代表性質(zhì)心。
- 優(yōu)點(diǎn):顯著減少存儲(chǔ)需求,同時(shí)保持相似性信息。
- 適用場(chǎng)景:需要在存儲(chǔ)和性能之間尋求平衡的應(yīng)用。
6) Spotify的ANNOY算法
ANNOY通過遞歸分割向量空間構(gòu)建層次化索引,查詢時(shí)沿層次結(jié)構(gòu)搜索直到葉節(jié)點(diǎn)。
- 特點(diǎn):輕量、高效,特別適合小型數(shù)據(jù)集或?qū)崟r(shí)場(chǎng)景。
7) 隨機(jī)投影(Random Projection)
隨機(jī)投影通過隨機(jī)矩陣將高維向量映射到低維空間,保留向量間的相似性關(guān)系。
- 優(yōu)點(diǎn):大幅減少維度,同時(shí)保留查詢的準(zhǔn)確性。
- 應(yīng)用:適合維度極高的數(shù)據(jù)集。
06、查詢與相似性度量
查詢的核心是衡量向量間的相似性,以下是常見的相似性度量方式:
- 點(diǎn)積(Dot Product):衡量?jī)蓚€(gè)向量間的點(diǎn)積值,適合高維空間的相似性計(jì)算。
- 余弦相似度(Cosine Similarity):計(jì)算向量間夾角的余弦值,范圍從-1到1。
- 歐幾里得距離(Euclidean Distance):計(jì)算兩向量間的直線距離,用于衡量絕對(duì)相似性。
07、總結(jié)與展望
Vector DB在RAG管道中的核心作用在于通過高效的索引與查詢算法,支持語(yǔ)義相似性檢索,彌補(bǔ)傳統(tǒng)數(shù)據(jù)庫(kù)在智能性上的不足。從Flat Index到HNSW,每種算法各有優(yōu)劣,可根據(jù)具體應(yīng)用場(chǎng)景選擇合適的方案。
參考:
本文轉(zhuǎn)載自公眾號(hào)Halo咯咯 作者:基咯咯
原文鏈接:??https://mp.weixin.qq.com/s/hGdzMGqw168a8S8gCSNtzA??
