fbpx

LLM RAG 擷取增強生成介紹 (3 種 RAG/Self-RAG/CRAG 全解析)

目前的 LLM RAG 解決了什麼問題?

當前的人工智慧技術中,LLM (大型語言模型) 和 RAG (檢索增強生成) 結合是一種強大的應用方式。簡單來說,這是一種將「AI LLM 的智慧」與「資料庫的知識」結合起來的方法。LLM 就像是一位非常聰明的助手,擅長理解和生成自然語言,能回答問題、完成文章,甚至進行創意寫作。但它的知識是來自於訓練過程,並非即時更新,因此可能會有過時或不完整的資訊。RAG 則解決了這個問題,RAG 的核心是利用檢索技術,即在需要的時候,從外部資料庫或知識庫中提取最新、相關的資訊,再將這些資訊傳遞給 LLM,讓它能結合這些資訊生成更準確、更有依據的回答。可以說是有效率的彌補新資訊對於 LLM 訓練時不存在的神經網路參數記憶,大幅度提昇回應能力。

舉個例子:想像你在問一個問題,比如「今年最流行的手機是哪款?」LLM 本身可能無法知道最新的資訊。但通過 RAG,它可以先去搜尋相關的資料,比如來自網路上的最新文章或數據,再用這些資訊生成一個可靠的答案。總而言之,LLM 負責「理解和表達」,而 RAG 負責「找到最新的知識」。兩者結合,就像是一位既有高智商又有豐富資料來源的超級助手,可以更好地幫助我們解決問題,滿足各種需求!

關於 LLM AI 幻覺

傳統的 LLM 透過過去大量的資料學習,在回答問題的時候容易產生「AI 幻覺 (AI Hallucination)」也就是我們常說的睜著眼睛說瞎話。這樣情境通常是因為 LLM 學習時並沒有正確的資料,但是生成回應時基於機率模式,還是會盡可能拼湊出錯誤的答案。

在某些情況下,如果我們已經期望 LLM 想要回答的範圍,那我們就可以將資料先準備好。這種感覺有一點像是把簡答題改為選擇題,但是問題來了,總不能每次都準備好一堆資料才開始問問題,這樣會造成輸入的 Token 太多太複雜,因此我們必須事先準備好資料,讓 LLM 可以在這些資料尋找適合的答案。

實際上並不是把這些資料讓 LLM 進行訓練,因此資料不會存在 LLM 參數中,這些「記憶」又稱為「非參數記憶(Non-Parametric Memory)」。

如何改善 LLM 面對未知問題的能力?

需要改善 LLM 的回應能力可以透過 Fine-Tuning 或 RAG 等方法,我們分別說明兩種方法的差異:

Fine-Tuning 再次訓練模型
將新的資料基於原本的參數進行訓練,讓模型學習更多的資料,這種方法對於現今動不動就上百億參數的 LLM 來說,實現上會比較困難,需要有足夠強大的硬體。

RAG 檢索增強生成
利用 LLM 可以理解資料的能力,直接擴充並且可侷限 LLM 回應的範圍,雖然速度不及 Fine-Tuning,但是快速擴增的能力帶來不少好處。

Model Fine-Tuning vs RAG

我們比較一下兩種強化 LLM 的方法,分別是參數化記憶的 Fine-Tuning 與非參數記憶的 RAG,兩種方法的特性如下:

Fine-Tuning 又稱為 Domain-Specific Fine-tuning (DSF)

  • 需要較高的運算
  • 無法保證最終學習效果 (無法絕對避免幻覺)
  • 針對經常變動的資料訓練不易
  • 大量資料訓練後不影響回應速度 (適合大規模學習)
  • 可改善語意、風格、詞彙能力
  • 可縮小模型改善效率 (SLM)

RAG

  • 不需要重新計算模型
  • 快速適應新資料 / 容易抽換
  • 大幅度減少幻覺的範圍
  • 大規模資料影響回應效率 (適合專門領域的回應)
  • 僅針對外部給予的資料有最佳的反應能力
  • 需依賴大模型的理解與搜尋能力

