RAG 2.0架構(gòu)詳解:構(gòu)建端到端檢索增強(qiáng)生成系統(tǒng)
關(guān)于檢索增強(qiáng)生成(RAG)的文章已經(jīng)有很多了,如果我們能創(chuàng)建出可訓(xùn)練的檢索器,或者說整個(gè)RAG可以像微調(diào)大型語(yǔ)言模型(LLM)那樣定制化的話,那肯定能夠獲得更好的結(jié)果。但是當(dāng)前RAG的問題在于各個(gè)子模塊之間并沒有完全協(xié)調(diào),就像一個(gè)縫合怪一樣,雖然能夠工作但各部分并不和諧,所以我們這里介紹RAG 2.0的概念來解決這個(gè)問題。
什么是RAG?
簡(jiǎn)單來說,RAG可以為我們的大型語(yǔ)言模型(LLM)提供額外的上下文,以生成更好、更具體的回應(yīng)。LLM是在公開可用的數(shù)據(jù)上訓(xùn)練的,它們本身是非常智能的系統(tǒng),但它們無(wú)法回答具體問題,因?yàn)樗鼈內(nèi)狈卮疬@些問題的上下文。
所以RAG可以向LLM插入新知識(shí)或能力,盡管這種知識(shí)插入并不是永久的。而另一種常用向LLM添加新知識(shí)或能力的方法是通過對(duì)我們特定數(shù)據(jù)進(jìn)行微調(diào)LLM。
通過微調(diào)添加新知識(shí)相當(dāng)困難,昂貴,但是卻是永久性。通過微調(diào)添加新能力甚至?xí)绊懰郧皳碛械闹R(shí)。在微調(diào)過程中,我們無(wú)法控制哪些權(quán)重將被改變,因此也無(wú)法得知哪些能力會(huì)增加或減少。
選擇微調(diào)、RAG還是兩者的結(jié)合,完全取決于手頭的任務(wù)。沒有一種適合所有情況的方法。
RAG的經(jīng)典步驟如下:
- 將文檔分成均勻的塊。
- 每個(gè)塊是一段原始文本。
- 使用編碼器為每個(gè)塊生成嵌入(例如,OpenAI嵌入,sentence_transformer等),并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。
- 找到最相似的編碼塊,獲取這些塊的原始文本,并將其作為上下文與提示一起提供給生成器。
RAG 2.0
當(dāng)今典型的RAG系統(tǒng)使用現(xiàn)成的凍結(jié)模型進(jìn)行嵌入,使用向量數(shù)據(jù)庫(kù)進(jìn)行檢索,以及使用黑盒語(yǔ)言模型進(jìn)行生成,通過提示或編排框架將它們拼接在一起。各個(gè)組件技術(shù)上可行,但整體遠(yuǎn)非最佳。這些系統(tǒng)脆弱,缺乏對(duì)其部署領(lǐng)域的任何機(jī)器學(xué)習(xí)或?qū)I(yè)化,需要廣泛的提示,并且容易發(fā)生級(jí)聯(lián)錯(cuò)誤。結(jié)果是RAG系統(tǒng)很少通過生產(chǎn)標(biāo)準(zhǔn)。
而我們要說的RAG 2.0的概念,通過預(yù)訓(xùn)練、微調(diào)并對(duì)所有組件進(jìn)行對(duì)齊,作為一個(gè)整體集成系統(tǒng),通過語(yǔ)言模型和檢索器的雙重反向傳播來最大化性能:
下面就是我們將上下文語(yǔ)言模型(Contextual Language Models)與凍結(jié)模型的 RAG 系統(tǒng)在多個(gè)維度進(jìn)行比較
對(duì)于開放域問答:使用標(biāo)準(zhǔn)的自然問題(NQ)和 TriviaQA 數(shù)據(jù)集來測(cè)試每個(gè)模型檢索相關(guān)知識(shí)和準(zhǔn)確生成答案的能力。還在單步檢索設(shè)置中使用 HotpotQA(HPQA)數(shù)據(jù)集對(duì)模型進(jìn)行評(píng)估。所有數(shù)據(jù)集都使用精確匹配(EM)指標(biāo)。
對(duì)于忠實(shí)度:使用 HaluEvalQA 和 TruthfulQA 來衡量每個(gè)模型在檢索證據(jù)和幻覺中保持基礎(chǔ)的能力。
而新鮮度:我們使用網(wǎng)絡(luò)搜索索引來衡量每個(gè) RAG 系統(tǒng)概括快速變化的世界知識(shí)的能力,并在最新的 FreshQA 基準(zhǔn)測(cè)試中顯示準(zhǔn)確性。
這些維度對(duì)于構(gòu)建生產(chǎn)級(jí)別的 RAG 系統(tǒng)非常重要。CLM 在多種強(qiáng)大的凍結(jié)模型RAG 系統(tǒng)上顯著提升性能,這些系統(tǒng)是使用 GPT-4 或最先進(jìn)的開源模型如 Mixtral 構(gòu)建的。
RAG如何解決智能問題?
RAG是一種半?yún)?shù)系統(tǒng),其中參數(shù)部分是大型語(yǔ)言模型(LLM),其余部分是非參數(shù)的。這樣我們就得到了半?yún)?shù)系統(tǒng)。LLM在其權(quán)重或參數(shù)中存儲(chǔ)了所有信息(以編碼形式),而系統(tǒng)的其余部分則沒有定義這些知識(shí)的參數(shù)。
但這為什么能解決問題呢?
- 在LLM中交換索引(特定信息)為我們提供了定制化,這意味著我們不會(huì)僅僅獲得老舊的知識(shí),同時(shí)我們也可以修訂索引中的內(nèi)容。
- 通過這些索引對(duì)LLM進(jìn)行定位意味著可以減少幻覺,并且通過指向來源進(jìn)行引用和歸屬。
所以RAG為的LLM提供了更好的上下文化能力,使其表現(xiàn)良好。但實(shí)際上真的這么簡(jiǎn)單嗎?
并不是,因?yàn)槲覀冇性S多需要解答的問題,才能創(chuàng)建一個(gè)現(xiàn)代化的可擴(kuò)展的RAG管道。
當(dāng)前的RAG系統(tǒng)并沒有那么智能,而且它們非常簡(jiǎn)單,無(wú)法解決需要大量自定義上下文的復(fù)雜任務(wù)。
我們看到,目前唯一可以訓(xùn)練的參數(shù)部分就是LLM。能否增加更多的參數(shù)呢?
更好的檢索策略
1、稀疏檢索
TF-IDF:TF-IDF或詞頻-逆文檔頻率,是衡量一個(gè)詞對(duì)一個(gè)文檔集或語(yǔ)料庫(kù)中的文檔的重要性的指標(biāo),同時(shí)調(diào)整了某些詞通常出現(xiàn)得更頻繁的事實(shí)。[1] 它常被用作信息檢索、文本挖掘和用戶建模搜索中的權(quán)重因子。
BM25:可以視為對(duì)TF-IDF的改進(jìn)。
對(duì)于查詢“機(jī)器學(xué)習(xí)”,BM25的計(jì)算將是BM25Score(機(jī)器) + BM25Score(學(xué)習(xí))的總和。
公式的第一部分是詞項(xiàng)的逆文檔頻率(IDF)。公式的第二部分代表詞頻(TF),該詞頻通過文檔長(zhǎng)度進(jìn)行了標(biāo)準(zhǔn)化。
f(q(i), D) 是文檔 D 中詞 q(i) 的詞頻。
K 和 b 是可以調(diào)整的參數(shù)。|D| 表示文檔的長(zhǎng)度,avgdl 表示數(shù)據(jù)庫(kù)中所有文檔的平均長(zhǎng)度。
這些是稀疏檢索的一些早期步驟。
2、密集檢索
需要密集檢索的原因是因?yàn)檎Z(yǔ)言并不那么直白。例如,如果有同義詞,稀疏檢索就會(huì)完全失效。我們不僅僅想基于確切關(guān)鍵詞匹配來檢索信息,更多的是基于句子的語(yǔ)義。BERT sentence embedding 就是一個(gè)密集檢索的例子。將句子轉(zhuǎn)換為向量后,使用點(diǎn)積或余弦相似度來檢索信息。
密集檢索的一個(gè)好處是它易于并行處理,借助GPU,它可以輕松地在十億級(jí)別的相似性搜索上運(yùn)行,這就是Meta開發(fā)FAISS的方式,或者我們常說的向量數(shù)據(jù)庫(kù)。
密集檢索也就是我們常說的向量查詢,它通常使用點(diǎn)積來判斷響亮的相似程度,這也是一般RAG中常用的步驟。我們?nèi)绾纬胶?jiǎn)單的點(diǎn)積呢?
除了簡(jiǎn)單的點(diǎn)積以外,還有很多文檔和查詢交互方式,比如說 孿生網(wǎng)絡(luò),ColBERT,等等
基于模型的檢索算法
ColBERT是一個(gè)非常好的檢索策略,但這并不是信息檢索的SOTA。我們還有其他更先進(jìn)的算法和策略,如SPLADE、DRAGON和Hybrid搜索。
1、SPLADE:稀疏與密集的結(jié)合的查詢擴(kuò)展。
可以看到,通過查詢擴(kuò)展,涵蓋了更多的上下文,這有助于更好的檢索。
2、DRAGON:通過漸進(jìn)式數(shù)據(jù)增強(qiáng)來推廣密集檢索器。
讓我們通過一個(gè)例子來理解DRAGON的工作原理:
- 初始詢問:“如何照顧吊蘭?”
- DRAGON的行動(dòng):識(shí)別出植物護(hù)理的主題后,DRAGON制定了一個(gè)針對(duì)性的檢索查詢,專門收集有關(guān)吊蘭的一般護(hù)理信息。
- 初始檢索:DRAGON深入其數(shù)據(jù)庫(kù),檢索出有關(guān)這些綠葉植物的陽(yáng)光需求、澆水時(shí)間表和合適肥料的文檔。然后生成回應(yīng):“吊蘭需要適度的間接陽(yáng)光,應(yīng)該每周澆水一次。在生長(zhǎng)季節(jié),每月施肥一次對(duì)它們有益?!?/span>
- 用戶更新:隨著用戶詢問:“如果葉子變成棕色怎么辦?”對(duì)話發(fā)生了轉(zhuǎn)變。
- DRAGON適應(yīng):DRAGON細(xì)化檢索查詢,專注于吊蘭葉子變棕的問題。
- 動(dòng)態(tài)檢索行動(dòng):DRAGON檢索有關(guān)葉子變棕的常見原因的信息,如過度澆水或過多直射陽(yáng)光。
- 知識(shí)傳遞:通過利用新檢索到的數(shù)據(jù),DRAGON根據(jù)對(duì)話的發(fā)展定制其回應(yīng):“吊蘭的棕色葉子可能是過度澆水或陽(yáng)光直射過多的跡象。嘗試減少澆水頻率,并將植物移至更陰涼的地方?!?/span>
DRAGON根據(jù)用戶在對(duì)話中不斷變化的興趣動(dòng)態(tài)調(diào)整其檢索查詢。用戶的每一次輸入都會(huì)實(shí)時(shí)更新檢索過程,確保提供的信息既相關(guān)又詳細(xì),符合最新的上下文。
3、混合搜索:我們?cè)诿芗拖∈杷阉髦g進(jìn)行插值。這就是RAG社區(qū)一直在研究的方向,比如采用類似BM25的并將其與SPLADE或DRAGON結(jié)合。
但是無(wú)論我們使用什么方法,檢索器仍然是固定的,或者說無(wú)法定制(微調(diào))的
可以提供上下文的檢索器
1、RePlug
這是一篇關(guān)于檢索的非常有趣的論文,對(duì)于給定的查詢,我們檢索出前K個(gè)文檔,并進(jìn)行歸一化(計(jì)算它們的可能性)后得到一個(gè)分布,然后我們將每個(gè)文檔與查詢一起單獨(dú)輸入給一個(gè)生成器。然后查看語(yǔ)言模型對(duì)正確答案的困惑度。這樣就有了兩個(gè)可能性分布,在這些分布上我們計(jì)算KL散度損失,以使KL散度最小化,就會(huì)得到檢索到的文檔與正確答案上的困惑度最低的結(jié)果。
2、In-Context RALM
它使用凍結(jié)模型RAG 和 BM25,然后通過重新排序?qū)iT化檢索部分。包含一個(gè)零樣本學(xué)習(xí)的語(yǔ)言模型和一個(gè)訓(xùn)練過的重新排序器。
語(yǔ)言模型是固定的,我們只反向傳播或訓(xùn)練重新排序的部分。這不是很先進(jìn),但與前面的簡(jiǎn)單RAG相比,它的性能還不錯(cuò)。
但問題是如果無(wú)法訪問LLM的參數(shù),如何對(duì)檢索器的參數(shù)進(jìn)行反向傳播或更新呢?
所以它是使用強(qiáng)化風(fēng)格的損失來訓(xùn)練檢索器。檢索器的有效性通過其獲取的信息如何增強(qiáng)語(yǔ)言模型的輸出來評(píng)判。對(duì)檢索器的改進(jìn)集中在最大化這種增強(qiáng)上。這可能涉及基于從語(yǔ)言模型輸出中派生的性能指標(biāo)調(diào)整檢索策略(獲取信息的內(nèi)容和方式)。常見的指標(biāo)可能包括生成文本的連貫性、相關(guān)性和事實(shí)準(zhǔn)確性。
3、組合上下文化檢索器和生成器
與其單獨(dú)優(yōu)化LLM或retriver,不如一次優(yōu)化整個(gè)流程?
當(dāng)檢索文檔時(shí),在每n個(gè)令牌或一次檢索時(shí),有很多地方可以優(yōu)化。
在RAG-token模型中,與RAG-Sequence模型的單次檢索相比,可以在不同的目標(biāo)token上檢索不同的文檔。
使用編碼器對(duì)所有k個(gè)文檔進(jìn)行編碼,接著進(jìn)行協(xié)同,然后在將其作為上下文提供給輸入提示之前進(jìn)行解碼。
4、k-NN LM
另外一個(gè)在RAG系統(tǒng)中有趣的想法是增加包括k-NN LM:
研究人員表明,如果在RAG環(huán)境中訓(xùn)練,他們可以創(chuàng)建25倍小的模型
目前SOTA整理
大型語(yǔ)言模型(LLM)的上下文化既復(fù)雜又昂貴。因?yàn)橹匦赂抡麄€(gè)LLM并不容易,需要更新數(shù)十億甚至數(shù)萬(wàn)億的令牌。
所以Meta的FAIR的發(fā)布了ATLAS論文,這篇論文討論了可以用來訓(xùn)練整個(gè)RAG管道,并且針對(duì)不同部分使用不同類型的損失函數(shù),并對(duì)它們進(jìn)行了性能比較。
以下是ATLAS論文中所有不同損失的性能比較:
ATLAS是一個(gè)經(jīng)過精心設(shè)計(jì)和預(yù)訓(xùn)練的檢索增強(qiáng)型語(yǔ)言模型,能夠通過極少的訓(xùn)練示例學(xué)習(xí)知識(shí)密集型任務(wù)。ATLAS將這些損失函數(shù)整合進(jìn)一個(gè)連貫的訓(xùn)練流程中,可以直接基于其對(duì)語(yǔ)言模型性能的影響來微調(diào)檢索器,而不是依賴于外部注釋或預(yù)定義的相關(guān)性評(píng)分。這種整合使系統(tǒng)能夠隨著時(shí)間的推移通過適應(yīng)其訓(xùn)練任務(wù)的具體需求而改進(jìn)。
- 使用雙編碼器框架作為其檢索系統(tǒng),一個(gè)編碼器專門用于編碼查詢,另一個(gè)用于文檔。
- 然后將檢索到的文檔與查詢一起輸入基于T5架構(gòu)的強(qiáng)大的序列到序列語(yǔ)言模型,該模型在系統(tǒng)中充當(dāng)解碼器,生成最終的文本輸出。
- 采用解碼器內(nèi)融合方法,將檢索到的文檔的信息直接整合到序列到序列模型的解碼器中。這種方法允許語(yǔ)言模型在生成過程中動(dòng)態(tài)利用檢索到的信息,增強(qiáng)其輸出的相關(guān)性和準(zhǔn)確性。
總結(jié)
RAG(檢索增強(qiáng)生成)有三種類型:
- 凍結(jié)模型RAG:這些在整個(gè)行業(yè)中隨處可見,它們只是概念驗(yàn)證(POC)。
- 半凍結(jié)模型RAG:應(yīng)用智能檢索器,并試圖使它們以某種方式適應(yīng)。不修改LLM只是操作檢索器并將它們與最終輸出結(jié)合。
- 完全可訓(xùn)練的RAG:端到端訓(xùn)練相當(dāng)困難,但如果做得正確,可以提供最佳性能。但是肯定非常消耗資源。
而我們常用的RAG還僅僅是第一種凍結(jié)模型RAG,所以說RAG的技術(shù)目前還處于初級(jí)階段,擴(kuò)展語(yǔ)言模型的參數(shù)還是令牌,如何有效地?cái)U(kuò)展檢索器,通過參數(shù)還是數(shù)據(jù)塊將記憶與概括分離,將知識(shí)檢索與生成過程分離等,都是后續(xù)需要繼續(xù)研究的問題。