隨著大語(yǔ)言模型的興起,向量數(shù)據(jù)庫(kù)正愈發(fā)受到人們的關(guān)注。作為對(duì)向量數(shù)據(jù)庫(kù)的一名小白,近期簡(jiǎn)單對(duì)這一新技術(shù)方向做了些了解,特分享給大家。
1. 大火的向量數(shù)據(jù)庫(kù)
1)什么是向量
在數(shù)學(xué)中,向量是有大小和方向的量,可以使用帶箭頭的線段表示,箭頭指向即為向量的方向,線段的長(zhǎng)度表示向量的大小。兩個(gè)向量的距離或者相似性可以通過(guò)歐式距離、余弦距離等得到。
圖片
2)什么是向量數(shù)據(jù)
向量數(shù)據(jù)是一種數(shù)學(xué)表示,用一組(多個(gè)維度)有序的數(shù)值表示一個(gè)對(duì)象或數(shù)據(jù)點(diǎn)。在向量數(shù)據(jù)中,每個(gè)維度代表了向量的一個(gè)特征或?qū)傩?。例如,如果考慮一個(gè)二維向量數(shù)據(jù)集,每個(gè)向量可以表示平面上的一個(gè)點(diǎn),其中第一個(gè)維度表示橫坐標(biāo),第二個(gè)維度表示縱坐標(biāo)。實(shí)際只要維度夠多,就能夠?qū)⑺惺挛锒紖^(qū)分開(kāi)來(lái),世間萬(wàn)物都可以用一個(gè)多維坐標(biāo)系來(lái)表示,它們都在一個(gè)高維的特征空間中對(duì)應(yīng)著一個(gè)坐標(biāo)點(diǎn)。在生活中,向量數(shù)據(jù)在各種領(lǐng)域中得到廣泛應(yīng)用,特別是在機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘和模式識(shí)別等領(lǐng)域。它可以表示各種類型的數(shù)據(jù),如圖像、音頻、文本、用戶行為、傳感器數(shù)據(jù)等。
圖片
簡(jiǎn)而言之,向量表示是一種將非結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)換為嵌入向量的技術(shù),通過(guò)多維度向量數(shù)值表述某個(gè)對(duì)象或事物的屬性或者特征。通過(guò)嵌入技術(shù),任何圖像、聲音、文本都可以被表達(dá)為一個(gè)高維的向量。
3)什么是向量數(shù)據(jù)庫(kù)
圖片
如果鍵值、文檔、圖數(shù)據(jù)一樣,向量數(shù)據(jù)也需要一種專門的載體來(lái)承擔(dān)。向量數(shù)據(jù)庫(kù)是一種專門用于存儲(chǔ)、管理和搜索向量數(shù)據(jù)的數(shù)據(jù)庫(kù)。它以向量的形式存儲(chǔ)數(shù)據(jù),其中向量是抽象實(shí)體(如圖像、音頻文件、文本等)的數(shù)學(xué)表示;并支持使用專門的算法來(lái)支持向量數(shù)據(jù)搜索和分析。與傳統(tǒng)數(shù)據(jù)庫(kù)相比,向量數(shù)據(jù)庫(kù)使用向量化計(jì)算,能夠高速地處理大規(guī)模的復(fù)雜數(shù)據(jù);并可以處理高維數(shù)據(jù),例如圖像、音頻和視頻等,解決傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中的痛點(diǎn)。
4)向量數(shù)據(jù)庫(kù)技術(shù)特點(diǎn)
向量數(shù)據(jù)庫(kù),具有如下核心特點(diǎn):
- 向量表示向量數(shù)據(jù)庫(kù)將復(fù)雜的數(shù)據(jù)類型轉(zhuǎn)換為向量表示,使得高維數(shù)據(jù)能夠以多維空間中的點(diǎn)的形式表示。向量數(shù)據(jù)庫(kù)采用嵌入向量(embedding vector)技術(shù),對(duì)非結(jié)構(gòu)化數(shù)據(jù)(包括文本、圖片、視頻、音頻等)進(jìn)行特征抽象。數(shù)學(xué)上,嵌入向量是一個(gè)浮點(diǎn)數(shù)或二進(jìn)制數(shù)的數(shù)組,即 N 維特征向量空間中的向量。
- 向量檢索向量數(shù)據(jù)庫(kù)擅長(zhǎng)在海量數(shù)據(jù)中根據(jù)向量表示搜索與給定查詢相似的數(shù)據(jù)項(xiàng)。為了提高效率,向量庫(kù)支持使用如歐氏距離、余弦相似度或曼哈頓距離等相似性度量來(lái)確定多維空間中數(shù)據(jù)點(diǎn)之間的接近程度,從而找到最相關(guān)和最相似的結(jié)果。
- 海量規(guī)模向量數(shù)據(jù)庫(kù)被設(shè)計(jì)成能夠處理大規(guī)模的數(shù)據(jù)集,并且在數(shù)據(jù)集大小增長(zhǎng)時(shí)能夠保持高搜索精度和響應(yīng)時(shí)間。此外,它們通常提供并行處理和分布式計(jì)算的機(jī)制,以滿足不斷增長(zhǎng)的數(shù)據(jù)需求。
- AI 支持隨著人工智能和機(jī)器學(xué)習(xí)應(yīng)用的迅速增長(zhǎng),向量數(shù)據(jù)庫(kù)的采用也在增加。將復(fù)雜數(shù)據(jù)轉(zhuǎn)換為向量表示可以與這些算法無(wú)縫集成,從而獲得規(guī)?;挠袃r(jià)值洞見(jiàn)和預(yù)測(cè)。
5)為什么向量數(shù)據(jù)庫(kù)大火
向量數(shù)據(jù)之前已經(jīng)得到廣泛應(yīng)用,包括:推薦系統(tǒng)、圖像檢索、自然語(yǔ)言處理、人臉識(shí)別和圖像搜索、音頻識(shí)別、實(shí)時(shí)數(shù)據(jù)分析、物聯(lián)網(wǎng)以及生物信息學(xué)等諸多場(chǎng)景。ChatGPT的橫空出世,帶動(dòng)了新一波生成式AI的投資浪潮,也帶火了向量數(shù)據(jù)庫(kù)。2023年3月, 英偉達(dá)CEO黃仁勛首次提及向量數(shù)據(jù)庫(kù),強(qiáng)調(diào)了向量數(shù)據(jù)庫(kù)對(duì)于構(gòu)建專有大模型的重要性,也催生了一波投資浪潮。
2. 向量數(shù)據(jù)庫(kù)生態(tài)及發(fā)展
1)產(chǎn)品路線:專有化 vs 插件化
目前,市場(chǎng)上的涌現(xiàn)出一批向量數(shù)據(jù)庫(kù)。技術(shù)原理上,一種是關(guān)系型數(shù)據(jù)庫(kù)或NoSQL數(shù)據(jù)庫(kù),增加向量嵌入存儲(chǔ),但它們最初都沒(méi)有設(shè)計(jì)用于存儲(chǔ)和提供這種類型的數(shù)據(jù)。例如最為常見(jiàn)的pgvector插件,可以通過(guò)嵌入方式在PostgreSQL 數(shù)據(jù)支持存儲(chǔ)和使用。另一種是原生的向量數(shù)據(jù)庫(kù),即在誕生之初就定位為專項(xiàng)數(shù)據(jù)庫(kù)產(chǎn)品。Milvus 是一個(gè)于 2019 年首次發(fā)布的開(kāi)源矢量數(shù)據(jù)庫(kù)。
圖片
那上述兩種路線未來(lái)發(fā)展如何呢?一種觀點(diǎn)認(rèn)為向量數(shù)據(jù)庫(kù)的核心技術(shù)核心向量索引技術(shù)成熟,進(jìn)入壁壘低,因此市場(chǎng)認(rèn)為向量數(shù)據(jù)庫(kù)核心技術(shù)缺少壁壘,傳統(tǒng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)向量搜索功能簡(jiǎn)單,將替代向量數(shù)據(jù)庫(kù)滿足大部分市場(chǎng)需求,專業(yè)向量數(shù)據(jù)庫(kù)將被“傳統(tǒng)向量數(shù)據(jù)庫(kù)”取代。另一種觀點(diǎn)認(rèn)為,專業(yè)的向量數(shù)據(jù)庫(kù)仍具有不可替代性,其在檢索性能、數(shù)據(jù)規(guī)模、接口豐富度、性價(jià)比等方面具有一定優(yōu)勢(shì)。個(gè)人認(rèn)為,從長(zhǎng)期角度來(lái)看,上述兩種路線都具有存在意義,雙方也都有各自所長(zhǎng)及適應(yīng)場(chǎng)景。特別是近年來(lái),向量數(shù)據(jù)庫(kù)也在不斷向傳統(tǒng)數(shù)據(jù)庫(kù)學(xué)習(xí),進(jìn)而滿足AI場(chǎng)景化在通用性、穩(wěn)定性等方面的要求。
2)資本如何看待向量庫(kù)發(fā)展
從近期的融資來(lái)看,資本角度非??春眠@一領(lǐng)域(如下圖)。向量數(shù)據(jù)庫(kù)正在被定義為一種“AI 基礎(chǔ)設(shè)施”。從市場(chǎng)空間來(lái)看,AI技術(shù)的發(fā)展將推動(dòng)向量數(shù)據(jù)應(yīng)用與存儲(chǔ)需求加速增長(zhǎng):一方面隨著AI應(yīng)用場(chǎng)景不斷豐富,向量數(shù)據(jù)庫(kù)的下游客戶數(shù)量隨著AI發(fā)展而飛速增長(zhǎng);另一方面AIGC正推動(dòng)著非結(jié)構(gòu)化數(shù)據(jù)應(yīng)用飛速增長(zhǎng),AIGC帶來(lái)了跨模態(tài)數(shù)據(jù)分析的需求浪潮,只有向量數(shù)據(jù)庫(kù)才能實(shí)時(shí)快速地處理這些海量的向量數(shù)據(jù)。
圖片
3. 向量數(shù)據(jù)庫(kù)實(shí)踐:pgvector
在所有現(xiàn)有向量數(shù)據(jù)庫(kù)中,pgvector 是一個(gè)獨(dú)特的存在 —— 它選擇了在現(xiàn)有的世界上最強(qiáng)大的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù) PostgreSQL 上以插件的形式添磚加瓦,而不是另起爐灶做成另一個(gè)專用的"數(shù)據(jù)庫(kù)" 。目前很多 PostgreSQL 生態(tài)產(chǎn)品和云產(chǎn)品,都推出了對(duì) pgvector 的支持。
圖片
1)pgvector 特點(diǎn)
pgvector 是一個(gè)基于 PostgreSQL 的擴(kuò)展,為用戶提供了一套強(qiáng)大的功能,用于高效地存儲(chǔ)、查詢和處理向量數(shù)據(jù)。它具有以下特點(diǎn):
- 直接集成:pgvector 可以作為擴(kuò)展直接添加到現(xiàn)有的 PostgreSQL 環(huán)境中,方便新用戶和長(zhǎng)期用戶獲得矢量數(shù)據(jù)庫(kù)的好處,無(wú)需進(jìn)行重大系統(tǒng)更改。
- 支持多種距離度量:pgvector 內(nèi)置支持多種距離度量,包括歐幾里德距離、余弦距離和曼哈頓距離。這樣的多功能性使得可以根據(jù)具體應(yīng)用需求進(jìn)行高度定制的基于相似性的搜索和分析。
- 索引支持:pgvector 擴(kuò)展為矢量數(shù)據(jù)提供高效的索引選項(xiàng),例如 k-最近鄰 (k-NN) 搜索。即使數(shù)據(jù)集大小增長(zhǎng),用戶也可以實(shí)現(xiàn)快速查詢執(zhí)行,并保持較高的搜索準(zhǔn)確性。
- 易于查詢語(yǔ)言訪問(wèn):作為 PostgreSQL 的擴(kuò)展,pgvector 使用熟悉的 SQL 查詢語(yǔ)法進(jìn)行向量操作。這簡(jiǎn)化了具有 SQL 知識(shí)和經(jīng)驗(yàn)的用戶使用矢量數(shù)據(jù)庫(kù)的過(guò)程,并避免了學(xué)習(xí)新的語(yǔ)言或系統(tǒng)。
- 積極的開(kāi)發(fā)和支持:pgvector 經(jīng)常更新,以確保與最新的 PostgreSQL 版本和功能兼容,并且開(kāi)發(fā)者社區(qū)致力于增強(qiáng)其功能。用戶可以期待一個(gè)受到良好支持的解決方案,滿足其矢量數(shù)據(jù)的需求。
- 穩(wěn)健性和安全性:通過(guò)與 PostgreSQL 的集成,pgvector 繼承了相同級(jí)別的穩(wěn)健性和安全性功能,使用戶能夠安全地存儲(chǔ)和管理其矢量數(shù)據(jù)。
2)pgvector 計(jì)算
在 pgvector 中,可以使用各種查詢運(yùn)算符對(duì)向量數(shù)據(jù)進(jìn)行不同的操作。這些運(yùn)算符主要用于計(jì)算向量之間的相似度或距離,其中一些運(yùn)算符使用不同的距離度量。以下是一些常用的 pgvector 查詢運(yùn)算符:
- <->:該運(yùn)算符計(jì)算兩個(gè)向量之間的歐幾里德距離。歐幾里德距離是多維空間中向量表示的點(diǎn)之間的直線距離。較小的歐幾里德距離表示向量之間的相似性較大,因此該運(yùn)算符在查找和排序相似項(xiàng)目時(shí)非常有用。
- <=>:該運(yùn)算符計(jì)算兩個(gè)向量之間的余弦相似度。余弦相似度比較兩個(gè)向量的方向而不是它們的大小。余弦相似度的范圍在 -1 到 1 之間,1 表示向量相同,0 表示無(wú)關(guān),-1 表示向量指向相反方向。
- <#>:該運(yùn)算符計(jì)算兩個(gè)向量之間的曼哈頓距離(也稱為 L1 距離或城市街區(qū)距離)。曼哈頓距離是每個(gè)維度對(duì)應(yīng)坐標(biāo)差的絕對(duì)值之和。相對(duì)于歐幾里德距離而言,曼哈頓距離更加強(qiáng)調(diào)沿著維度的較小移動(dòng)。
在選擇適當(dāng)?shù)倪\(yùn)算符時(shí),您應(yīng)該考慮您的應(yīng)用需求和數(shù)據(jù)特性。這可能涉及保持相對(duì)距離、強(qiáng)調(diào)大小或方向以及關(guān)注特定維度等因素。請(qǐng)注意,根據(jù)您的數(shù)據(jù)和用例,運(yùn)算符的選擇可能會(huì)對(duì)搜索結(jié)果的質(zhì)量以及最終應(yīng)用程序的有效性產(chǎn)生重大影響。
3)pgvector 索引
pgvector 提供了 ivfflat 算法以近似搜索,它的工作原理是將相似的向量聚類為區(qū)域,并建立一個(gè)倒排索引,將每個(gè)區(qū)域映射到其向量。這使得查詢可以集中在數(shù)據(jù)的一個(gè)子集上,從而實(shí)現(xiàn)快速搜索。通過(guò)調(diào)整列表和探針參數(shù),ivfflat 可以平衡數(shù)據(jù)集的速度和準(zhǔn)確性,使 PostgreSQL 有能力對(duì)復(fù)雜數(shù)據(jù)進(jìn)行快速的語(yǔ)義相似性搜索。通過(guò)簡(jiǎn)單的查詢,應(yīng)用程序可以在數(shù)百萬(wàn)個(gè)高維向量中找到與查詢向量最近的鄰居。對(duì)于自然語(yǔ)言處理、信息檢索等,ivfflat 是一個(gè)比較好的解決方案。
4)pgvector 實(shí)踐
下面構(gòu)建一個(gè)測(cè)例,在 PostgreSQL 中使用 pgvector 插件測(cè)試對(duì)向量數(shù)據(jù)的檢索。向量數(shù)據(jù)集采用公開(kāi)的國(guó)內(nèi)省市位置數(shù)據(jù),將經(jīng)緯度作為向量維度存儲(chǔ)。通過(guò)歐幾里德距離計(jì)算向量數(shù)據(jù)間距離(即城市間距離)。
圖片
圖片