向量資料庫和嵌入是當前 AI 中的熱門話題。
向量資料庫公司 Pinecone 剛剛以約 10 億美元的估值籌集了 100 百萬美元。
Shopify、Brex、Hubspot 和其他公司將它們用於他們的 AI 應用程式
但它們是什麼,它們如何工作以及為什麼它們在 AI 中如此重要?
首先,什麼是向量嵌入?
簡單的解釋是:
嵌入只是數字的 N 維向量。它們可以代表任何東西,文本、音樂、視頻等。我們將專注於文本。
創建嵌入的過程很簡單。它涉及一個嵌入模型(例如:來自 Openai 的 Ada)。
將文本發送到模型,它會為您創建該數據的向量表示,可以存儲並在以後使用。
向量資料庫很重要的原因是,它們賦予了我們語義搜索的能力,也就是通過相似性進行搜索。就像通過文本的含義。
在這個例子中,我們可以在向量平面上建模一個男人、國王、女人和皇后,並非常容易地看到他們彼此之間的關係。
這是一個更直接的例子: 想像你是一個孩子,手裡拿著一大盒玩具。現在您想找到類似的玩具,例如玩具車和玩具巴士。 它們都是車輛,所以它們很相似。
這就是所謂的 “語義相似性”。 - 當事物具有相似的含義 / 想法時。
現在假設有兩個相關但不相同的玩具。就像玩具車和玩具路。它們不一樣,但確實屬於同一類,因為汽車通常在路上行駛。
那麼,為什麼它們如此重要?嗯,這是因為 LLM 的上下文限制。
在理想情況下,我們可以將無限數量的單詞放入 LLM 提示中。但我們做不到。現在它限制在~4096 - 32k Token。
由於 LLM 的 “記憶”,也就是我們可以在其 Token 限制中容納多少單詞,因此我們嚴格限制了如何與 LLM 進行交互。
這就是為什麼不能將 PDF 複製粘貼到 chatGPT 並要求它對其進行總結。 (也許你現在可以使用 gpt4-32k)
現在這一切最終是如何拼湊起來的?我們可以利用向量嵌入來將相關文本注入到 LLM 上下文窗口中。 讓我們看一個例子:
假設您有一個巨大的 PDF,也許是國會聽證會之一(呵呵) 而且你很懶惰,所以你不想閱讀整篇文章,而且你無法粘貼整篇文章,因為它有十億頁長。
你首先獲取 PDF,創建向量嵌入 (vector embedding),並將其存儲在資料庫中。 現在你問一個問題,“他們對 xyz 說了什麼” 。首先:創建一個你問題的 embedding:“他們對 xyz 說了什麼”
現在我們有兩個向量:你的問題 [1,2,3] 和 pdf [1,2,3,34] 然後我們使用相似性搜索將問題向量與我們的巨型 PDF 向量進行比較。 openai 推薦的是餘弦相似度。
現在我們有: 3 個最相關的 Embedding 和文本。我們現在可以使用 3 的輸出,並通過一些 prompt Engineering 將其餵給 LLM。
最常見的是:根據上下文,如實回答用戶問題。如果做不到,那就說 “我無法回答這個問題”,就是這樣!LLM 從 PDF 中提取相關文本塊並嘗試如實回答問題。
這是對 Embedding 和 LLM 如何為任何形式的數據提供類似聊天功能的基本解釋。這也是所有那些 “chat with your site/pdf/blah blah” 的工作方式!這並不是微調,只是一個營銷術語。
Embedding 是數據的 n 維向量表示,無論是文本、圖片、音頻、視頻都可以做 Embedding。
chatfile 類產品主要用的是文本 Embedding
做法:
1)把 PDF 切分成小的文本片段,通過 OpenAI 的 Ada 模型創建 Embedding 放到本地或遠程向量資料庫。
2)把用戶的提問也創建成 Embedding,用它和之前創建的 PDF 向量比對,通過語義相似性搜索(餘弦算法),找到最相關的文本片段。比關鍵詞搜索好的一點是不要求關鍵詞包含,也能發現文本相關性,比如汽車和公路。
3)把用戶提問和相似文本片段發給 OpenAI,寫 Prompt 要求 ChatGPT 基於給定的內容生成回答,如果沒有相似文本或關聯度不高,回答不知道。
為避免 ChatGPT 亂發揮,一般 Temperture 會設置的很低甚至為 0
注意:這種方法實用性仍然比較有限,質量也不好,雖有一定調優空間(文本切片,問答對)
現在這麼做也是不得已,因為 ChatGPT 的上下文記憶 token 有限(32k 會好一些),不能直接丟超長文檔讓它分析。