問題:參數化知識的三個限制
LLM 把知識壓進權重(參數化記憶),這帶來三個限制:知識有截止日期、會幻覺(無依據時仍流暢虛構)、不含私有資料。檢索增強生成(RAG) 的核心是把知識外部化為可檢索的非參數記憶,回答前先檢索、再以證據為條件生成:
$$ p(y\mid x)=\sum_{z\in\mathcal{Z}}\underbrace{p_\eta(z\mid x)}_{\text{檢索器}}\;\underbrace{p_\theta(y\mid x,z)}_{\text{生成器}} $$
其中 $z$ 是檢索到的文件。實務上多取 top-$k$ 段落近似這個邊際化。
索引:切塊與向量化
離線階段把語料建成可檢索索引:
- 切塊(chunking):文件切成適當粒度的段落。太大則檢索不精準、稀釋訊號;太小則語意破碎。常用重疊滑窗或依語意邊界切。
- 編碼:用嵌入模型把每塊轉成向量 $\mathbf{d}=\mathrm{Enc}(z)$,存入向量資料庫。
檢索:雙編碼器與稠密檢索
查詢時把問題編碼成 $\mathbf{q}=\mathrm{Enc}(x)$,以相似度排序取 top-$k$:
$$ \mathrm{score}(x,z)=\mathbf{q}^\top\mathbf{d}\quad\text{或}\quad \cos(\mathbf{q},\mathbf{d}) $$
這種 bi-encoder(雙塔) 架構讓文件向量可預先算好、以 ANN(如 HNSW)次線性檢索。常見強化:
- 混合檢索:稠密向量 + 稀疏的 BM25 關鍵字,兼顧語意與精確詞。
- 重排序(re-ranking):用 cross-encoder 對 top-$k$ 精排,準度更高但較慢。
- 查詢改寫/HyDE:先讓 LLM 改寫或生成假設答案再檢索,改善召回。
生成:以證據為條件並標註來源
把「檢索段落 + 問題」組成提示,要求模型僅依據提供的證據作答並引用來源。這帶來三大效益:時效性(更新索引即可,無需重訓)、可溯源(附出處、可查證)、私有知識(接上專屬語料)。
評估與失敗模式
RAG 的品質拆成兩段評估:檢索(召回率、命中率、nDCG)與生成(忠實度 faithfulness/是否被證據支撐、答案相關性)。常見失敗:檢索召回不足、上下文過長造成「中間遺失(lost in the middle)」、模型忽略證據仍憑記憶答。這些是 RAG 工程的調校重點。
RAG vs. 微調,以及 Uedu 實例
- RAG:知識外置、即時可換,適合常變動的事實與可溯源需求。
- 微調:把風格/格式/領域能力寫進權重,適合穩定的行為。 二者互補常並用。本平台的 ClassroomGPT 教材檢索與頻道知識庫即 RAG 實作:教師上傳 PDF 被切塊、向量化,學生提問先檢索相關段落,AI 再「引用 [來源 N]」作答——正是「讓 AI 讀你的資料,而非憑記憶」。
深入探討(研究所視角)
把 RAG 寫成機率模型:邊際化與後驗近似
入門把 RAG 視為「先檢索、再生成」的工程管線,但更深一層的觀點是把它寫成一個對隱變數檢索結果做邊際化(marginalization) 的生成模型。設查詢 $x$、目標輸出 $y$、檢索器 $p_\eta(z\mid x)$ 從語料庫挑出文件 $z$,生成器 $p_\theta(y\mid x,z)$ 條件化於文件作答,則理論上應對所有候選文件求和:
$$ p(y\mid x)=\sum_{z\in\mathcal{Z}} p_\eta(z\mid x)\,p_\theta(y\mid x,z) $$
原始 RAG(Lewis 等人)區分 RAG-Sequence(整段 $y$ 共用同一 $z$)與 RAG-Token(逐 token 重新邊際化 $z$)。由於 $|\mathcal{Z}|$ 可達數百萬,精確求和不可行,實務以 top-$k$ 截斷近似邊際;這等價於用檢索分布做重要性取樣,截斷誤差由未被召回的高機率文件的尾部質量決定。關鍵在於 $p_\eta(z\mid x)$ 通常透過雙塔嵌入內積以 $\mathrm{softmax}$ 定義,使檢索分數可微,梯度能回傳到查詢編碼器——這正是把檢索「端到端」併入訓練、而非當成凍結前處理的理論基礎。
檢索的可訓練性與 SOTA 變體
最大的工程難點是文件索引隨參數更新而過時:每次更新編碼器都需重建 ANN 索引。REALM 以非同步刷新索引、stop-gradient 於文件側塔處理此問題;ATLAS 進一步展示檢索器可由生成器的蒸餾訊號監督,例如以「該文件對降低 $y$ 的困惑度的貢獻」作為偽標籤訓練檢索器(attention distillation / perplexity distillation)。更晚近的方向把檢索內化進解碼:FiD(Fusion-in-Decoder) 對每篇文件獨立編碼、僅在解碼器交叉注意力處融合,使複雜度對 $k$ 線性而非平方;kNN-LM 則直接在輸出層對最近鄰 token 分布做插值,等價於一種非參數記憶。Self-RAG 引入反思 token 讓模型自行決定「是否檢索」與「是否採信」,把檢索從固定步驟變為策略。
開放問題與理論連結
RAG 並不能消除幻覺,只是把問題從「參數記憶」轉移到「對檢索證據的忠實度(faithfulness)」。一個尚未解決的張力是知識衝突:當檢索證據與模型參數先驗矛盾時,缺乏校準良好的仲裁機制,模型可能既不忠於證據也不誠實標示不確定性。理論上這連結到校準(calibration) 與選擇性預測——理想系統應在檢索覆蓋不足時棄答,但語言模型的信賴度普遍過度自信。另一條開放線是 長脈絡 LLM 是否使 RAG 過時:經驗上「中間遺失(lost in the middle)」現象顯示注意力對長脈絡中段資訊利用不均,且把整庫塞進脈絡的計算成本隨序列長度呈平方成長,使檢索式稀疏存取在效率上仍具理論優勢。最後,RAG 與檢索器—生成器聯合最佳化、與 retrieval-augmented 預訓練(如 RETRO 以分塊交叉注意力在預訓練階段就引入鄰居)共同指向一個更深的命題:把「記憶」與「推理」解耦,讓參數專注於組合與推理、把事實外包給可更新的非參數記憶體,可能是比單純放大參數更有資料效率的擴展路徑。