向量數(shù)據(jù)庫(kù)和 Embedding 是當(dāng)前 AI 領(lǐng)域的熱門(mén)話題。
Pinecone 是一家向量數(shù)據(jù)庫(kù)公司,剛剛以約 10 億美元的估值籌集了 1 億美元。
Shopify、Brex、Hubspot 等公司都在他們的 AI 應(yīng)用程序中使用向量數(shù)據(jù)庫(kù)和 Embedding。那么,它們究竟是什么,它們是如何工作的,以及為什么它們?cè)?AI 中如此重要呢?讓我們一探究竟。
我們先看第一個(gè)問(wèn)題,什么是 Embedding?你可能在 Twitter 上已經(jīng)看到這個(gè)詞被無(wú)數(shù)次提及。
簡(jiǎn)單來(lái)說(shuō),Embedding 就是一個(gè)多維向量數(shù)組,由系列數(shù)字組成 。它們能夠代表任何東西,比如文本、音樂(lè)、視頻等等。我們這里將主要關(guān)注文本。
創(chuàng)建 Embedding 的過(guò)程非常簡(jiǎn)單。這主要依靠 Embedding 模型(例如:OpenAI 的 Ada)。
你將你的文本發(fā)送給模型,模型會(huì)為你生成該數(shù)據(jù)的向量結(jié)果,這可以被存儲(chǔ)并在之后使用。
Embedding 之所以重要,是因?yàn)?strong>它們賦予我們進(jìn)行語(yǔ)義搜索的能力 ,也就是通過(guò)相似性進(jìn)行搜索,比如通過(guò)文本的含義。
因此,在這個(gè)例子中,我們可以在一個(gè)向量空間上表示“男人”、“國(guó)王”、“女人”和“王后”,你可以非常容易地看到它們?cè)谙蛄靠臻g之間的關(guān)系。
來(lái)看一個(gè)更直觀的例子:
假設(shè)你是一個(gè)有一大箱玩具的小孩。現(xiàn)在,你想找出一些類(lèi)似的玩具,比如一個(gè)玩具汽車(chē)和一個(gè)玩具巴士。它們都是交通工具,因此它們是相似的。
這就是所謂的 “語(yǔ)義相似性”—— 表示*某種程度上** 事物具有*相似的含義或想法 。
現(xiàn)在假設(shè)你有兩個(gè)相關(guān)聯(lián)但并不完全相同的玩具,比如一個(gè)玩具汽車(chē)和一個(gè)玩具公路。它們并不完全相同,但因?yàn)槠?chē)通常在公路上行駛,所以它們是相互關(guān)聯(lián)的。
那么,Embedding 為何如此重要呢?主要是由于大語(yǔ)言模型(LLM)存在上下文限制 。在一個(gè)理想的世界中,我們可以在一個(gè) LLM 提示中放入無(wú)限數(shù)量的詞語(yǔ)。但是,正如許多人所知,目前我們還做不到。以 OpenAI 的 GPT 為例,它限制在大約在 4096 - 32k 個(gè) token。
因此,由于其 “內(nèi)存”(即我們可以填充到其 token 的詞語(yǔ)的數(shù)量),我們與 LLM 的交互方式受到了嚴(yán)重限制。這就是為什么你不能將一個(gè) PDF 文件復(fù)制粘貼到 ChatGPT 中并要求它進(jìn)行總結(jié)的原因。(當(dāng)然,現(xiàn)在由于有了 gpt4-32k,你可能可以做到這一點(diǎn)了)
那么,怎么把 Embedding 和 LLM 關(guān)聯(lián)起來(lái)解決 token 長(zhǎng)度限制的問(wèn)題呢?實(shí)際上,我們可以利用 Embedding,只將相關(guān)的文本注入到 LLM 的上下文窗口中。
讓我們來(lái)看一個(gè)具體的例子:
假設(shè)你有一個(gè)龐大的 PDF 文件,可能是一份國(guó)會(huì)聽(tīng)證會(huì)的記錄(呵呵)。你有點(diǎn)懶,不想閱讀整個(gè)文件,而且由于其頁(yè)數(shù)眾多,你無(wú)法復(fù)制粘貼整個(gè)內(nèi)容。這就是一個(gè) Embedding 的典型使用場(chǎng)景。
所以你將 PDF 的文本內(nèi)容先分成塊,然后借助 Embedding 將文本塊變成向量數(shù)組,并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。
在存儲(chǔ)分塊的向量數(shù)組時(shí),通常還需要把向量數(shù)組和文本塊之間的關(guān)系一起存儲(chǔ),這樣后面我們按照向量檢索出相似的向量數(shù)組后,能找出對(duì)應(yīng)的文本塊,一個(gè)參考的數(shù)據(jù)結(jié)構(gòu)類(lèi)似于這樣:
{ [1,2,3,34]:'文本塊1', [2,3,4,56]:'文本塊2', [4,5,8,23]:'文本塊3', …… }
現(xiàn)在你提出一個(gè)問(wèn)題:“他們對(duì) xyz 說(shuō)了什么”。我們先把問(wèn)題“他們對(duì) xyz 說(shuō)了什么?”借助 Embedding 變成向量數(shù)組,比如[1,2,3]。
現(xiàn)在我們有兩個(gè)向量:你的問(wèn)題 [1,2,3] 和 PDF [1,2,3,34],然后,我們利用相似性搜索,將問(wèn)題向量與我們龐大的 PDF 向量進(jìn)行比較。OpenAI 的 Embedding 推薦使用的是余弦相似度。
好了,現(xiàn)在我們有最相關(guān)的三個(gè) Embedding 及其文本,我們現(xiàn)在可以利用這三個(gè)輸出,并配合一些提示工程將其輸入到 LLM 中。例如:
已知我們有上下文:文本塊 1,文本塊 2,文本塊 3。
現(xiàn)在有用戶的問(wèn)題:他們對(duì) xyz 說(shuō)了什么?
請(qǐng)根據(jù)給定的上下文,如實(shí)回答用戶的問(wèn)題。
如果你不能回答,那么如實(shí)告訴用戶“我無(wú)法回答這個(gè)問(wèn)題”。
就這樣,LLM 會(huì)從你的 PDF 中獲取相關(guān)的文本部分,然后嘗試如實(shí)回答你的問(wèn)題。
這就簡(jiǎn)單的闡述了 Embedding 和 LLM 如何為任何形式的數(shù)據(jù)提供相當(dāng)強(qiáng)大的類(lèi)似聊天的能力。這也是所有那些“與你的網(wǎng)站/PDF/等等進(jìn)行對(duì)話” 的功能如何工作的!
請(qǐng)注意 Embedding 并非 FINE-TUNING。
來(lái)源:twitter-thread.com/t/ZH/ 1655626066331938818
審核編輯:劉清
-
ChatGPT
+關(guān)注
關(guān)注
29文章
1564瀏覽量
7865
原文標(biāo)題:向量數(shù)據(jù)庫(kù)是如何工作的?
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論