iT邦幫忙

2024 iThome 鐵人賽

DAY 11
1
生成式 AI

懶人救星:生成式AI 系列 第 11

Day11-打破語言模型的極限!RAG 技術如何讓 GPT 更聰明?

  • 分享至 

  • xImage
  •  

What is RAG (Retrieval-Augmented Generation)?

RAG(檢索增強生成)是一種將預訓練(Pre-training)的大型語言模型 (LLM) 與外部資料結合的技術,使 LLM 能夠生成更準確、與情境更貼合的回應。試想我們有一個非常聰明的機器人 GPT,但他對某些專業領域的知識可能不太了解,那我們該怎麼讓他更聰明呢?沒錯,答案就是「OpenBook」!相信大家在求學時期都考過OpenBook的考試,雖然有時候書上並沒有直接的解答😭,但在這裡我們必須提供正確的資料給 LLM ,否則生成的內容可能會像我們考試沒讀書時一樣慘不忍睹。
https://ithelp.ithome.com.tw/upload/images/20240911/20168117Ypc6DsmjIO.png

(圖片來源:"Retrieval-Augmented Generation for Large Language Models: A Survey")

RAG技術研究三階段📚:

https://ithelp.ithome.com.tw/upload/images/20240911/20168117Bngec5JKWo.png

(圖片來源:"Retrieval-Augmented Generation for Large Language Models: A Survey")

1. 預訓練階段(Pre-training Stage)

Pre-training 階段是訓練大型語言模型(LLM)的第一步,此階段的目的是讓模型學習如何處理語言,理解文本的結構和內容。在這個階段 LLM 主要依賴於大量的文本數據來進行語言學習。 Pre-training 在RAG技術中旨將大量「外部」知識與模型「內部」的語言知識進行結合,如 Llama、Mistral 等模型。
(這邊的概念像是幫助 LLM 具備基礎知識,需要花費大量的運算資源。)

優點👍:

  • 透過大量訓練過程中獲得更多領域知識,提升模型生成表現。
  • 提高泛化能力:Pre-training 使模型能夠學習到通用的特徵表示,這些特徵可以應用於多種任務,從而提高模型在不同數據集上的表現。

挑戰💪:

  • 如何有效地將外部資料整合進模型的學習過程中,是一個關鍵問題。如果外部資料品質不佳,可能會對訓練產生干擾。

  • 花費成本高,需要大量運算資源、資料訓練。


2. 微調階段(Fine-tuning Stage)

Fine-tuning 階段是在模型經過 Pre-training 後,針對具體任務更進一步訓練。這通常涉及到特定的應用場景,比如問答系統(QA)、文本生成等。 Fine-tuning 在 RAG 技術中可以幫助 LLM 在過程中獲取與任務相關的特定資訊。
(例如在醫療問答系統中,模型不僅需要知道一般的醫療知識,還需要檢索最新的醫療研究結果來回答問題。這樣的微調可以幫助模型應對更加專業和精確的需求。)

優點👍:

  • Fine-tuning 技術可以讓模型對特定任務表現得更好,尤其是在需要使用最「」或具體資料的情況下。
  • 透過檢索外部資料,可以大大減少「遺忘現象」,即模型在微調時遺失了一些預訓練中獲得的重要知識。

挑戰💪:

  • 如何平衡 Fine-tuning過程中的內部知識和外部檢索來的資料,是一個難點。如果依賴外部資料過多,可能會使模型忽略自身的知識。


3. 推理階段(Inference Stage)

Inference 是指模型在實際應用中的表現階段,即模型如何根據使用者的「問題」來產生「答案或解決方案」。Inference 是最早獲得廣泛研究的部分,因為模型需要能夠在處理複雜問題時,及時從外部資料庫檢索到相關資料來補充它的生成過程。這個階段是RAG技術發展的最初焦點,因為語言模型在推理階段經常會遇到知識不足或過時的問題。通過RAG技術,模型可以實時檢索相關的文件或文章來幫助回答問題。
(像是ChatGPT這類模型,在面對一個與近期事件有關的問題時,它可能無法直接回答,因為它的知識來源於過去的訓練數據。但如果搭配RAG技術,ChatGPT 可以即時檢索與問題相關的最新新聞文章,然後用這些資料來生成答案。)