RAG 解決的什麼問題?

以往 通用 AI LLM 在回應問題時也使用了通用的回答 (來至於既有的參數記憶),但是這個通用的回答在特定專用領域中往往不善其人意 (又稱 AI 幻覺)。

RAG 透過已經設計好的資料提供 LLM 進行檢索與回應,提昇 AI 在特定領域的可用性,整個過程就像是 Open Book 測驗。典型的架構如下:

LangChain RAG

擷取增強生成介紹 (Retrieval-Augmented Generation)

RAG (Retrieval-Augmented Generation) 檢索增強生成的由來

2020 年由 Yunfan Gaoa, Yun Xiong, Xinyu Gao, Kangxiang Jia, Jinliu Pan, Yuxi Bi, Yi Dai, Jiawei Sun, Meng Wang, and Haofen Wang 共十位作者發表的論文 Retrieval-Augmented Generation for Large Language Models: A Survey 開啟了 LLM 落地應用的大門。如下:

Retrieval-Augmented Generation for Large Language Models: A Survey

實現多模態 (圖片檢索) 的向量資料庫

由於向量資料庫僅能夠處理 Embedding Token,如果需要讓 RAG 擁有處理圖片 (甚至其他多媒體) 的能力也可以透過其他 AI 模型來建立資料。比如透過強大的 GPT-4V 解讀圖形與表格,將產生後的向量資料合併儲存,讓回答的資料更為廣泛。如下所示:

RAG and ChatGPT 多模態

 

典型的 RAG 流程圖

最基礎的 LLM RAG 流程會透過自我詢問的方法整合回答,過程中會將問題的 Input 與 Vector Database 進行合併查詢,藉此提高正確性,同時也可以限縮回應的內容不會超過範圍,甚至針對無關的問題直接可以不回應,避免 LLM 回覆 AI 幻覺的答覆。典型的流程如下:

RAG Diagram

以原始論文中的範例來看,LLM RAG 對話流程範例如下:

RAG ChatFlow

將問題透過 Vectors DB 找出答案以後讓 LMM 重新整合進行回應。

實現 RAG 的基本要素

  • LLM AI
    由於問題與答案的過程都需要 LLM 介入,因此選用一個強大的 LLM 模型是必要的,可以透過 API 串接 OpenAI ChatGPT 或者自建 Llama 等等開源模型
  • Vector Store
    用來儲存讓 LLM 快速閱讀的向量資料庫,主要會將需要擴增的資料透過與使用的 LLM 一樣的 Embedding 傳換成向量,讓 LLM 可以外掛一個有記憶的腦袋來強化自己的能力
  • Procedure
    最後需要根據想要解決的問題定義資料流程,這裡除了既有的 Vector Store 也可以透過即時網路上的資料來組合回應,讓 LLM 可以自動處理新資訊,比如目前常用的 LangChain

實現 RAG 檢索增強生成的概念

RAG 就像 OpenBook 考試的概念相同,原始的 LLM 就是會考試的學生,可能書讀的不多也不精,但是如果考試的時候採用 OpenBook,聰明的 LLM 考生就可以在書本中查詢到最適合的解答。實際的過程就是在書本中找到最大內積的資料,這就有很高的機率是正確的,這在 RAG 中又稱為 MIPS (Maximum Inner Product Search) 最大內積搜尋。

但現在還有一個問題,如果考試時間很短,但是書本太厚,要如何加速?這時候我們就需要事先預習並做好索引,這個過程在 RAG 裡面稱為 Document Index。實際上我們會將資料透過 Document Encoder 轉換成 Embedding 並且儲存在向量資料庫中,這樣就可以加速 MIPS 實現的效率。

輸出模型:RAG-Sequence 與 RAG-Token

兩種常用的 RAG 輸出模式:

  • RAG-Sequence
    使用相同的檢索文本,開放領域問答、生成和分類任務中均表現出色
  • RAG-Token
    抽取不同的檢索文件並相應地邊際化,在生成特定內容時表現更為靈活,能夠動態選取最相關的文檔來生成準確的答案

