Posted on

RAG中準備檢索資料的概念及方向

Embedding向量搜尋的概念

在RAG(Retrieval-Augmented Generation)模型中,embedding 向量搜尋是一個關鍵步驟,用於在資料庫中找到與當前查詢相關的資訊。RAG結合了檢索和生成的能力,通過將外部知識融入生成過程中來提高生成內容的質量和相關性。以下是 embedding 向量搜尋的主要步驟:

  1. 查詢嵌入 (Query Embedding)
    將用戶的查詢轉換成嵌入向量。這通常是通過一個預訓練的語言模型(如BERT或RoBERTa)來完成。這些模型能夠將文字表示成固定長度的向量,捕捉文字的語義信息。
  2. 資料庫嵌入 (Database Embedding)
    資料庫中的每個文本片段(如文章、段落、句子)也被轉換成嵌入向量。這些嵌入向量通常預先計算並存儲起來,以便在查詢時能快速檢索。
  3. 相似度計算 (Similarity Calculation)
    使用某種相似度度量(如餘弦相似度)來計算查詢嵌入向量與資料庫中嵌入向量之間的相似度。餘弦相似度測量兩個向量之間的夾角,角度越小,相似度越高。
  4. 檢索相關資料 (Retrieve Relevant Data)
    根據相似度分數,選擇與查詢最相關的前N個資料庫片段。這些片段將作為檢索結果返回。
  5. 融合與生成 (Fusion and Generation)
    RAG模型將檢索到的相關片段與查詢結合起來,通過生成模型(如GPT-3)生成最終的回應。生成模型利用檢索到的資訊,生成更為準確和豐富的回答。

簡單範例

假設我們有一個簡單的資料庫,包含以下句子:

  1. “Python是一種流行的編程語言。”
  2. “GPT-3是OpenAI開發的語言模型。”
  3. “嵌入向量是機器學習中的重要概念。”

用戶查詢:「什麼是GPT-3?」

  1. 查詢嵌入:將「什麼是GPT-3?」轉換成嵌入向量Q。
  2. 資料庫嵌入:將資料庫中的每個句子轉換成嵌入向量D1, D2, D3。
  3. 相似度計算:計算Q與D1, D2, D3的相似度。例如,相似度分數可能是:
    Q與D1: 0.2
    Q與D2: 0.9
    Q與D3: 0.3
  4. 檢索相關資料:根據相似度分數,檢索到最相關的片段是「GPT-3是OpenAI開發的語言模型」。
  5. 融合與生成:RAG模型將檢索到的片段與查詢結合,生成關於GPT-3的詳細說明。

以下為一個用書名做向量檢索的文章,看了此文章會更能理解向量空間的文字意義檢索的概念

https://towardsdatascience.com/building-a-recommendation-system-using-neural-network-embeddings-1ef92e5c80c9

從Fancy AI了解準備資料的幾種方式

網站如下: https://www.fancyai.co/

從上面的圖片我們可看出大概可分為【直接分段】或【以QA方式去呈現】,而QA方式又分成【讓AI自動整理問答對】、【人工整理問答對】。

三種方式的優缺點比較

這三種方法各有其優缺點,適用於不同的應用場景和需求。

1. 手動輸入問答對

優點:

  • 高準確性: 手動輸入的問答對由專家或知識擁有者編寫,確保了答案的準確性和相關性。
  • 高度針對性: 可以針對特定領域或問題編寫,回答更具針對性。
  • 質量控制: 可以進行嚴格的審查和驗證,確保資料的質量。

缺點:

  • 耗時耗力: 手動編寫問答對需要大量人力和時間,尤其是資料量大的情況下。
  • 不易擴展: 隨著知識庫的增長,維護和更新問答對會變得愈發困難。

2. AI自動產生問答對