優點👍:

  • 在 Inference 階段加入 RAG 可以讓模型更靈活、更有智慧,能應對知識密集型和即時性問題。
  • 減少模型產生錯誤或不正確資訊的可能性,特別是在需要最新知識的場景中。

挑戰💪:

  • 外部「檢索資料的品質」和相關性是關鍵,如果檢索回來的資料不精準,可能反而導致模型生成錯誤的答案。

RAG發展三階段🚀:

https://ithelp.ithome.com.tw/upload/images/20240911/20168117e81Qaeimau.png

(圖片來源:"Retrieval-Augmented Generation for Large Language Models: A Survey")

RAG 技術隨著語言模型的發展逐漸演化,並可劃分為三個主要發展階段:Naive RAG(初級RAG)、Advanced RAG(進階RAG) 和 Modular RAG(模組化RAG)。每個階段都在處理 LLM 的局限性,如資訊檢索、生成準確性和整合外部資料的方式上,展現了不同的技術進展。以下是對這三個主要階段的詳細介紹:

1. 初級RAG(Naive RAG)

Naive RAG 是最早的檢索增強生成技術,主要關注於基礎的檢索和生成流程,將外部資料庫中的內容檢索後,直接與模型的輸入結合,來生成答案。這個階段的技術著重於基本的架構設計。

工作原理:

  1. 索引(Indexing):將原始資料轉換為統一的文本格式,並進行分割通常是將文本分割成較小的段落或「區塊」(Chunks)。這些 Chunks 會透過 Embedding 技術轉換成向量(Vector)存入向量資料庫,應用於相似度檢索。
  2. 檢索(Retrieval):當使用者提出問題後,系統將使用與索引階段相同的 Embedding 方式,將問題轉換成向量,然後檢索與問題最相似的段落,從而找到與問題相關的資料。
  3. 生成(Generation):檢索到的「Chunk」將與問題一起發送給語言模型,生成最終的答案。這個過程中模型可以利用檢索來的外部資料補充自身知識。

優點👍:

  • Naive RAG 使用了最基礎的「檢索-生成」流程,為語言模型提供了一種動態擴展知識的方法。
  • 可以在不更改模型內部知識的情況下,通過外部資料增強生成的準確性。

缺點👎:

  • 檢索問題:檢索結果的精確度可能不足,檢索回來的段落不一定與問題完全相關,導致模型生成出錯誤或不相關的答案。

  • 生成問題:有時即使檢索到的段落與問題相關,模型也可能生成不準確或不連貫的答案,甚至發生「幻覺」現象(即模型生成與實際事實不符的內容)。

  • 整合困難:檢索到的段落有時資訊過多或重複,難以有效整合,生成的結果可能出現冗餘或不一致。


2. 進階RAG(Advanced RAG)

Advanced RAG 對 Naive RAG 的不足進行改進,專注於優化「檢索」和「生成」階段,並引入了更多技術來提升檢索準確性和生成品質。這一階段的研究逐漸從單純的檢索和生成,發展到在檢索前後都進行「優化操作」。

改進技術:

  • 預檢索優化(Pre-retrieval Optimization):在檢索之前,進階RAG會進行各種優化操作,如:

    • 索引優化:改進索引結構讓檢索更高效,比如使用滑動窗口技術、對資料進行更細緻的分割,或者添加元數據(Metadata)來豐富資料上下文。
    • 查詢優化:對使用者的原始問題進行改寫或擴展,讓問題更清晰、更適合檢索。常見的方法有查詢擴展、查詢轉換等。
  • 後檢索優化(Post-retrieval Optimization):在檢索到資料後,進階RAG會進行後處理,比如:

    • 重新排序(Reranking):將檢索到的段落進行重排序,把最相關的段落放在最前面,確保模型生成時優先使用重要資訊。
    • 上下文壓縮(Context Compression):如果檢索到的資料過多,必須壓縮文字保留核心資訊,減少模型的負擔。

優點👍:

  • 大幅提升檢索精度,能更有效找到與問題高度相關的資料。
  • 生成過程更加精確,減少了幻覺和錯誤生成的風險。
  • 通過預檢索和後檢索的優化,進階RAG的性能在各種任務中顯著提高。

