目前的 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 測驗。典型的架構如下:
擷取增強生成介紹 (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 的基本要素
- 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」提出的方法,主要透過自我詢問的方式來找出最佳解,原始論文如下:
主要有幾個特性:
- 讓 LLM 透過反思的方法來強化問題與回答的內容
- 實務上可以先透過 RAG 尋找多個可能的答案,答案可能來自於多分文件或者網路查詢
- 針對每一個答案再次透過 LLM 進行評估,透過相關性與正確性篩選出最適合的答案
- 需要把多個回應透過 LLM 進行推理,所以速度通常比較慢一些
糾錯檢索增強生成 (Corrective Retrieval-Augmented Generation)
Corrective Retrieval-Augmented Generation 簡稱 CRAG,論文節錄如下:
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 與 CRAG 也是可行的,說穿了這些只是運作流程的概念,可以重新拆解重組應用在適合的業務需求中。
總結 RAG / Self-RAG / CRAG 的差異
以 RAG 的概念一樣是 Open Book 的情況下,我們可以這樣理解:
- RAG
對於每一道題目,都仔細查閱參考書,找到相關章節,理解並總結內容,然後將答案寫在試卷上。 - Self-RAG
快速回答熟悉的題目。對於不熟悉的題目,可以參考參考書,快速找到相關章節,並在頭腦中進行整理和歸納,然後將答案寫在試卷上。 - CRAG
翻書找資料,先整理多個可能的答案 (可能有對有錯),針對這些答案進行確認與評估,最後選擇出最適合的答案進行作答。(更高的反思能力)
最後我歸納幾點結論:
- 根據問題則適合的 RAG 組合最為重要,每個場景的需求不同,沒有一定的正確答案。
- 在實際的測試上 LLM 模型原本的能力也是非常重要,適合且強大的 LLM 才能在擴增的資料中展現最佳的理解與統整能力。
- RAG 針對限制範圍的應用已經相當成熟,不需要對 LLM 進行額外的處理就可以透過資料流程達到不錯的效果
參考資料 (Reference)
- 深入淺出RAG經典論文
- 利用 Langchain 實作系列 RAG 進階流程:Query Analysis & Self-reflection
- Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity
- Retrieval-Augmented Generation for Large Language Models: A Survey
- 利用 LangChain 實作多模態模型的 RAG:除了讀文章也能看圖答題
- CRAG: 革命性AI技術如何讓機器回答更精準?
- SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTION
- Building adaptive RAG from scratch with Command-R