充分的資訊:用不同視角看RAG系統
一般分享作者:蘇昱仁
內文:
1. 檢索回來的資料,到底夠不夠?
一個 RAG 系統答錯了。你打開 log,看到檢索模組抓回五段文件,模型讀完它們,給出一個錯誤的答案。
接下來你要做什麼?
如果你覺得是檢索的問題,你會去換 embedding 模型、調 chunk 大小、加 reranker。如果你覺得是模型的問題,你會去改 prompt、換大一點的模型、加 chain-of-thought。這兩條路要花的時間都不短,而你通常只是憑感覺選一條。
ICLR 2025 的〈Sufficient Context〉處理的就是這個「憑感覺」。它想給你一個新的視角,讓你從另一個角度看到底是誰的問題。
2. 「相關」這個詞不夠用
先看一個例子。問題是「Lya 的配偶是誰」,檢索回來四段文字:
A:「Lya 於 2020 年與 Paul 結婚⋯⋯兩人在最近的活動上看起來很幸福。」
B:維基百科資訊欄,出生 1980/10/01,配偶 Paul(2020 年結婚)。
C:「Lya 於 2006 年與 Tom 結婚,2014 年離婚,2018 年與 Paul 約會⋯⋯」
D:「Lya 是太空人,生於俄亥俄州,有兩個孩子,父母都是律師。」
A 和 B 顯然能回答。D 顯然不能。
問題出在 C。它提到了 Tom,提到了 Paul,提到了婚姻狀態,跟問題的關鍵字重疊度極高,任何一個向量檢索都會把它排在前面。但離婚之後只有「約會」,你推不出現在的配偶是誰。
C 是相關但不充分。
論文指出,過去的研究在評估檢索品質時,對「相關」並沒有一個精確的定義。這個詞的光譜很寬,從「直接含有答案」到「只是主題沾邊」都算。即使是資料集裡標為 golden 的文件,提供的資訊量也差很多。整個領域缺的是 C 這種情況的名字。
3. 定義:把量詞改掉
這篇給的定義是這樣的:
給定一組(問題 Q,上下文 C),如果存在某個答案 A′,使 A′ 在 C 提供的資訊下是 Q 的一個合理答案,則這組具有 sufficient context。
跟過去做法的差別,全在「存在」這兩個字。
過去用的是蘊含(entailment)。蘊含判斷的是「給定 C,Q 的答案是 A」這句話成不成立,它需要你手上先有一個 A。而系統真正上線的時候,你沒有標準答案。所以蘊含只能用來事後分析,不能用來即時決策。
改成存在量詞之後,判斷只需要問題和上下文兩樣東西。這讓它可以在推論時使用,而這正是後面那個方法的前提。
這裡有一個反直覺的後果值得停下來看:上下文裡寫了錯誤的答案,仍然算充分。
論文說這是刻意的設計。理由是如果把充分性綁在標準答案上,那麼標準答案本身標錯的題目,就會被誤判成「檢索失敗」。把這個綁定解開,分析對標籤噪音就穩健得多。
代價是,充分性量的是可答性,不是可信度。這個區分在讀後面的數字時要一直記著。
論文另外補了三個邊界條件:多跳題可以組合上下文裡的事實,但不能補上上下文沒寫的關聯(母親在紐約出生,不代表兒子在紐約出生);問題有歧義時,上下文要能消歧;上下文有多個候選答案時,要能分辨是哪一個(只寫「住在巴黎」,分不出法國還是德州)。
4. 怎麼大規模判斷
定義有了,還要能自動標註,否則只能人工看幾十題。
作者從 PopQA、FreshQA、Natural Questions、EntityQuestions 抽了 115 筆做人工標註,並且刻意設計得難:單跳多跳混合,同時故意在不充分的上下文裡放進問題中出現過的實體,讓表面線索誤導判斷。
結果:
方法 | Accuracy | 需要標準答案 |
|---|---|---|
Gemini 1.5 Pro (1-shot) | 0.930 | 否 |
Gemini 1.5 Pro (0-shot) | 0.870 | 否 |
FLAMe 24B | 0.878 | 否 |
TRUE-NLI (T5 11B) | 0.826 | 是 |
Contains GT | 0.809 | 是 |
註:本表由論文 表1 轉製
比較特別的是 TRUE-NLI。它是蘊含模型,做的事情像改考卷:手上先有標準答案,再檢查上下文撐不撐得起它。它的 precision 是 0.938,recall 只有 0.726。
論文指出這個不對稱正是預期中的結果。蘊含成立就一定充分,所以它說充分的幾乎都對;但充分不代表蘊含,所以真的充分的它會漏掉一部分。漏在哪?漏在上下文裡寫的答案跟資料集的標準答案不是同一個的時候,比如同名的兩個人,或標準答案本身標錯。
換句話說,判斷充分跟判斷蘊含量的不是同一件事。
要留意這個驗證集的組成:115 筆取自 PopQA、FreshQA、Natural Questions、EntityQuestions,而後續分析主要使用的是 FreshQA、Musique 和 HotpotQA。
5. 用新的視角發現三件事
5.1 常用資料集本身就有一半不充分
在 6000 token 的截斷下,FreshQA 有 77.4% 的題目充分(它的上下文來自人工整理的網址),HotpotQA 46.2%,Musique 44.6%。
論文對 Musique 這個數字也覺得有點意外,因為它的上下文是資料集內建的,不是作者自己檢索的。
截斷長度的部分,從 2000 到 6000 有些微提升,6000 到 10000 幾乎沒有差異,所以後續統一採用 6000。
這一節的重點是:充分跟不充分混在一起,在一般的 RAG 系統裡是必然的,不是例外。
5.2 加了 RAG,模型反而更不敢說不知道
Claude 3.5 Sonnet 在閉書狀態下有 84.1% 的題目會棄答,給了檢索結果之後掉到 52%。GPT-4o 從 34.4% 到 31.2%。Gemini 1.5 Pro 從 100% 掉到 18.6%。
作者的推測是,只要上下文裡存在任何資訊,模型的信心就上升,於是傾向作答而不是棄答。
論文在附錄也提到,FreshQA 探討的是答案會隨時間改變的問題,這可能解釋了為什麼沒有檢索時棄答率會這麼高(Gemini 1.5 Pro 為 100%)。
5.3 分層之後看見兩種失敗
真正有價值的是把資料依充分性切開之後的結果。以 Musique 為例(單位為 %):
模型 | 上下文 | 正確 | 棄答 | 幻覺 |
|---|---|---|---|---|
Gemini 1.5 Pro | 充分 | 83.4 | 1.3 | 15.2 |
Gemini 1.5 Pro | 不充分 | 49.5 | 10.8 | 39.7 |
GPT-4o | 充分 | 83.4 | 1.8 | 14.8 |
GPT-4o | 不充分 | 61.4 | 14.8 | 23.8 |
Gemma 27B | 充分 | 23.3 | 19.3 | 57.4 |
Gemma 27B | 不充分 | 10.1 | 23.8 | 66.1 |
註:本表由論文 圖1 右半部圓餅圖轉製
充分那幾列是這篇最該被記住的數字。上下文充分的時候,大模型仍然有 15% 的幻覺,而且幻覺遠多於棄答。也就是說,就算檢索做到完美,錯誤也不會消失。這是生成端的問題,改檢索沒有用。
不充分那幾列顯示大模型在資料不夠的時候依然傾向作答。而 Gemma 27B 是另一種情況:就算資料夠,幻覺也有 57.4%。
同一個總錯誤率,拆開來是兩種不同的失敗,要用不同的方法處理。這就是本篇的價值。
5.4 不充分卻答對的 35–62%
有一個反方向的觀察:上下文不充分時,模型仍有 35% 到 62% 答對。直覺解釋是模型本來就知道答案,但論文說這只解釋了一部分——即使排除掉閉書能答對的題目,現象依然存在。
作者列了八類情況:是非題有五成機率猜中、選項有限、多跳題只給了片段而模型用參數知識補齊、跳數太多需要複雜推理、問題有歧義而模型猜對了解讀、以及評分器或答案評估模型本身誤判。論文為每一類舉了例子,但沒有報告各類的佔比。
這一條很關鍵,因為它否定了最簡單的作法。如果「不充分就一律棄答」,會丟掉一大批本來答得對的題目。
6. 方法:把充分性當訊號,不當規則
既然不能一刀切,作者的做法是把充分性當成決策的其中一個輸入。整條流程是:
把問題和上下文丟給 FLAMe autorater,得到一個充分/不充分的二元標籤。由於 FLAMe 的 context window 較小,上下文會切成 1600 token 的區塊逐塊判斷,只要有任一塊被標為充分,整題就算充分。
同時讓 LLM 產生答案並自評信心。開源模型用 P(True):抽 20 個答案,每個再讓模型自評 5 次;專有模型查詢太貴,改用 P(Correct),直接請模型給出最可能的兩個答案跟機率。
兩個訊號丟進一個邏輯斯迴歸,預測這次回答會不會是幻覺,輸出一個分數。
用門檻決定:分數高於門檻就回答,低於門檻就棄答。
論文強調這個設計有兩個特點。它獨立於生成過程之外,不動模型權重,所以可以套用在 Gemini、GPT 這類無法取得權重的模型上;而且門檻可調,給的是一條曲線而不是一個點,嚴格要求準確率的場景可以壓低覆蓋率,重視覆蓋的場景則反過來。
效果:在同樣的覆蓋率下,作答題目中的正確比例提升 2 到 10 個百分點。Gemma 在 HotpotQA 高準確率區間超過 10%,Gemini 在 70% 覆蓋率附近超過 5%。
例外也報了:Gemma 在 Musique 上完全沒有提升,邏輯斯迴歸給充分性的係數是 0。作者的解釋是這組整體準確率只有 18.4%,錯誤太普遍,光靠信心分數就足以辨識。論文也指出這個方法有個前提——模型本身要在充分與不充分的情況下都有一定的準確率,排序才有意義。
讀的時候有一點值得留意:第 4 章的分析是用 Gemini 1.5 Pro 讀完整的 6000 tokens 得到標籤,第 5 章則是用 FLAMe 切塊判斷。兩章的充分性標籤取得方式並不相同。
7. 一個誠實的負結果
作者還試了另一條路:直接微調小模型,讓它學會說「我不知道」。
用 LoRA 微調 Llama 3.1 8B 和 Mistral 7B,把 2000 筆訓練資料裡 20% 的答案改成 "I don't know",分成隨機挑選和只挑不充分題目兩種配方。他們的假設是這樣能讓模型更常棄答、更少幻覺。
結果與假設相反。正確率大多上升,四組模型與資料集的組合中有三組贏過閉書與一般 RAG。但加了 idk 的版本並沒有比一般 RAG 更常棄答(雖然比保留原答案的版本常),而且微調後的模型使用 RAG 時幻覺率仍然至少 31%。
論文的結論是:用微調把模型推向更好的棄答行為可能是做得到的,但要同時兼顧正確與棄答,還需要更多工作。
8. 論文自己列的限制
作者在結論段落列了三項:
分析只涵蓋問答任務,沒有包含摘要。摘要同樣會用到上下文,而模型的行為可能不同。
沒有探討不同的檢索方法會得到多少充分上下文。
若要追求最佳表現,其實可以讓評分器反覆判斷要繼續檢索還是直接作答,論文沒有這樣做。
未來方向則提到三點:做一個輸出分數而非二元標籤的細緻評分器,可用於檢索後的重新排序;把充分性的定義擴展到多模態,例如圖像問答或文件問答;以及利用輸入端的其他輔助訊號進一步降低幻覺。
9. 個人心得
以下是我自己的想法,不是論文的主張。
我第一次讀完的反應是:這篇沒什麼技術含量。方法的核心是一個兩個特徵的邏輯斯迴歸,沒有新架構,沒有訓練,實驗也是跑在現成的 benchmark 上。
後來我換了一個方式問自己:把 sufficient context 這個概念從論文裡拿掉,還剩下什麼?
答案是幾乎什麼都不剩。分層的表格拆不開,那八類情況沒有存在的理由,selective generation 連第二個特徵都沒有。整篇會退回成「模型有時候會答錯」。
這讓我意識到自己一直用錯了標準。我習慣用「有沒有提出新方法」去衡量一篇論文,但這篇交出來的是另一種東西——一把尺。而尺的價值不在它多精巧,在它讓你量得出原本量不出的東西。「上下文充分但模型答錯」這一格,在這篇之前沒有名字。有了名字之後,「把檢索做到完美到底還剩下多少錯誤」才從一個感覺變成一個數字。
對我自己的研究來說,最有用的其實是作者沒有做完的那幾件事。那八類情況沒有量化佔比;充分性和檢索設定從來沒有交叉驗證過;這個概念在專業領域(例如法規、規章這類答案常常需要跨條文組合的文件)能不能成立,完全沒有測試。每一個洞的大小,都讓我覺得「這我好像做得起來」。
這個感覺一開始讓我懷疑論文的份量。現在我比較傾向另一個解釋:這類以分析為主的論文本來就是這樣運作的——提出一個概念、給初步證據、指出方向,剩下的留給後面的人。它停在一個不高的位置,不是因為做不好,而是那個類型的論文就停在那裡。
真正要小心的反而是我自己。洞看起來好填,不代表填的方式不會變成純工程。如果我只是把這把尺搬到另一個領域重跑一次,那我會連它未解決的問題一起繼承。
論文:Joren, H., Zhang, J., Ferng, C.-S., Juan, D.-C., Taly, A., & Rashtchian, C. (2025). Sufficient Context: A New Lens on Retrieval Augmented Generation Systems. The Thirteenth International Conference on Learning Representations (ICLR 2025).
本文的數據與引述皆出自論文正文與附錄。若有理解錯誤,歡迎指正。