iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
生成式 AI

生成式AI的奇妙旅程:從ChatGPT到個人化應用系列 第 23

Day23 | Few-Shot Learning 與 RAG:大型語言模型(LLM)知識增強的雙重策略

  • 分享至 

  • xImage
  •  

引言:當 LLM 遭遇知識的邊界

想像一下,我們正在與一位知識淵博的超級專家對話,他幾乎無所不知。這就是我們對大型語言模型(LLM)的期待。然而,這些模型雖然強大,卻經常受限於它們的訓練資料截止日期。一旦超出這個時限,或是面對高度專業化、最新的領域知識(例如企業內部文件或最新的科學發現),LLM 就會開始一本正經地胡說八道,也就是我們常說的「幻覺」(Hallucination)。

那麼,我們該怎麼辦?難道每次有新資料,我們就要花費巨大的成本和資源去**微調(Fine-Tuning)**整個模型嗎?

幸運的是,技術社群開發了兩種更具彈性且成本效益更高的方法來解決這個問題:檢索增強生成(Retrieval-Augmented Generation, RAG)少範例學習(Few-Shot Learning)。它們就像是給 LLM 裝上了「即時外部大腦」和「快速學習指南」。今天,我們就來深入探討這兩種技術的原理、應用,以及它們如何巧妙地結合,打造出兼具即時性和精準度的 AI 系統!


一、知識增強的兩把利器

要讓 LLM 更好地服務我們的特定需求,我們有兩條主要的路徑可以走:一條是透過外部資訊的即時注入(RAG),另一條是透過上下文中的範例指導(Few-Shot Learning)。

1. 檢索增強生成 (Retrieval-Augmented Generation, RAG)

RAG 就像是 LLM 的外接大腦,它讓模型能夠在生成回應之前,先去查閱指定的外部文件或資料庫。

定義與原理
  • 定義: 檢索增強生成 (RAG) 是一種技術,使 LLM 能夠檢索並整合新資訊。它在 LLM 回答用戶查詢前,會先參考一組指定的文檔或資料庫。這些外部文件彌補了 LLM 預先訓練資料中可能缺乏的領域特定或最新資訊。
  • 原理: RAG 的核心機制是將資訊檢索步驟整合到生成流程之前。整個過程通常分為四個關鍵階段:
    1. 索引 (Indexing): 將外部資料(如 PDF、CSV、知識圖譜等非結構化或結構化數據) 進行分塊 (Chunking) 並轉換成向量嵌入 (Vector Embeddings),然後儲存在向量資料庫中。
    2. 檢索 (Retrieval): 當用戶提出查詢時,系統會將該查詢向量化,並與向量資料庫中的嵌入進行比對,從中選出最相關的文件或數據片段。
    3. 增強 (Augmentation): 系統會將檢索到的相關資訊作為上下文 (Context),透過提示工程 (Prompt Engineering) 注入到 LLM 的輸入提示中。這種方法也被稱為「提示填充」(prompt stuffing)。
    4. 生成 (Generation): LLM 根據增強後的 Prompt 以及其內部的訓練知識,生成一個更準確、更具上下文相關性的回應。
實際應用與範例
  • 即時知識支持: RAG 特別適用於需要最新或高度專業化知識的任務。例如,在醫療領域,RAG 可以動態檢索最新的醫學文獻和治療方法,為醫護人員提供即時且準確的建議。
  • 客服 Chatbot: 客服機器人可以利用 RAG 檢索公司最新的產品規格、退貨政策或運輸資訊。
  • Text-to-SPARQL 任務: 在 Auto-KGQA 框架中,RAG 被用來自動識別知識圖譜(KG)中與用戶自然語言問題相關的最小子圖 (minimal subgraph),並將其作為上下文提供給 LLM,以生成準確的 SPARQL 查詢。

2. 少範例學習 (Few-Shot Learning)

少範例學習屬於提示工程 (Prompt Engineering) 的範疇,它不需要改變模型本身的參數,而是透過在提示中提供少數幾個輸入-輸出範例來引導模型的行為。

定義與原理
  • 定義: Few-Shot Learning 指在向 LLM 提出最終問題之前,先提供**多個(通常是少量)**已知的輸入-輸出配對作為範例。
  • 原理: 這些範例幫助模型理解任務的格式、風格或潛在的模式,例如:要進行情感分類、翻譯、或是遵循特定的回答結構。這種方法讓 LLM 能夠在只有有限數據或需要快速客製化時,展現其適應性
  • 與 Zero-shot/One-shot 的區別:
    • 零範例學習 (Zero-shot):直接問問題,不提供任何範例。
    • 單範例學習 (One-shot):在問問題前提供一個範例。
    • 少範例學習 (Few-shot):提供多個範例,能更好地處理複雜任務,並提升回應的準確性。
