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