RAG(八)自反思檢索增強(qiáng)生成--Self-RAG
大語(yǔ)言模型具有顯著的能力,但它們常常因?yàn)閮H依賴(lài)于其參數(shù)化知識(shí)而產(chǎn)生包含事實(shí)錯(cuò)誤的響應(yīng)。傳統(tǒng)的檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)方法雖然能減少這些問(wèn)題,但是存在無(wú)差別地檢索和結(jié)合固定數(shù)量的段落,沒(méi)有考慮檢索是否必要或檢索結(jié)果的相關(guān)性,都會(huì)削弱語(yǔ)言模型的靈活性,或者導(dǎo)致無(wú)益的響應(yīng)生成。
現(xiàn)在LLM+RAG(檢索增強(qiáng))的技術(shù)方案已成為L(zhǎng)LM在眾多應(yīng)用場(chǎng)景的主流。在LLM+RAG技術(shù)框架下,存在的問(wèn)題/技術(shù)難點(diǎn)主要有:
1)如何保證檢索內(nèi)容是有效,或有用的?
2)如何驗(yàn)證檢索的內(nèi)容對(duì)輸出的結(jié)果是支持的?
3)如何驗(yàn)證輸出的結(jié)果是來(lái)自檢索還是模型的生成?
今天來(lái)看一篇華盛頓大學(xué)和艾倫AI Lab發(fā)表在2024 ICLR上的工作,提出Self-RAG,使單一的語(yǔ)言模型能夠根據(jù)需求自適應(yīng)地檢索段落,并使用特殊的反思Token(reflection tokens)來(lái)生成和反思檢索到的段落及自身生成的內(nèi)容。
下面來(lái)詳細(xì)看下Self-RAG是如何解決這些問(wèn)題的:
1、方法介紹
從Figure 1可以看出Self-RAG和Vanilla RAG的區(qū)別,
傳統(tǒng)RAG方法的工作流程通常包括:
- Step 1: 檢索K個(gè)文檔:無(wú)論是否有必要,都會(huì)從大型文檔集合中無(wú)差別地檢索出固定數(shù)量的相關(guān)段落。
- Step 2: 生成輸出:根據(jù)檢索到的段落和原始任務(wù)輸入,生成響應(yīng)文本。這種方法可能無(wú)法確保所有生成的內(nèi)容都得到了檢索段落的支持。
相比之下,SELF-RAG方法引入了一個(gè)更靈活且智能的流程:
- Step 1: 決定是否檢索:給定一個(gè)輸入提示和先前的生成,SELF-RAG首先判斷繼續(xù)生成時(shí)是否需要通過(guò)檢索來(lái)增強(qiáng)信息。如果確定需要檢索,它會(huì)輸出一個(gè)檢索Token(retrieval token),該Token會(huì)按需調(diào)用檢索模型。
- Step 2: 并行處理多個(gè)檢索段落:當(dāng)接收到檢索Token后,SELF-RAG并行處理多個(gè)檢索到的段落,評(píng)估它們的相關(guān)性,并基于這些段落生成相應(yīng)的任務(wù)輸出。
- Step 3: 自我評(píng)價(jià)與選擇最佳片段:SELF-RAG接著生成評(píng)價(jià)Token(critique tokens),用于評(píng)價(jià)自身生成的輸出,并從中挑選出最符合事實(shí)性和整體質(zhì)量的輸出。
簡(jiǎn)單來(lái)說(shuō),對(duì)比RAG,self-RAG框架的不同之處就是:在生成過(guò)程中利用特殊的token達(dá)到更精細(xì)的控制——要不要檢索、檢索內(nèi)容相關(guān)性怎樣、利用檢索內(nèi)容生成的質(zhì)量怎樣。達(dá)到這些目的,就會(huì)讓RAG+LLM生成的內(nèi)容在質(zhì)量、事實(shí)性、驗(yàn)證性上得到提升。
下面來(lái)詳細(xì)看下怎么利用特殊Token實(shí)現(xiàn)Self-RAG:
問(wèn)題概述
給定一個(gè)輸入x,訓(xùn)練目標(biāo)是讓模型M順序生成由多個(gè)片段組成的文本輸出,其中
代表第t個(gè)片段的一系列Token。每個(gè)片段可以是一個(gè)句子或者更小的文本單位,這取決于具體的實(shí)現(xiàn)。生成的Token不僅包含來(lái)自原始詞匯表中的文本,還可能包含特殊的反思Token(reflection tokens),這些Token用于指示是否需要進(jìn)行檢索,或者確認(rèn)輸出的相關(guān)性、支持性或完整性。
對(duì)于每一個(gè)輸入x及其之前生成的內(nèi)容,模型首先解碼一個(gè)檢索Token來(lái)評(píng)估檢索的必要性。如果不需要檢索,模型會(huì)像標(biāo)準(zhǔn)的語(yǔ)言模型一樣預(yù)測(cè)下一個(gè)輸出片段。如果確定需要檢索,那么模型將:
- 生成評(píng)價(jià)Token以評(píng)估相關(guān)性:模型生成一個(gè)評(píng)價(jià)Token來(lái)評(píng)價(jià)檢索到的段落是否與任務(wù)相關(guān)。
- 生成下一個(gè)響應(yīng)片段:根據(jù)檢索到的信息生成接下來(lái)的響應(yīng)部分。
- 生成評(píng)價(jià)Token以評(píng)估支持度:評(píng)價(jià)新生成的響應(yīng)片段是否得到了檢索到的段落的支持。
- 生成評(píng)價(jià)Token以評(píng)估整體效用:最后生成一個(gè)新的評(píng)價(jià)Token,對(duì)整個(gè)響應(yīng)的總體效用進(jìn)行評(píng)價(jià)。
在生成每個(gè)片段的過(guò)程中,SELF-RAG并行處理多個(gè)檢索到的段落,并使用其自身生成的反思Token來(lái)施加軟約束或硬控制。例如,在決定是否插入某個(gè)段落時(shí),模型會(huì)考慮該段落的相關(guān)性和支持程度。如果存在多個(gè)滿(mǎn)足條件的段落,則選擇具有最高檢索分?jǐn)?shù)的那個(gè)。
訓(xùn)練概述
SELF-RAG通過(guò)將反思Token統(tǒng)一為從擴(kuò)展模型詞匯表中預(yù)測(cè)的下一個(gè)Token,訓(xùn)練一個(gè)任意的語(yǔ)言模型生成帶有反思Token的文本。
具體來(lái)說(shuō),使用由檢索器R檢索的段落和由評(píng)價(jià)模型C預(yù)測(cè)的反思Token交織在一起的精選語(yǔ)料庫(kù)訓(xùn)練生成器模型M。使用評(píng)價(jià)模型,通過(guò)將反思Token插入任務(wù)輸出中來(lái)更新訓(xùn)練語(yǔ)料庫(kù)。然后,使用傳統(tǒng)的語(yǔ)言模型目標(biāo)訓(xùn)練最終的生成器模型M,使其能夠在推理時(shí)不依賴(lài)評(píng)價(jià)模型自行生成反思Token。
訓(xùn)練
在訓(xùn)練過(guò)程中,需要兩個(gè)模型:一個(gè)評(píng)價(jià)模型C,一個(gè)生成模型M;利用評(píng)價(jià)模型C來(lái)生成M模型所需的監(jiān)督數(shù)據(jù),在推理過(guò)程中只依賴(lài)M模型,不用C模型。
訓(xùn)練評(píng)價(jià)模型(Critic Model)
- 數(shù)據(jù)收集:
手動(dòng)為每個(gè)段落標(biāo)注反思Token成本很高,因此研究人員采用GPT-4來(lái)生成這些反饋。通過(guò)向GPT-4發(fā)出指令提示,使其為特定的任務(wù)輸入-輸出對(duì)預(yù)測(cè)適當(dāng)?shù)姆此糡oken,從而創(chuàng)建監(jiān)督數(shù)據(jù)。這種方法需要對(duì)多個(gè)檢索到的段落以及任務(wù)輸入-輸出實(shí)例進(jìn)行細(xì)粒度評(píng)估,以生成用于訓(xùn)練SELF-RAG的數(shù)據(jù),并將這些知識(shí)蒸餾到一個(gè)內(nèi)部的評(píng)價(jià)模型C中。
對(duì)于每組反思Token,從原始訓(xùn)練數(shù)據(jù)中隨機(jī)采樣實(shí)例。然后使用不同的指令提示(表1)來(lái)生成不同類(lèi)型的反思Token(如Retrieve、ISREL、ISSUP、ISUSE)。例如,對(duì)于Retrieve Token,使用原始任務(wù)輸入x和輸出y的少量示例提示GPT-4判斷是否需要從外部文檔中獲取信息以生成更好的響應(yīng)
。收集4k到20k的監(jiān)督訓(xùn)練數(shù)據(jù)用于每種類(lèi)型的反思Token,并將它們組合成C的訓(xùn)練數(shù)據(jù)。
- 評(píng)價(jià)模型學(xué)習(xí):
在收集到的訓(xùn)練數(shù)據(jù)上,使用預(yù)訓(xùn)練的語(yǔ)言模型初始化C,并進(jìn)行訓(xùn)練。最大化似然:
其中r是反思Token。使用與生成器模型相同的預(yù)訓(xùn)練語(yǔ)言模型(Llama 2-7B)來(lái)初始化C。訓(xùn)練后評(píng)價(jià)模型的表現(xiàn)如下:
訓(xùn)練生成器模型(Generator Model)
- 數(shù)據(jù)收集:
給定輸入-輸出對(duì),運(yùn)行 C評(píng)估是否需要額外的段落來(lái)增強(qiáng)生成。
如果需要檢索,添加檢索特殊Token Retrieve=Yes,并使用R檢索頂部K個(gè)段落D。對(duì)于每個(gè)段落,C 進(jìn)一步評(píng)估段落的相關(guān)性并預(yù)測(cè) ISREL。如果段落相關(guān),C 進(jìn)一步評(píng)估段落是否支持模型生成并預(yù)測(cè) ISSUP。在輸出的末尾,C 預(yù)測(cè)整體效用Token ISUSE,并將帶有反思Token的增強(qiáng)輸出和原始輸入對(duì)添加到中。
- 生成器模型學(xué)習(xí):
在增強(qiáng)的語(yǔ)料庫(kù)上,使用標(biāo)準(zhǔn)的下一個(gè)Token目標(biāo)訓(xùn)練生成器模型 M進(jìn)行訓(xùn)練:
與C的訓(xùn)練不同,M 學(xué)習(xí)預(yù)測(cè)目標(biāo)輸出以及反思Token。在訓(xùn)練期間,對(duì)于損失計(jì)算,屏蔽檢索的文本塊,并將原始詞匯表 V 擴(kuò)展為一組反思Token {Critique,Retrieve}。
以上就是訓(xùn)練的過(guò)程,其核心就是生成模型M的訓(xùn)練,而M模型的不同之處在于,在生成文本序列的同時(shí),還會(huì)輔助生成多種標(biāo)簽信息,以達(dá)到更細(xì)粒度的檢索控制能力。
推理
生成反思Token以自我評(píng)估其輸出使得Self-RAG在推理階段可控,使其能夠根據(jù)不同的任務(wù)需求調(diào)整其行為。對(duì)于需要事實(shí)準(zhǔn)確性的任務(wù),希望模型更頻繁地檢索段落,以確保輸出與可用證據(jù)緊密一致。相反,在更開(kāi)放的任務(wù)中,如撰寫(xiě)個(gè)人經(jīng)歷的文章,重點(diǎn)則轉(zhuǎn)向減少檢索并優(yōu)先考慮整體創(chuàng)造力或效用評(píng)分。
主要思路:1)在自回歸方式生成過(guò)程中,若生成有[Retrieve]標(biāo)簽,且值為yes時(shí),便使用檢索器(檢索模型)R召回d個(gè)相關(guān)片段;2)接著訓(xùn)練利用召回的相關(guān)片段去預(yù)測(cè)是否相關(guān)[IsREL]標(biāo)簽,以及評(píng)價(jià)標(biāo)簽[IsSUP]和[IsUSE]標(biāo)簽,跟進(jìn)這些標(biāo)簽對(duì)生成的序列進(jìn)行排序,選top1的結(jié)果作為最終生成結(jié)果;3)若生成有[Retrieve]==NO時(shí),就直接利用x生成。
具體實(shí)現(xiàn)如下:
自適應(yīng)檢索(Adaptive Retrieval)
動(dòng)態(tài)檢索決策:SELF-RAG在推理過(guò)程中動(dòng)態(tài)決定是否需要檢索文本段落。這是通過(guò)預(yù)測(cè)“Retrieve”Token來(lái)實(shí)現(xiàn)的。如果模型預(yù)測(cè)“Retrieve = Yes”,則觸發(fā)檢索過(guò)程。否則,模型將繼續(xù)生成文本,而不進(jìn)行檢索。為了更靈活地控制檢索頻率,作者引入了一個(gè)閾值機(jī)制。如果生成“Retrieve = Yes”Token的概率超過(guò)指定的閾值,則觸發(fā)檢索。這種機(jī)制允許在不同任務(wù)中靈活調(diào)整檢索頻率,以適應(yīng)不同的任務(wù)需求。
基于評(píng)價(jià)Token的樹(shù)解碼(Tree-decoding with Critique Tokens)
- 并行處理和候選生成:
當(dāng)需要檢索時(shí),SELF-RAG會(huì)并行處理多個(gè)檢索到的段落,并為每個(gè)段落生成不同的候選續(xù)寫(xiě)。
具體來(lái)說(shuō),對(duì)于每個(gè)輸入x 和之前的生成,模型會(huì)預(yù)測(cè)是否需要檢索。如果需要檢索,模型會(huì)檢索K個(gè)相關(guān)段落D,并為每個(gè)段落生成一個(gè)候選續(xù)寫(xiě)。這些候選續(xù)寫(xiě)會(huì)通過(guò)段落級(jí)別的束搜索(beam search=B)進(jìn)行評(píng)估和選擇,并在生成結(jié)束時(shí)返回最佳序列。
- 評(píng)價(jià)Token的評(píng)分機(jī)制:
每個(gè)候選續(xù)寫(xiě)的評(píng)分由兩部分組成:生成概率和評(píng)價(jià)分?jǐn)?shù)。
生成概率表示在給定輸入x、段落d 和之前的生成
的情況下,生成
的概率。
評(píng)價(jià)分?jǐn)?shù)S(Critique) 是評(píng)價(jià)Token的加權(quán)線(xiàn)性組合。具體來(lái)說(shuō),對(duì)于每種評(píng)價(jià)Token類(lèi)型G(如 ISREL、ISSUP、ISUSE),計(jì)算其在時(shí)間戳t的評(píng)分,然后使用加權(quán)和來(lái)計(jì)算段落的總評(píng)分:
其中,
,
,
表示評(píng)價(jià)Token類(lèi)型G 的最理想反思Token
(例如,[IsRel]=Relevant)的生成概率,
是在推理時(shí)調(diào)整的超參數(shù),以在測(cè)試時(shí)實(shí)現(xiàn)自定義行為。
推理過(guò)程的靈活性和定制性
- 任務(wù)需求的適應(yīng)性:SELF-RAG通過(guò)生成反思Token,能夠在推理階段自我評(píng)估其輸出的質(zhì)量,并根據(jù)任務(wù)需求調(diào)整其行為。在需要高事實(shí)準(zhǔn)確性的任務(wù)中,模型會(huì)更頻繁地進(jìn)行檢索,以確保輸出與可用證據(jù)緊密對(duì)齊。在更開(kāi)放的任務(wù)中,如創(chuàng)作個(gè)人經(jīng)歷作文,模型會(huì)減少檢索頻率,優(yōu)先考慮整體的創(chuàng)造力或效用得分。
- 推理時(shí)的定制化:通過(guò)調(diào)整評(píng)價(jià)Token的權(quán)重,可以在推理時(shí)對(duì)模型的行為進(jìn)行定制,而無(wú)需額外的訓(xùn)練。例如,可以通過(guò)增加 ISSUP的權(quán)重來(lái)確保輸出主要由證據(jù)支持,同時(shí)相對(duì)降低其他方面的權(quán)重。
2、實(shí)驗(yàn)結(jié)果
無(wú)檢索的基線(xiàn)模型比較
Baseline:公開(kāi)可用的預(yù)訓(xùn)練模型(如Llama2-7B、Alpaca7B和Alpaca13B),以及使用私有數(shù)據(jù)訓(xùn)練和強(qiáng)化的模型(如ChatGPT和Llama2-chat)。還包括CoVE65B,這是一種同時(shí)引入迭代提示工程來(lái)提高生成事實(shí)性的方法。
SELF-RAG在所有任務(wù)中均顯著優(yōu)于沒(méi)有檢索的基線(xiàn)模型,包括監(jiān)督微調(diào)的大型語(yǔ)言模型(LLMs)。在公共健康(PubHealth)、開(kāi)放域問(wèn)答(PopQA)、傳記生成和長(zhǎng)文本問(wèn)答(ASQA)任務(wù)中,SELF-RAG甚至超過(guò)了ChatGPT。與使用復(fù)雜提示工程的CoVE方法相比,SELF-RAG在生物傳記生成任務(wù)中表現(xiàn)更好。
帶檢索的基線(xiàn)模型比較
Baseline:
- 標(biāo)準(zhǔn)RAG基線(xiàn):基于Llama2或Alpaca的語(yǔ)言模型,在生成輸出時(shí)會(huì)將檢索到的文檔附加到查詢(xún)之前。
- 微調(diào)后的Llama2(Llama2-FT):在所有訓(xùn)練數(shù)據(jù)上進(jìn)行了微調(diào),不包含反思Token或檢索到的段落。
- 私有數(shù)據(jù)檢索增強(qiáng)的模型:如Ret-ChatGPT和Ret-Llama2-chat,以及perplexity.ai,它們部署了類(lèi)似的增強(qiáng)技術(shù)。
- 并行方法:如SAIL和Toolformer,這些方法分別在指令調(diào)整期間插入檢索到的文檔或預(yù)先訓(xùn)練帶有API調(diào)用的語(yǔ)言模型。
SELF-RAG在許多任務(wù)中也優(yōu)于現(xiàn)有的檢索增強(qiáng)模型(RAG),在所有任務(wù)中均獲得了非專(zhuān)有語(yǔ)言模型基礎(chǔ)模型中的最佳性能。盡管指令調(diào)優(yōu)的LLMs(如Llama2-chat和Alpaca)在檢索后有顯著提升,但在需要復(fù)雜推理或生成的任務(wù)中,這些基線(xiàn)模型的表現(xiàn)并不如SELF-RAG。在引用準(zhǔn)確性方面,大多數(shù)帶檢索的基線(xiàn)模型表現(xiàn)不佳,而SELF-RAG在ASQA任務(wù)中顯示出顯著更高的引用精度和召回率。
消融研究(Ablation Studies)
研究人員構(gòu)建了幾個(gè)SELF-RAG的變體以識(shí)別哪些因素發(fā)揮了重要作用:
- No Retriever:該變體僅使用標(biāo)準(zhǔn)指令跟隨方法訓(xùn)練語(yǔ)言模型,不利用檢索到的段落。
- No Critic:這個(gè)變體總是用最上面的一個(gè)檢索文檔來(lái)增強(qiáng)輸入輸出對(duì),但沒(méi)有反思Token,類(lèi)似于SAIL的方法,不過(guò)這里使用的是自己的指令輸出數(shù)據(jù)而不是Alpaca數(shù)據(jù)集。
- No Retrieval:推理時(shí)禁用檢索功能。
- Hard Constraints:當(dāng)且僅當(dāng)檢索Token為“是”時(shí)才進(jìn)行檢索,而不是采用自適應(yīng)閾值。
- Retrieve Top 1:始終檢索并使用最上面的一個(gè)文檔,類(lèi)似于傳統(tǒng)的RAG方法。
- Remove ISSUP:在批判導(dǎo)向的束搜索過(guò)程中移除ISSUP評(píng)分。
與沒(méi)有檢索器或評(píng)價(jià)器的模型相比,SELF-RAG在所有任務(wù)中表現(xiàn)出顯著的性能提升,表明這些組件對(duì)性能的貢獻(xiàn)很大。
使用Top段落而不考慮其相關(guān)性(如標(biāo)準(zhǔn)RAG方法)會(huì)導(dǎo)致性能大幅下降,而僅依賴(lài)相關(guān)性分?jǐn)?shù)也不足以提高性能。
檢索機(jī)制:檢索機(jī)制顯著提升了模型在需要外部信息的任務(wù)上的表現(xiàn),特別是在事實(shí)驗(yàn)證和引用準(zhǔn)確性方面。
自我評(píng)價(jià)機(jī)制:反思Token(如ISREL, ISSUP, ISUSE)有助于提高輸出的相關(guān)性和支持度,從而改善模型的整體效用。
自適應(yīng)閾值:相較于固定規(guī)則,自適應(yīng)閾值使得模型能夠在適當(dāng)?shù)臅r(shí)候動(dòng)態(tài)決定是否檢索,提高了靈活性和效率。
這些結(jié)果表明,SELF-RAG通過(guò)仔細(xì)選擇生成內(nèi)容并基于多個(gè)細(xì)粒度標(biāo)準(zhǔn)進(jìn)行評(píng)估,而不是簡(jiǎn)單地使用檢索模型的所有段落或僅依賴(lài)相關(guān)性分?jǐn)?shù),從而提高了生成質(zhì)量。
推理時(shí)定制化的效果
SELF-RAG的一個(gè)關(guān)鍵優(yōu)勢(shì)是能夠在推理時(shí)控制每種評(píng)價(jià)類(lèi)型對(duì)最終生成采樣的影響(圖3 b)。例如,在ASQA任務(wù)中,通過(guò)增加ISSUP的權(quán)重,可以提高模型的引用精度,因?yàn)檫@強(qiáng)調(diào)了模型生成是否由證據(jù)支持。然而,較大的權(quán)重會(huì)導(dǎo)致MAUVE分?jǐn)?shù)降低,因?yàn)樯傻奈谋靖L(zhǎng)、更流暢時(shí),常常會(huì)有更多未被引用完全支持的主張。這種框架允許實(shí)踐者在測(cè)試時(shí)通過(guò)調(diào)整這些參數(shù)來(lái)選擇和定制模型的行為,而無(wú)需額外的訓(xùn)練。
檢索頻率和歸一化準(zhǔn)確率
隨著檢索閾值的變化,模型在不同任務(wù)上的檢索頻率和準(zhǔn)確率也有所不同。較低的閾值可能會(huì)增加不必要的檢索次數(shù),而較高的閾值則可能導(dǎo)致錯(cuò)過(guò)重要的外部信息。因此,找到一個(gè)合適的閾值對(duì)于平衡這兩者至關(guān)重要。作者評(píng)估了這種適應(yīng)性閾值對(duì)整體準(zhǔn)確性和檢索頻率的影響,并在PubHealth和PopQA數(shù)據(jù)集上進(jìn)行了測(cè)試。結(jié)果表明,模型的檢索頻率隨著閾值的變化而顯著變化。在PubHealth上,檢索較少導(dǎo)致的性能下降較小,而在PopQA上則較大。
3、總結(jié)
Self-RAG框架給LLM+檢索增強(qiáng)任務(wù)提供了一種新的結(jié)合方式——在生成過(guò)程中加入可以多維、更細(xì)粒度的控制與評(píng)價(jià)標(biāo)簽,讓LLM對(duì)檢索的內(nèi)容的利用,以及利用效果有了更直接的操作。
其有個(gè)缺陷時(shí),在生成的時(shí)候要多次生成和判斷標(biāo)簽,這會(huì)增加推理成本。此外,在此框架下,還是有很多優(yōu)化空間,1)比如標(biāo)簽的優(yōu)化(用更少的標(biāo)簽,或者代表其他含義的標(biāo)簽);2)在召回相關(guān)文檔后,用一個(gè)小模型來(lái)判斷,選擇top1作為最終結(jié)果,減少循環(huán)計(jì)算。
該方法目前也沒(méi)有找到落地方案,并且回答可能會(huì)很慢,還是有很大優(yōu)化空間。