Site icon Soul & Shell Blog

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

LLM RAG

目前的 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)

RAG

RAG 解決的什麼問題?

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

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

擷取增強生成介紹 (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 落地應用的大門。如下:

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

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

 

典型的 RAG 流程圖

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

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

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

實現 RAG 的基本要素

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

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

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

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

兩種常用的 RAG 輸出模式:

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

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

主要有幾個特性:

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

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

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

CRAG 的運作機制

CRAG 與 Self-RAG 比較

測試結果與比較表如下:

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

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

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

最後我歸納幾點結論:

參考資料 (Reference)

Exit mobile version