Advanced RAG 10:引入檢索評估、知識精練的 CRAG 技術(shù)詳解 原創(chuàng) 精華
編者按:本文介紹的 CRAG 技術(shù)通過引入輕量級檢索評估機(jī)制和知識精煉算法,試圖解決傳統(tǒng)檢索增強(qiáng)生成(RAG)方法在處理復(fù)雜查詢語句時存在的問題(包括檢索結(jié)果不夠精確、引入無關(guān)信息等),這些問題會影響模型回答的質(zhì)量。
CRAG 技術(shù)如何評估檢索文檔與用戶查詢之間的相關(guān)性?檢索評估器的具體工作原理是什么?CRAG的知識精煉算法是如何工作的?它如何確保在“細(xì)分再整合”的過程中不會丟失重要信息?如若您現(xiàn)在對這些問題充滿好奇,期望本文能夠為您解答清楚。
文章通過生動的類比、詳細(xì)的技術(shù)闡述和實際的代碼示例,全面展現(xiàn)了 CRAG 的工作原理和實現(xiàn)方法。同時,本文作者還深入探討、比較了 CRAG 與其他先進(jìn) RAG 技術(shù)的區(qū)別,并對該技術(shù)的未來優(yōu)化方向給出了自己的看法。
期待 CRAG 能夠在各種復(fù)雜的信息檢索和知識生成場景中發(fā)揮重要作用,也期望各位讀者能夠通過閱讀本文有所收獲。
作者 | Florian June
編譯 | 岳揚(yáng)
這篇文章繼續(xù)從一個我們熟悉的生活場景講起 —— 開卷考試。面對這樣的考試,我們通常有三種應(yīng)對策略可供選擇:
- 第一種方法:迅速作答熟悉的題目。遇到不熟悉的題目,則翻閱教科書。快速找到相關(guān)章節(jié),心中整理并歸納其要點,然后在試卷上寫下答案。
- 第二種方法:對于每一道題,都翻書查找。鎖定相關(guān)章節(jié),在心中提煉要點,再將答案寫在試卷上。
- 第三種方法:對于每一道題,都先查閱書籍找出相關(guān)章節(jié)。在形成自己的觀點前,將搜集到的信息分類為三類:正確、錯誤和不確定。針對不同類型的信息采取不同的處理方式。隨后,依據(jù)這些經(jīng)過篩選的信息,在心中整合并提煉出答案。最后將答案寫在試卷上。
第一種方法就像本系列第八篇文章介紹的 self-RAG 技術(shù),而第二種則是傳統(tǒng)的 RAG 技術(shù)。
最后,將在本文中介紹第三種方法,即 Corrective Retrieval Augmented Generation(CRAG)。
01 為什么會出現(xiàn) CRAG 技術(shù)?
圖 1:這些例子表明,低效的檢索器(retriever)容易引入大量無關(guān)的信息,會阻礙生成器(generators)獲取準(zhǔn)確的知識,甚至可能將其引入歧途。資料來源:Corrective Retrieval Augmented Generation[1]
圖 1 指出了傳統(tǒng) RAG 方法存在的一個問題:大多數(shù)傳統(tǒng)的 RAG 方法會忽視文檔內(nèi)容與用戶問題之間的相關(guān)性,只是簡單地把檢索到的文檔拼接在一起。這種做法可能導(dǎo)致無關(guān)信息的混入,不僅妨礙模型獲取準(zhǔn)確的知識,還可能誤導(dǎo)模型,從而引發(fā)幻覺問題。
此外,大多數(shù)傳統(tǒng) RAG 方法都是將檢索到的整篇文檔傳遞給大模型。 然而,這些文檔中的大部分內(nèi)容實際上對模型響應(yīng)的生成過程并沒有實質(zhì)性的幫助,不應(yīng)該被無差別地傳遞給大模型。
02 CRAG 的核心理念
CRAG 構(gòu)思了一種輕量級的檢索評估機(jī)制,可用于評判針對特定用戶請求所獲取文檔的總體品質(zhì),并創(chuàng)造性地運用網(wǎng)絡(luò)搜索(web search)技術(shù),以此增強(qiáng)檢索結(jié)果的準(zhǔn)確性。
CRAG 具備出色的兼容性,即插即用,能夠輕松融入各種基于 RAG 的策略體系,其整體框架如圖 2 所示。
圖 2:CRAG(紅色虛線框標(biāo)記)在 RAG 架構(gòu)中的定位。其巧妙地引入檢索評估模塊,可用于評估檢索文檔與用戶需求的相關(guān)性,并據(jù)此估計可信度(confidence level),進(jìn)而觸發(fā)三類不同的知識檢索策略,即 {正確、錯誤、不確定} 。其中,“x”代表用戶的查詢請求。該圖由作者原創(chuàng),CRAG 部分(紅色虛線框標(biāo)記)取自《Corrective Retrieval Augmented Generation》[1]
如圖 2 所示,CRAG 通過引入檢索評估器(retrieval evaluator) 改進(jìn)傳統(tǒng) RAG 方法,能夠更精準(zhǔn)地衡量檢索文檔與查詢指令間的相關(guān)度。
存在三種可能的判定結(jié)果:
- 若判定為“正確”,表示檢索出的文檔包含了回答用戶查詢需要的關(guān)鍵信息,此時可以啟用知識精煉算法(knowledge refinement algorithm),對文檔內(nèi)容進(jìn)行重寫優(yōu)化。
- 若判定為“錯誤”,則意味著用戶查詢與檢索出的文檔完全不相關(guān)。因此,我們不能將這類文檔發(fā)送給大語言模型(LLM)進(jìn)行處理。在 CRAG 技術(shù)方案中,會使用網(wǎng)絡(luò)搜索引擎來檢索更多外部知識。
- 若判定為“不確定”,表明檢索出的文檔雖與需求相去不遠(yuǎn),但尚不足以直接給出答案。這時,就需要通過網(wǎng)絡(luò)搜索來補(bǔ)充缺失信息。因此,既要運用知識精煉算法,又需要搜索引擎的助力。
最后,經(jīng)過一系列加工處理的信息會被轉(zhuǎn)發(fā)給大語言模型(LLM),以便生成最終的模型響應(yīng)。圖 3 詳細(xì)描述了這一過程。
圖 3:評估與處理步驟,摘選自《Corrective Retrieval Augmented Generation》一文
請注意,網(wǎng)絡(luò)搜索技術(shù)(web search)并非直接使用用戶的原始輸入進(jìn)行搜索。相反,該技術(shù)會先構(gòu)建一個引導(dǎo)性提示詞(prompt),然后給出少量示例(few-shot),將其發(fā)送給GPT-3.5 Turbo,借此獲取更精準(zhǔn)的搜索查詢語句。
在對整個處理流程有了一定的了解后,接下來我們將聚焦于 CRAG 體系中的兩大核心模塊 —— 檢索評估機(jī)制(retrieval evaluator)與知識精煉算法(knowledge refinement algorithm),逐一展開深入探討。
2.1 檢索評估機(jī)制(retrieval evaluator)
如圖 4 所示,檢索評估器對后續(xù)環(huán)節(jié)的成效具有深遠(yuǎn)影響,其對整體系統(tǒng)性能的影響較大。
圖 4:CRAG 的知識修正(Knowledge correction)流程。Source: Corrective Retrieval Augmented Generation[1]
CRAG 采用一個經(jīng)過微調(diào)的 T5-large 模型作為檢索評估器(retrieval evaluator),在如今這個大語言模型時代,T5-large[2] 也被視為輕量級的語言模型。
對于每個特定的用戶查詢,系統(tǒng)通常會提取約十篇文獻(xiàn)資料。緊接著,將用戶查詢內(nèi)容與每篇文獻(xiàn)逐一結(jié)合,形成模型輸入,然后評估它們的相關(guān)度(relevance)。在模型微調(diào)過程中,positive samples 會被打上標(biāo)簽“1”,而 negative samples 的則標(biāo)注為“-1”。到了模型推理階段,評估器會為每篇文檔計算一個相關(guān)性分?jǐn)?shù),數(shù)值區(qū)間在 -1 至 1 之間。
這些相關(guān)性分?jǐn)?shù)依據(jù)特定閾值將被劃分為三大類別。劃分類別這一操作需要界定兩個不同的閾值界限。CRAG 系統(tǒng)中的閾值配置靈活性較高,可根據(jù)實驗數(shù)據(jù)的具體情況調(diào)整設(shè)定:
為了決定這三種判定結(jié)果的判定方法,我們根據(jù)經(jīng)驗確定了兩組可信度閾值(confidence thresholds)。它們在不同數(shù)據(jù)集中的具體數(shù)值如下:PopQA 數(shù)據(jù)集的閾值為(0.59, -0.99),PubQA 和 ArcChallenge 數(shù)據(jù)集的閾值是(0.5, -0.91),而在 Biography 數(shù)據(jù)集中,閾值則被設(shè)定為(0.95, -0.91)。
2.2 知識精煉算法(knowledge refinement algorithm)
CRAG 針對檢索到的相關(guān)文檔,創(chuàng)新性地采取了一種 “細(xì)分再整合” 的策略來深度挖掘最核心的知識信息,此過程如圖 4 所示。
第一步依賴于一套啟發(fā)式規(guī)則,將每篇文檔分解為多個細(xì)粒度的知識點,以便挖掘更加精確的信息。 如果檢索到的文檔只有一兩句話,則應(yīng)將其視作一個獨立的信息單元;而對于篇幅較長的文檔,則依據(jù)其總長度,靈活切分為由數(shù)個句子組成的多個更小單元,確保每個小單元都封裝一條獨立完整的信息。
隨后,借助檢索評估機(jī)制,計算每一個細(xì)分知識點的相關(guān)性得分,濾除相關(guān)性得分較低的部分。然后余下的高相關(guān)性知識點經(jīng)過重組,形成內(nèi)部知識庫(internal knowledge)。
03 Code Explanation 代碼解讀
CRAG 是一種開源技術(shù),Langchain 和 LlamaIndex 這兩大平臺都支持并實現(xiàn)了這種技術(shù)。在此我們將以 LlamaIndex 的實現(xiàn)版本為藍(lán)本進(jìn)行詳細(xì)解析。
3.1 環(huán)境配置
安裝完成后,LlamaIndex 和 Tavily 的相應(yīng)版本如下:
3.2 測試代碼
測試代碼如下。第一次運行需要下載CorrectiveRAGPack。
其中 YOUR_TAVILYAI_API_KEY 可通過此網(wǎng)站[3]申請。
測試代碼的運行結(jié)果如下(大部分調(diào)試信息已被刪除):
要了解測試代碼,需要深入剖析 corrective_rag.run() 方法的實現(xiàn)細(xì)節(jié),接下來讓我們一探究竟。
3.3 類 CorrectiveRAGPack 的構(gòu)造函數(shù)
首先我們來看看該構(gòu)造函數(shù),其源代碼[4]如下:
請注意,系統(tǒng)默認(rèn)配置采用的是 gpt-4 模型。若您不具備使用 gpt-4 的權(quán)限,可將其手動調(diào)整為 gpt-3.5-turbo 或其他大模型的 API。
3.4 class CorrectiveRAGPack:: run()
函數(shù) run() 的源代碼[5]如下所示:
上述代碼與 CRAG 的標(biāo)準(zhǔn)流程相比,有三點顯著不同之處:
- 未涉及對模棱兩可的“不確定”文檔的辨識與特別處理。
- 在評估檢索信息時,并未采用預(yù)訓(xùn)練的 T5-large 模型,而是轉(zhuǎn)而利用 LLM(大語言模型)進(jìn)行評估。
- 省略了知識精煉(knowledge refinement)這一步驟。
盡管如此,LlamaIndex 還是引入了另一種方法論(langchain 亦有類似實踐),為此類任務(wù)的處理提供了另外一種思考路徑。
3.5 使用 LLM 評估檢索到的信息
具體代碼[6]如下:
調(diào)用 LLM 的提示詞[7]如下所示:
根據(jù) CRAG 論文的內(nèi)容展示,ChatGPT 在評估檢索內(nèi)容相關(guān)性上的性能不及 T5-Large 模型。
而在實際項目中,我們完全能夠使用初始的知識精練算法(knowledge refinement algorithm)。相應(yīng)的代碼實現(xiàn),您可以在此鏈接[8]獲取。
3.6 重寫用于搜索的查詢語句 Rewrite query for search
網(wǎng)絡(luò)搜索功能(web search)并未直接采用用戶輸入的查詢語句。而是通過一種“小樣本(few-shot)”策略,精心構(gòu)造一個引導(dǎo)性提示詞,提交給 GPT-3.5 Turbo 模型,借此生成更適配的搜索請求。該引導(dǎo)性提示詞的構(gòu)造方法如下所示:
04 作者對 CRAG 的見解和思考
4.1 CRAG 與 self-RAG 的區(qū)別
- 從操作流程來看,self-RAG 能夠跳過檢索步驟,直接借助大語言模型(LLM)給出答案,但對比之下, CRAG 在作出回應(yīng)前,必須先完成信息檢索,并加入額外的評估環(huán)節(jié)。
- 從系統(tǒng)架構(gòu)角度分析,self-RAG 的構(gòu)造更為精細(xì),其背后是更為復(fù)雜的訓(xùn)練機(jī)制,以及生成階段中多次迭代的標(biāo)簽生成(label generation)與評估(evaluation)流程,這一特點導(dǎo)致其推理成本相對較高。因此,CRAG 比 selfRAG 更加輕量化。
- 談及其性能表現(xiàn),如圖 5 所示,在大多數(shù)應(yīng)用場景中,CRAG 的性能普遍優(yōu)于 self-RAG。
圖 5:四大數(shù)據(jù)集相關(guān)測試集上的全面評估結(jié)果。這些結(jié)果依據(jù)不同的 LLM 分類展示。其中,加粗?jǐn)?shù)值表示所有方法和 LLM 中的最優(yōu)表現(xiàn);而灰色的加粗?jǐn)?shù)值,則表示特定 LLM 的最佳性能。標(biāo)注星號(*)的內(nèi)容是通過 CRAG 重新驗證得到的結(jié)果,其余結(jié)果均直接引述自相關(guān)研究文獻(xiàn)。Source: 《Corrective Retrieval Augmented Generation》
4.2 對檢索評估器的進(jìn)一步改進(jìn)
檢索評估器可以看作是一個評估分?jǐn)?shù)分類模型,它負(fù)責(zé)評估查詢語句和文檔之間的相關(guān)性,作用近似于 RAG 系統(tǒng)中的重排模型(re-ranking model)。
為了提升這類相關(guān)性判斷模型(relevance judgement models)的實用性,可以集成更多貼近實際場景的特性。比如,在科研論文的問答 RAG 場景中,會有大量專業(yè)詞匯;而在旅游領(lǐng)域的 RAG 場景下,則更多的是日常交流式的用戶提問。
通過向檢索評估器的訓(xùn)練數(shù)據(jù)中融入場景特征(scene features),能有效增強(qiáng)其評估文檔相關(guān)性的能力。此外,還可以引入用戶意圖(user intentions)、文本差異度(edit distance)等因素作為輔助特征,如圖 6 所示:
圖 6: 通過整合更多額外特征,CRAG系統(tǒng)中檢索評估器的訓(xùn)練效能進(jìn)一步提升。圖片由作者提供。
另外,從 T5-Large 模型取得的成效來看,輕量級模型似乎也能取得不錯的效果,這無疑為 CRAG 技術(shù)在規(guī)模較小的團(tuán)隊或公司中的推廣與應(yīng)用帶來了希望。
4.3 檢索評估器的評分標(biāo)準(zhǔn)與閾值設(shè)定
如前文所述,不同類型的數(shù)據(jù)其閾值各有不同。值得注意的是,“不確定”及“不正確”類別閾值普遍趨近于 -0.9 ,這表明大部分檢索到的信息仍與查詢語句具有一定相關(guān)性。因此,完全摒棄這些檢索到的知識,轉(zhuǎn)而純依賴網(wǎng)頁搜索或許并非明智之舉。
針對實際應(yīng)用場景,需緊密貼合具體問題情景與實際需求進(jìn)行靈活調(diào)整。
05 Conclusion
本文從一個生動實例入手,逐步概述 CRAG 的核心流程,并輔以代碼解析,其間穿插個人的見解與深度思考。
綜上所述,CRAG 作為一個即插即用的插件,可以大幅度提高 RAG 的性能表現(xiàn),為 RAG 的改進(jìn)提供了一個輕量級解決方案。
若您對 RAG 技術(shù)感興趣,敬請閱讀本系列其他文章。
Thanks for reading!
Florian June
AI researcher, focusing on LLMs, RAG, Agent, Document AI, Data Structures. Find the newest article in my newsletter: ??https://florianjune.substack.com/??
END
參考資料
[1]??https://arxiv.org/pdf/2401.15884.pdf??
[2]??https://huggingface.co/google-t5/t5-large??
[3]??https://app.tavily.com/sign-in??
[8]??https://github.com/HuskyInSalt/CRAG/blob/main/scripts/internal_knowledge_preparation.py#L58??
原文鏈接:
??https://ai.gopubby.com/advanced-rag-10-corrective-retrieval-augmented-generation-crag-3f5a140796f9??
