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