作為技術人員我想大家或多或少應該都接觸過數(shù)據(jù)庫技術,數(shù)據(jù)庫技術的歷史可以說是由來已久了;但數(shù)據(jù)庫的發(fā)展也是一路曲折,特別是隨著互聯(lián)網體量的快速增加,對數(shù)據(jù)庫的要求也變得越來越多。
而且為了適應各種不同的業(yè)務場景,數(shù)據(jù)庫系統(tǒng)也是緊跟潮流發(fā)展出多種類型的數(shù)據(jù)庫;比如說傳統(tǒng)的關系型數(shù)據(jù)庫,緩存數(shù)據(jù)庫,以及大數(shù)據(jù)處理的數(shù)據(jù)庫;直到今天的向量數(shù)據(jù)庫。
關系型和緩存數(shù)據(jù)庫就不用說了,今天我們就來聊聊向量數(shù)據(jù)庫系統(tǒng)。
向量數(shù)據(jù)庫,顧名思義就是以向量結構為主體的數(shù)據(jù)庫;同樣具備傳統(tǒng)數(shù)據(jù)庫的CRUD等功能。
但是,因為是以向量為主,而不是以傳統(tǒng)的字符匹配為主;因此,向量數(shù)據(jù)庫在使用的過程中就面臨著很多之前沒遇到的問題。
現(xiàn)如今向量數(shù)據(jù)庫主要應用于與人工智能特別是大模型相關的技術領域,比如RAG技術,就是嚴重依賴于向量數(shù)據(jù)庫。當然,向量數(shù)據(jù)庫的應用場景遠不止RAG一家,比如還有推薦系統(tǒng),圖像識別等多種不同的領域。
向量數(shù)據(jù)庫相對于傳統(tǒng)數(shù)據(jù)庫的優(yōu)點在于,其可以通過對不同模態(tài)數(shù)據(jù)的向量化,計算數(shù)據(jù)之間的向量關系,以此來描述不同數(shù)據(jù)之間的“語義”相關性。
也就是說,向量數(shù)據(jù)庫主要描述的不是字符之間的確定關系,而是從語義的角度來描述數(shù)據(jù)關系。而計算這種關系的算法叫做相似度計算,具體的有歐式距離,余弦相似度等算法。
因此,向量數(shù)據(jù)庫有兩個重點,一個是數(shù)據(jù)向量化;二是向量相似度計算。在大模型技術領域,數(shù)據(jù)向量化也叫做嵌入,需要使用專門的嵌入模型對數(shù)據(jù)進行向量化處理。
對向量數(shù)據(jù)庫來說,數(shù)據(jù)向量化解決的是數(shù)據(jù)從那來的問題,而向量相似度計算解決的是相似度搜索問題,也就是數(shù)據(jù)該怎么使用的問題。
數(shù)據(jù)向量化,也就是嵌入模型需要加載數(shù)據(jù),并對數(shù)據(jù)進行切分,分詞等操作;最后再進行向量化處理,也就是把不同模態(tài)的數(shù)據(jù)統(tǒng)一轉化成向量的格式。
至于相似度搜索問題,就是把你需要搜索的數(shù)據(jù)同樣轉化為向量格式,然后向量數(shù)據(jù)庫引擎,把你的搜索向量與數(shù)據(jù)庫中存在的向量進行匹配,這個就是相似度計算,也就做度量計算;比如歐式距離,余弦相似度,內積等。最后計算得到的結果就是搜索結果。
向量數(shù)據(jù)庫的搜索問題與傳統(tǒng)數(shù)據(jù)庫的查詢沒有本質上的不同,區(qū)別就是傳統(tǒng)數(shù)據(jù)庫使用的是字符匹配的方式;而向量數(shù)據(jù)庫使用的是相似度計算的方式。
但這里有一個問題就是,由于向量相似度需要大量的運算才能獲得結果;因此,在面對大量向量數(shù)據(jù)時,搜索性能與搜索結果的準確性就需要做一個權衡。
還有一點就是,不同于傳統(tǒng)的字符匹配的方式,一就是一,二就是二;向量相似度搜索是基于相似度計算得到的相似值;而不是絕對值,因此就存在搜索結果的不確定性。
比如說,在具體的實踐過程中,在一個向量化的四大名著之西游記的向量數(shù)據(jù)庫中;輸入林黛玉進行檢索竟然可以檢索到相似數(shù)據(jù);而這在具體的應用場景中是不可接受的。
之所以能在西游記中搜索到與林黛玉有關的內容,原因就在于這個相似度計算;因為林黛玉是女的,西游記中也是女的;可能西游記和紅樓夢中部分關于女性的描述,在向量層面是相似的,也就是相似度計算的值比較接近,最終才導致這種結果。
這就是向量相似度搜索的不確定性,但又很難完全避免;畢竟前面也說了,效率與準確率總要犧牲一個。
所以,基于向量數(shù)據(jù)庫的檢索結果,還需要在結果出來之后做一層到多層到數(shù)據(jù)篩選,才有可能完全獲取想要的結果。