【AIGC】Embedding與LLM的結合:長文字搜尋與問答功能

xingyuanyuan發表於2023-05-10

什麼是Embedding?

Embedding是一種多維向量陣列,由一系列數字組成,可以代表任何事物,如文字、音樂、影片等。在這裡我們將重點關注文字部分。Embedding之所以重要,是因為它讓我們可以進行語義搜尋,也就是透過文字的含義進行相似性檢索。

為什麼Embedding在AI中如此重要?

Embedding在AI中的重要性在於,它可以幫助我們解決LLM的tokens長度限制問題。透過使用Embedding,我們可以在與LLM互動時,僅在上下文視窗中包含相關的文字內容,從而不會超過tokens的長度限制。

如何將Embedding與LLM結合?

我們可以利用Embedding,在和LLM互動時,僅包含相關的文字內容。具體操作方法是,首先將文字內容分塊並轉換為向量陣列,然後將其儲存在向量資料庫中。在回答問題時,我們可以使用相似性搜尋將問題向量與文件向量進行比較,找到最相關的文字塊,然後將這些文字塊與問題一起輸入到LLM中,得到準確的回答。
image

舉例來說

我們可以利用Embedding,在和LLM互動時,僅包含相關的文字內容。以一個巨大的書籍PDF檔案為例,假設這是一本講述人類歷史的書籍。我們希望從中提取關於某個重要歷史人物的資訊,但不想閱讀整個檔案。

具體操作方法是:

  1. 將PDF檔案的文字內容分塊。
  2. 使用Embedding模型將每個文字塊轉換為向量陣列。
  3. 將這些向量陣列儲存在向量資料庫中,同時儲存向量陣列與文字塊之間的關係。

當我們需要回答關於該PDF檔案的問題時,例如:“作者對xxx人物的看法是什麼?”我們可以:

  1. 使用Embedding模型將問題轉換為向量陣列。
  2. 使用相似性搜尋(如,chatGPT推薦的餘弦相似度)將問題向量與PDF檔案的向量進行比較,找到最相關的文字塊。
  3. 將找到的最相關文字塊與問題一起輸入到LLM(如GPT-3)中,得到準確的回答。

透過這種方法,我們可以將Embedding與LLM結合,實現高效的文字搜尋和問答功能。目前比較火的類chatPDF、以及文件問答產品都採用類似的技術。

產品案例

開源fireBase解決方案SupBase二月份時就推出了一款基於chatGPT API的,支援問答的文件系統(https://supabase.com/blog/chatgpt-supabase-docs)
其中就對這個文件系統的技術路徑進行了相應的描述:
image

一些值得參考的資料

  1. https://openai.com/blog/introducing-text-and-code-embeddings (主要是關於基於embedding的文字與程式碼搜尋的)
  2. https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb (openAI提供的jupyter基於embedding的QA程式碼示例)
  3. https://supabase.com/blog/chatgpt-supabase-docs
  4. 詳細內容會同步至微信公眾號(Hobbes View)

相關文章