實際應用與範例
  • 模式定義: Few-Shot Learning 常用於定義一種模式,期望 LLM 能延續這種模式。
    • 例如: 若要進行情緒分析,你可以提供範例:「我很開心」是正面;「我很難過」是負面。然後再詢問一個新的句子,讓模型根據範例的模式來判斷。
  • 任務導向的格式生成: Few-Shot Learning 可以幫助 LLM 學會任務導向的回答格式,例如問答、摘要或翻譯的特定結構。
  • Text-to-SPARQL 任務: 在 Auto-KGQA 框架中,Few-Shot Learning 被用於處理複雜查詢,透過檢索與當前問題最相似的已知查詢範例及其正確的 SPARQL 翻譯,來指導 LLM 生成準確的查詢語句。

二、深入探討:混搭策略、應用優勢與潛在風險

RAG 與 Few-Shot 的混搭:魚與熊掌可以兼得

雖然 RAG 和 Few-Shot Learning 在技術原理上不同,但它們可以,而且應該搭配使用,以發揮比單獨運作更強大的效果。

  • 角色分工: RAG 負責提供最新的、事實性的上下文知識(外部資料庫),確保模型回答的即時性和可驗證性。而 Few-Shot Learning 則負責提供任務結構和期望輸出風格的指導(範例),確保模型能以正確的格式處理查詢。

  • Auto-KGQA 框架的實證:

    • Auto-KGQA 框架就是一個成功的混合範例。它透過整合 RAG 和 Few-Shot Learning,專門用於將自然語言查詢 (NL) 轉換為 SPARQL 查詢。
    • RAG 機制: 框架會選擇知識圖譜 (KG) 中相關的片段(最小 T-Box 或 A-Box 子圖)作為上下文。
    • Few-Shot 機制: 框架會建立一個查詢範例索引,用於尋找與當前問題最相似的已知問題範例(自然語言問題和其 SPARQL 翻譯的配對),並將這些範例整合到 LLM 的 Prompt 中。
    • 實驗成果: 實驗結果顯示,在 SciQA 基準測試上,整合 RAG 和 Few-Shot Learning(3-shot 配置)將 F1-score 提升了 0.16。特別是在零範例 (0-shot) 情況下,Auto-KGQA 取得了 0.73 的 F1-score,遠優於僅依賴訓練集範例的先前結果(0.26 F1-score)。這強烈證明了 RAG 機制(提供 KG 子圖上下文)即使在沒有範例的情況下,也能顯著增強模型的性能和通用性

應用場景與決策指南

在實際專案中,RAG 與 Few-Shot/Fine-Tuning 的選擇取決於以下幾個核心要素:

項目 RAG(檢索增強生成) Few-Shot Learning(少範例學習) Fine-Tuning(微調)
知識來源 外部知識庫(向量資料庫等) 上下文中的範例 模型權重和參數
知識更新速度 快速(只需更新知識庫) 快速(只需更新 Prompt) 高成本、慢(需要重新訓練)
生成風格 依賴模型基礎風格,但內容由檢索結果增強 透過範例模仿特定格式或風格 徹底改變模型的風格、語調和術語
主要價值 即時更新可追溯性 快速適應新任務或複雜查詢 深度領域知識掌握推理速度
Text-to-SPARQL 案例 提供 KG 子圖作為上下文 提供問答範例 -

何時選擇 RAG?
當你需要處理動態知識更新(如最新的法規、市場報告)、重視資訊來源的可驗證性,或當你的知識庫規模非常大(如 TB 級),且不希望頻繁重訓模型時,RAG 是理想的選擇。

何時選擇 Few-Shot?
當你需要客製化輸出格式引導複雜的邏輯推理(例如結合思維鏈 Chain-of-Thought),或在特定任務中,通過提供高品質範例能顯著提高模型性能時(如 SciQA 基準測試中,Few-Shot 帶來了高達 0.70 的 F1-score 提升),Few-Shot Learning 是強大的工具。

模型限制與潛在風險

雖然這些技術極大地增強了 LLM,但它們並非萬靈丹。我們必須警惕它們帶來的限制和風險:

