RAG系統(tǒng)中的困境:上下文不是想加就能加的
“這段代碼明明是對的啊,為什么ChatGPT還給出了錯誤的解釋?我都把相關(guān)文檔放進去了!”
“用戶問的是2024年的新聞,我也給了最新的新聞報道作為上下文,但模型回答的還是2022年的舊聞...”
相信做RAG應(yīng)用開發(fā)的同學(xué)都遇到過類似的困擾。明明提供了相關(guān)的上下文,為什么大模型還是會產(chǎn)生幻覺...是大模型沒有好好利用上下文,還是上下文本身就不足以回答問題?
最近Google、UCSD等機構(gòu)的研究者提出了一個新的視角來看待這個問題。他們在論文《SUFFICIENT CONTEXT: A NEW LENS ON RETRIEVAL AUGMENTED GENERATION SYSTEMS》中,首次提出了“充分上下文”的概念,并基于此深入分析了RAG系統(tǒng)中大模型的行為表現(xiàn)?!?/p>
論文鏈接:https://arxiv.org/abs/2411.06037
從相關(guān)到充分:重新定義上下文質(zhì)量
在傳統(tǒng)的RAG系統(tǒng)中,我們往往用“相關(guān)性”來評價檢索到的文檔質(zhì)量。比如用戶問“特斯拉Model 3的價格是多少?”,檢索系統(tǒng)可能會返回以下幾種文檔:
文檔A:
特斯拉Model 3是一款純電動轎車,由特斯拉公司生產(chǎn),采用了最新的電池技術(shù)...
文檔B:
2024年1月,特斯拉官方宣布Model 3在中國市場的官方指導(dǎo)價為23.59萬元起...
文檔C:
據(jù)悉,特斯拉計劃在2024年第二季度推出Model 3的改款版本,預(yù)計將對價格進行調(diào)整...
從相關(guān)性的角度看,這三段文本都與特斯拉Model 3有關(guān),但它們對回答價格問題的幫助程度卻大不相同。文檔A雖然介紹了Model 3,但完全沒有價格信息;文檔B給出了明確的當(dāng)前價格;文檔C提到了價格會調(diào)整,但沒有具體數(shù)字?!?/p>
研究者認(rèn)為,我們需要一個更嚴(yán)格的標(biāo)準(zhǔn):上下文是否“充分”支持回答問題。換句話說:如果基于給定的上下文能推理出一個合理的答案,那這個上下文就是充分的。在上面的例子中,只有文檔B提供了充分的上下文?!?/p>
這個概念看似簡單,但實際判斷起來并不容易。比如對于多跳推理類的問題:
問題:2024年特斯拉在中國的市值超過了哪家傳統(tǒng)車企?
可能需要同時具備以下信息才算充分上下文:
- 特斯拉2024年在中國的市值數(shù)據(jù)
- 主要傳統(tǒng)車企2024年在中國的市值數(shù)據(jù)
- 這些數(shù)據(jù)的對比關(guān)系
那大模型如何使用上下文?
研究者基于“充分上下文”的概念,分析了各種大模型在實際場景中的表現(xiàn)。舉個例子,假設(shè)問題是:“2024年2月舉辦的第96屆奧斯卡最佳影片是哪部?”
場景一:提供充分上下文
第96屆奧斯卡金像獎于2024年3月10日舉行,電影《奧本海默》獲得最佳影片獎...
場景二:提供不充分但相關(guān)的上下文
《奧本海默》《巴比》《如何優(yōu)雅地炸掉一艘船》等影片入圍第96屆奧斯卡最佳影片獎提名...
在論文中,他們研究發(fā)現(xiàn),面對這兩種場景,不同類型的模型表現(xiàn)出明顯的差異:
- 專有模型(如Gemini、GPT)在場景一中能準(zhǔn)確回答“《奧本海默》”。但在場景二中,它們傾向于自信地“預(yù)測”獲獎影片,而不是承認(rèn)信息不足。這反映出這類模型可能過度依賴自身的預(yù)訓(xùn)練知識。
- 而開源模型(如Llama、Mistral)即使在場景一中也表現(xiàn)得不夠穩(wěn)定,有時會產(chǎn)生幻覺(比如說是《巴比》獲獎),有時又會過于保守而拒絕回答。這說明這些模型在整合上下文信息方面還有提升空間。
為什么模型有時不需要充分上下文也能對?
在論文中,存在一個比較有趣的發(fā)現(xiàn):即使在上下文不充分的情況下,模型也能在35%-62%的情況下給出正確答案。這是不是就比較unbelievable。
例如,假設(shè)問題是:“愛因斯坦是在哪個國家出生的?”,給出的上下文是:
愛因斯坦在歐洲度過了他的童年時期,后來移居美國...
這個上下文并不充分,因為沒有直接說明出生地。但模型可能還是會正確回答“德國”,猜測可能的原因是:
- 這是一個眾所周知的事實,存在于模型的預(yù)訓(xùn)練知識中
- 上下文中提到“歐洲”提供了地理范圍的線索
- “童年時期”暗示了這可能與出生地有關(guān)
研究者通過分析發(fā)現(xiàn),模型在沒有充分上下文時得到正確答案,主要有這么幾種情況:
- 對于是非題,比如“愛因斯坦去過中國嗎?”,即使上下文不充分,模型也有50%的機會猜對。
- 而對于簡單的選擇題,從有限選項中選擇也會提高正確率。
- 更有意思的是多跳推理題。有時候上下文提供了部分關(guān)鍵信息,模型能夠結(jié)合自身知識進行推理。比如問“誰是第一個登上月球的美國宇航員?”,即使上下文只提到“阿姆斯特朗是阿波羅11號任務(wù)的指揮官”,模型也可能通過預(yù)訓(xùn)練知識推斷出正確答案。
從“充分上下文”到系統(tǒng)改進:RAG中的深度探索
在理解了大模型的行為模式后,那么,能不能進一步探索如何利用這些發(fā)現(xiàn)來改進RAG系統(tǒng)?論文的作者他們提出了一個核心問題:既然知道了上下文的充分性如此重要,那么,能否構(gòu)建一個自動化的機制來判斷上下文是否充分,并據(jù)此來指導(dǎo)模型的回答策略?這就面臨下一個核心問題:如何讓自動判斷上下文是否充分?
這個問題看起來就毫無頭緒。就像我們?nèi)祟?,面對同一個問題和上下文,不同的人可能會有不同的判斷。比如問:“特斯拉2024年第一季度的營收是多少?”,給出上下文:
特斯拉公布2024年第一季度財報:
- 營收同比下降9%
- 毛利率為17.4%
- 交付量達(dá)到38.6萬輛
有人可能認(rèn)為這個上下文不充分,因為沒有給出具體的營收數(shù)字。但也有人可能認(rèn)為通過同比下降9%,如果知道去年同期數(shù)據(jù),是可以算出具體數(shù)字的?!?/p>
好在論文作者們沒有放棄,他們搞了一些實驗,得到如下的一些自動評估方法:
- 使用Gemini 1.5 Pro配合精心設(shè)計的提示詞。這種方法在人工標(biāo)注的測試集上達(dá)到了93%的準(zhǔn)確率,顯示出了最好的表現(xiàn)。
- 使用FLAMe(一個24B參數(shù)的評估模型)。雖然模型相對較小,但通過將長文本分塊評估的策略,也取得了不錯的效果。
- 使用傳統(tǒng)的蘊含關(guān)系判斷模型TRUE-NLI。這種方法的特點是需要參考標(biāo)準(zhǔn)答案,實用性相對較差。
從實驗結(jié)果來看,大模型確實能夠相當(dāng)準(zhǔn)確地判斷上下文是否充分。這為我們構(gòu)建更智能的RAG系統(tǒng)打開了一扇門。
選擇性生成:讓模型學(xué)會“有所為有所不為”
上面我們提到了:模型既然在信息不充分的時候,可能回答錯誤。那么,順理成章的想法就是:能否讓模型在上下文不充分時,主動選擇不回答問題?
這個想法聽起來很自然,但實現(xiàn)起來好像并不容易。因為如前所述,即使在上下文不充分的情況下,模型有時也能給出正確答案。如果簡單地讓模型在上下文不充分時都拒絕回答,反而會損失這部分正確答案?!?/p>
為了能夠達(dá)到這個目的,論文作者們設(shè)計了一個方案計算如下的兩個結(jié)果:
- 上下文是否充分的判斷結(jié)果
- 模型對自己答案的確信度評分
也就是說,對于每個問題,他們會:
- 用FLAMe模型判斷上下文是否充分
- 讓主模型生成答案和確信度
- 將這兩個信號輸入到一個簡單的邏輯回歸模型中
- 根據(jù)邏輯回歸的預(yù)測分?jǐn)?shù)決定是否輸出答案
這個方案的高明之處在于:它不是簡單地依據(jù)單一因素做決定,而是學(xué)習(xí)了在什么情況下模型更容易給出正確答案。比如,即使上下文不充分,如果模型的確信度特別高,可能也值得冒險輸出答案?!?/p>
論文中的實驗結(jié)果顯示,這種方法能在保持一定回答覆蓋率的同時,將正確答案的比例提高2-10%。這個提升看似不大,但考慮到基線系統(tǒng)已經(jīng)相當(dāng)強大,這樣的改進仍然很有意義?!?/p>
微調(diào)之路:事情沒那么簡單
除了在推理階段加入控制機制,作者也嘗試了另一個直觀的想法:能否通過微調(diào)讓模型天生就更懂得在上下文不充分時保持謹(jǐn)慎?
他們設(shè)計了三種訓(xùn)練數(shù)據(jù)混合策略:
- 保持原始答案不變
- 隨機選擇20%的樣本,將答案改為“不知道”
- 選擇20%上下文不充分的樣本,將答案改為“不知道”
然而,實驗結(jié)果有出人意料了。雖然微調(diào)后的模型確實會更多地說“不知道”,但這似乎是以犧牲某些場景下的表現(xiàn)為代價的。比如,有些原本能正確回答的問題,現(xiàn)在模型反而選擇了放棄。從這里我們可以看出:模型行為的改進并不是簡單的“多說不知道”就行了,而是需要在各種場景下都保持合理的判斷?!?/p>
這項工作不僅能讓我們更好地理解RAG系統(tǒng)中的行為模式,也給改進RAG系統(tǒng)提供了一些新的思路:
- 在構(gòu)建RAG系統(tǒng)時,除了關(guān)注檢索的相關(guān)性,還應(yīng)該評估上下文是否充分??梢钥紤]:
- 使用自動評估工具(如FLAMe)判斷上下文充分性
- 在檢索時增加迭代策略,當(dāng)上下文不充分時嘗試檢索更多信息
- 設(shè)計更好的提示詞,引導(dǎo)模型在上下文不充分時主動說“不知道”
- 在評估RAG系統(tǒng)時,應(yīng)該分層次看待性能:
- 上下文充分時的表現(xiàn)
- 上下文不充分時是否能合理拒答
- 即使上下文不充分,利用預(yù)訓(xùn)練知識作答的準(zhǔn)確率
- 選擇合適的基座模型:
- 如果任務(wù)要求高準(zhǔn)確率,專有模型在有充分上下文時表現(xiàn)更好
- 如果希望模型在信息不足時更謹(jǐn)慎,可能需要額外的機制來約束模型行為
從“能用”到“好用”的還有一段路要走
還記得文章開頭我們提到的困擾嗎?“明明提供了相關(guān)上下文,為什么模型還是會出錯”。通過這篇論文,我們似乎找到了一些答案:上下文不只是要相關(guān),還要充分;模型不只是要會用上下文,還要懂得合理取舍?!?/p>
就像我們?nèi)祟愒诨卮饐栴}時,有時會說“讓我查查資料”,有時會說“這個我知道”,有時會說“抱歉,我沒有足夠的信息來回答”。
那 RAG 系統(tǒng)能否更加智能一點呢?想象一下,如果你的大模型不只會判斷手上的資料夠不夠用,還能主動告訴你:“這個問題要回答準(zhǔn)確的話,我還需要知道XX和YY”,是不是會更貼心?或者更進一步,它能說:“基于目前的信息我只能給出一個大致的答案,如果你需要更準(zhǔn)確的信息,我建議查看最新的XX”,這樣的體驗是不是會更好?
如果要實現(xiàn)這些yy 的功能,需要我們在“充分上下文”的基礎(chǔ)上繼續(xù)探索。比如:
- 在檢索階段,不只是找相關(guān)的文檔,而是要理解問題需要哪些具體信息點,有針對性地進行檢索。
- 在回答階段,不只是決定說還是不說,而是要能夠進行信息完整性的評估,給出恰當(dāng)?shù)南薅ㄕZ和建議。
- 在交互階段,不只是被動地接受上下文,而是要能主動詢問,逐步完善必要的信息。