自我反思擷取增強生成 (Self Retrieval-Augmented Generation)

Self-RAG 是論文「SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTION」提出的方法,主要透過自我詢問的方式來找出最佳解,原始論文如下:

Self-RAG Paper

主要有幾個特性:

  • 讓 LLM 透過反思的方法來強化問題與回答的內容
  • 實務上可以先透過 RAG 尋找多個可能的答案,答案可能來自於多分文件或者網路查詢
  • 針對每一個答案再次透過 LLM 進行評估,透過相關性與正確性篩選出最適合的答案
  • 需要把多個回應透過 LLM 進行推理,所以速度通常比較慢一些

糾錯檢索增強生成 (Corrective Retrieval-Augmented Generation)

Corrective Retrieval-Augmented Generation 簡稱 CRAG,論文節錄如下:

CRAG Paper

CRAG 主要透過「Retrieval Evaluator (檢索評估器)」與「Knowledge Refinement (知識精練)」兩個方法來實現更好的回應結果。CRAG 理論上優於 Self-RAG 更適合對答案準確性要求較高,但對信息檢索速度不要求的場景。

CRAG 的運作機制

  • Retrieval Evaluator(檢索評估器)
    用於評估針對特定問題檢索到的文件的整體品質。它還會利用網路搜索作為輔助工具,進一步提升檢索結果的品質。評估答案分為「正確」(correct)、「模糊」(Ambiguous)、「錯誤」(Incorrect)三種情況。對於「正確」的情況,直接進行知識精練,抽取關鍵資訊。針對「錯誤」的資訊,則利用網路檢索來擴充知識量。針對「模糊」的知識,結合前面兩種操作來提供答案的穩健性及精準度。
  • Knowledge Refinement(知識精練)
    先將文件進行分解再重新組合,以便深入挖掘文件中的核心知識點。利用自訂規則將文件進行分解,並由檢索評估器來衡量其相關性。最後將剩餘的相關知識重新整合。

CRAG 與 Self-RAG 比較

  • 工作流程
    Self-RAG 可以直接使用大型語言模型生成答案,無需進行信息檢索。而 CRAG 則需要先檢索相關信息,然後進行評估和篩選,最後才生成答案。
  • 模型結構
    self-RAG 的模型結構比 CRAG 更複雜,需要進行更複雜的訓練過程,並在生成答案時進行多標籤生成和評估。這導致 self-RAG 的推理成本更高,效率更低。而 CRAG 的模型結構較為輕量級,推理速度更快。
  • 性能表現
    CRAG 在大多數情況下都優於 self-RAG,能夠生成更準確、更相關的答案。

測試結果與比較表如下:

Self-RAG vs CRAG

實務上同時使用 Self-RAG 與 CRAG 也是可行的,說穿了這些只是運作流程的概念,可以重新拆解重組應用在適合的業務需求中。

總結 RAG / Self-RAG / CRAG 的差異

以 RAG 的概念一樣是 Open Book 的情況下,我們可以這樣理解:

  • RAG
    對於每一道題目,都仔細查閱參考書,找到相關章節,理解並總結內容,然後將答案寫在試卷上。
  • Self-RAG
    快速回答熟悉的題目。對於不熟悉的題目,可以參考參考書,快速找到相關章節,並在頭腦中進行整理和歸納,然後將答案寫在試卷上。
  • CRAG
    翻書找資料,先整理多個可能的答案 (可能有對有錯),針對這些答案進行確認與評估,最後選擇出最適合的答案進行作答。(更高的反思能力)

最後我歸納幾點結論:

  • 根據問題則適合的 RAG 組合最為重要,每個場景的需求不同,沒有一定的正確答案。
  • 在實際的測試上 LLM 模型原本的能力也是非常重要,適合且強大的 LLM 才能在擴增的資料中展現最佳的理解與統整能力。
  • RAG 針對限制範圍的應用已經相當成熟,不需要對 LLM 進行額外的處理就可以透過資料流程達到不錯的效果

參考資料 (Reference)