缺點👎:

  • 系統變得更加複雜,優化過程需要更多的計算資源和時間

  • 對於非常複雜或多變的任務,進階RAG可能依然不足以應對,需要更靈活的技術。


3. 模組化RAG(Modular RAG)

Modular RAG 是目前最先進的RAG技術,它不僅對檢索和生成過程進行了細緻的改進,還引入了「模組化設計」,允許系統針對不同任務使用不同的模組來靈活處理問題。這使得RAG技術變得更加靈活、提升擴展性。

特點:

  • 引入新模組:模組化RAG允許添加特定功能的模組來增強檢索和生成過程,比如:

    • 檢索模組(Search Module):針對不同數據源(如搜索引擎、知識圖譜、資料庫)設計專門的檢索策略。
    • 記憶模組(Memory Module):模型可以記住以前的檢索結果,形成一個記憶池讓模型能夠在後續任務中使用之前的資料。
    • 路由模組(Routing Module):根據問題的不同, Modular RAG 可以靈活決定應該使用哪個數據源或模組來檢索資料。
  • 模組替換與重組:Modular RAG 打破了傳統 RAG 中「檢索-生成」的單線流程,允許模組之間進行多次交互,如:

    • 重寫-檢索-生成(Rewrite-Retrieve-Read):模型可以先重寫查詢,然後檢索資料,最後生成答案。
    • 生成-閱讀(Generate-Read):Model 預先生成一部分答案,再檢索補充資料進行完善。
    • 遞迴檢索(Recursive Retrieval):Modular RAG 還可以根據前一次檢索的結果,重新進行檢索補足缺少的答案,逐步細化答案/增加答案品質。

優點👍:

  • 靈活性高:模組化設計允許系統根據不同的需求組裝不同的模組,適應多樣化的任務。
  • 精確控制:每個模組都可以針對具體場景進行微調,實現更精確的資料檢索和答案生成。
  • 適應複雜場景:針對需要多步檢索或多模態資料的任務, Modular RAG 能更好地處理和應對。

缺點👎:

  • 系統更加複雜、技術難度高,需要更多的資源和技術來管理和設計不同的模組。
  • 不同模組之間的協調和交互可能會引入新的挑戰,比如如何確保每個模組的輸出能夠高效傳遞給其他模組。
  • 大部分功能都需要客製化,難以用一種解決方案應付所有領域的問題。
RAG階段 使用場景 原因
初級RAG(Naive RAG) 需求不高,基礎問答或資料檢索。 適合簡單檢索、成本低、流程直觀,不需進行複雜的資料處理。
進階RAG(Advanced RAG) 需要精確檢索,處理專業問題。 提供了更好的檢索準確度,適合知識密集型的專業任務,優化檢索與生成過程,提升結果的相關性和準確性。
模組化RAG(Modular RAG) 複雜任務、多模態資料需求。 具有高度靈活性,適合多步驟檢索、多模態資料整合,能處理更加複雜和動態的應用場景,並可根據需求定製檢索模組。

結論💡

生成式 AI 的爆發帶動了大型語言模型(LLM)的迅速發展,這些模型在生成文本、回答問題、對話等方面表現出色。然而隨著需求的複雜化和對準確、即時知識的要求增高,語言模型的局限性也逐漸顯現出來,如幻覺、知識過時等。 RAG 技術的出現通過結合外部資料,為 LLM 注入了實即時、精確的知識,使其能更好地處理知識密集型任務。從 Naive RAG 到 Advanced RAG 再到 Modular RAG ,AI 發展的速度超乎我們想像, RAG 已成為生成式AI 不可或缺的一部分。
(筆者每天都在 Modular RAG 地獄之中,各種千奇百怪的需求一一出現,我們一起在 AI 領域努力🔥🔥🔥)

參考文獻:"Retrieval-Augmented Generation for Large Language Models: A Survey"


上一篇
Day10-新手救星!教你用OpenAI API實現Chatbot 🧙‍♂️💬
下一篇
Day12-LlamaIndex或LangChain,該選哪一個?
系列文
懶人救星:生成式AI 27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言