優點:

  • 自動化程度高: 使用AI技術(如自然語言處理)自動生成問答對,大幅減少人力投入。
  • 快速生成: 可以在短時間內生成大量問答對,適合快速擴展知識庫。
  • 適應性強: 可以根據需要自動更新和擴展問答對。

缺點:

  • 準確性不穩定: AI自動生成的問答對可能存在錯誤或不精確的情況,需要人工審核。
  • 質量參差不齊: 自動生成的答案質量可能不均一,部分回答可能缺乏深度或詳細性。

3. 直接將文件做分段

優點:

  • 節省時間: 直接將長文檔分段,可以快速建立起知識庫,節省了人工編寫問答對的時間。
  • 完整性: 保留了原始文檔的完整信息,便於系統檢索和引用。
  • 多樣性: 文檔中的信息可能涵蓋多個方面,能夠提供更豐富的回答。

缺點:

  • 相關性不一定高: 分段的文檔內容可能不是針對具體問題,回答的針對性和相關性可能不如手動問答對。
  • 需要處理和優化: 分段後的文檔需要進行處理和優化,以確保分段的合理性和檢索的效率。
  • 資料雜亂: 如果文檔內容過於雜亂或不夠結構化,可能會影響檢索結果的質量。

適用的場景

  • 手動輸入問答對 適合需要高度精確和針對性回答的應用場景,如專業領域的技術支持或知識管理。
  • AI自動產生問答對 適合需要快速建立和擴展知識庫的情況,如大型網站的常見問題解答(FAQ)系統。
  • 直接將文件做分段 適合需要處理大量現有文檔資料的應用,如文檔管理系統或數字圖書館。

直接分段的範例

以上面的例子來說,用戶查詢「怎麼串接GPT-3的API?」,

假設我們有以下一段文檔:

Python是一種流行的編程語言。它擁有豐富的庫和框架,適用於各種應用場景。GPT-3是由OpenAI開發的一個強大的語言模型,可以生成高質量的自然語言文本。嵌入向量是機器學習中的重要概念,用於表示文字的語義信息。

我們可以將這段文檔拆分成以下分段:

  1. “Python是一種流行的編程語言。”
  2. “它擁有豐富的庫和框架,適用於各種應用場景。”
  3. “GPT-3是由OpenAI開發的一個強大的語言模型,可以生成高質量的自然語言文本。”
  4. “嵌入向量是機器學習中的重要概念,用於表示文字的語義信息。”

然後對每個分段生成嵌入向量,並在檢索系統中建立索引。當用戶查詢「什麼是GPT-3?」時,系統會找到與該查詢最相關的分段(如第三個分段),並用它來生成回應。

產生問答對的範例

問答對生成

  1. 問題:Python是什麼?
    回答:Python是一種流行的編程語言。
  2. 問題:Python有哪些特點?
    回答:Python擁有豐富的庫和框架,適用於各種應用場景。
  3. 問題:GPT-3是什麼?
    回答:GPT-3是由OpenAI開發的一個強大的語言模型,可以生成高質量的自然語言文本。
  4. 問題:嵌入向量是什麼?
    回答:嵌入向量是機器學習中的重要概念,用於表示文字的語義信息。
  5. 問題:Python的應用場景有哪些?
    回答:Python適用於各種應用場景,因為它擁有豐富的庫和框架。
  6. 問題:GPT-3的開發者是誰?
    回答:GPT-3是由OpenAI開發的。

生成問答對的步驟

  1. 文本分析
    • 對給定的文本進行語義分析,識別出關鍵概念和信息點。
    • 例如,在這段文本中,關鍵概念包括「Python」、「庫和框架」、「GPT-3」、「OpenAI」、「嵌入向量」、「機器學習」等。
  2. 生成問題
    • 根據關鍵概念生成相關的問題。
    • 問題應該簡潔明了,針對文本中的具體信息點。
  3. 生成答案
    • 根據文本中提供的信息生成相應的答案。
    • 答案應該準確反映文本中的內容,並且與問題直接相關。