1. RAG 的挑戰
  • 無法完全消除幻覺: RAG 並不是徹底解決幻覺的方案。即使從事實正確的來源提取資訊,LLM 仍可能圍繞源材料進行**「幻覺」,或誤解上下文**。例如,模型可能在不考慮標題上下文的情況下,錯誤地提取了一個具有諷刺意味的書籍標題作為事實。
  • 數據衝突與過時資訊: 當 RAG 模型面對相互衝突的資訊時,它可能難以判斷哪個來源是準確的。最糟糕的情況是,模型會將過時和更新的資訊結合起來,產生誤導性的回應。
  • 執行成本: 每次查詢都需要進行額外的檢索過程,這會導致額外的延遲,並增加高性能儲存解決方案的基礎設施成本
2. Few-Shot Learning 的挑戰
  • 對範例品質的極度依賴: Few-Shot Learning 的效果高度取決於範例的品質與標註一致性。如果提供的範例內容不相關或不夠精確,結果甚至可能不如零範例學習。
  • 無法擴展至大量數據: 對於需要學習數千或數萬個範例的複雜任務,Few-Shot Learning(通過 Prompt)可能難以擴展,且在處理海量數據時,微調 (Fine-Tuning) 的表現可能更優。
3. 長上下文視窗帶來的辯論

隨著技術進步,LLM 的上下文視窗 (Context Window) 變得越來越大,例如 GPT-4-turbo 達到 128k tokens,Gemini 1.5 Pro 甚至達到 100 萬 tokens。

有人認為,這使得 RAG 優化工作變得多餘,因為 LLM 可以直接在大上下文視窗內定位相關數據。然而,事實並非如此:

  • 成本考量: RAG 仍具有顯著的成本效益。GPT-4 和 Gemini 的使用費用通常取決於處理的 token 數量,處理 100 萬 tokens 的費用遠高於使用 RAG 機制檢索並輸入少量關鍵資訊。
  • 效率與分塊: 對於大型文檔,RAG 的分塊 (Chunking) 過程仍能將文檔分解為可檢索的部分,有助於提高檢索效率。

因此,未來的 LLM 應用將會是 RAG 與長上下文 LLM 結合的局面,共同應對複雜查詢場景。


自動化最小 T-Box 提取:Auto-KGQA 的另一大貢獻

除了結合 RAG 和 Few-Shot 之外,Auto-KGQA 框架還引入了一項重要的「離線階段」(Offline Stage)功能:自動提取最小 T-Box

  • 背景: RDF 知識圖譜 (KGs) 通常具有無綱要 (schemaless) 的特性,即不強制定義類別和屬性。
  • 過程: 最小 T-Box 提取流程會從 KG 中提取定義類別 (classes) 和屬性 (properties) 的最小 T-Box,包含它們的 rdfs:labelrdfs:comment、繼承關係(如 rdfs:subClassOf)和屬性範圍(如 rdfs:domainrdfs:range)。
  • 目的與優勢: 這項創新優化了查詢處理過程,通過構建最小生成樹 (minimal spanning trees) 來保留 KG 節點之間的連接,從而限制了深度鄰域探索 (deep neighborhood exploration) 的需求,進而提高了 Auto-KGQA 框架的效率。

結語

今天的內容是不是很充實呢?我們從 LLM 的知識限制出發,探討了兩大知識增強的「神隊友」:RAG 和 Few-Shot Learning。

RAG 讓我們可以即時更新知識,像給 LLM 安裝了一個即時資訊中心,特別適合處理不斷變化的數據。Few-Shot Learning 則像給 LLM 提供任務攻略,讓它能夠快速掌握我們需要的輸出格式和風格。

但最棒的是,「Why not both?」。正如 Auto-KGQA 框架所展示的,將 RAG 提供的精確知識上下文與 Few-Shot Learning 提供的任務執行範例結合起來,是開發出通用且高效的 LLM 系統的有效策略。

雖然大模型的上下文視窗越來越長,但 RAG 依然憑藉其成本效益和數據管理優勢,在未來的 AI 架構中佔有一席之地。希望今天的分享能幫助你在設計自己的 LLM 應用時,能更精準地選擇和搭配這些強大的技術!我們下次見,持續在 AI 的道路上精進吧!


上一篇
Day22|旅遊規劃助理Demo
下一篇
Day24 | 向量資料庫與 RAG:賦予大型語言模型「記憶」的關鍵技術
系列文
生成式AI的奇妙旅程:從ChatGPT到個人化應用24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言