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