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