長上下文能取代RAG嗎?
曾幾何時,LLM還是憨憨的。
腦子里的知識比較混亂,同時上下文窗口長度也有限。
檢索增強生成(RAG)的出現在很大程度上提升了模型的性能。
然而,LLM很快變得強大,上下文窗口長度也迅速膨脹。
現役的主流大模型,比如GPT-4o、Claude-3.5、Llama3.1、Phi-3和 Mistral-Large2等,都支持128K長的上下文,Gemini-1.5-pro甚至達到了1M的長度。
于是人們不禁要問:在長上下文LLM時代,RAG還有存在的必要嗎?
這樣的疑問是有根據的,之前的一項研究就證明了,長上下文(LC)在答案質量方面始終優于RAG:
論文地址:https://www.arxiv.org/pdf/2407.16833
在這勃勃生機、萬物競發的春天里,RAG當真要失寵了么?
近日,來自英偉達的研究人員重新審視了這個問題,他們發現, LLM上下文中檢索塊的順序對于答案質量至關重要。
傳統的RAG會將檢索到的塊按照相關性降序排列,但這篇工作表明,保留原始文本中檢索塊的順序,能夠顯著提高RAG的答案質量。
論文地址:https://arxiv.org/pdf/2409.01666
由此,研究人員提出了保序機制——Order-Preserve RAG(OP-RAG)。
在En.QA數據集上的實驗中,OP-RAG方法(Llama3.1-70B)僅使用16K檢索到的token,就實現了44.43的F1-score。
相比之下,沒有RAG的Llama3.1-70B,在充分利用128K上下文的情況下,只達到了34.32的F1-score。
而GPT-4o和Gemini-1.5-Pro則分別為32.36分和43.08分。
上圖顯示了每組實驗平均輸入的token數量,可以認為OP-RAG以很少的資源量達到了超越長上下文的效果。
——這也再次證明了RAG的獨特價值。
Make RAG Great Again
RAG曾幫助早期的LLM克服了有限上下文的限制,通過訪問最新的信息,顯著減少LLM的幻覺,提高了事實準確性。
盡管目前長上下文的研究逐漸獲得偏愛,但作者認為超長的語境會導致LLM對相關信息的關注度降低,最終使答案質量下降,而本文提出的OP-RAG則能夠用更少的token換來更高的答案質量。
OP-RAG
首先通過以下方式表示長上下文:將長文本d切成N個連續且均勻的塊c,ci表示第i塊 。給定一個查詢q,可以得到ci塊的相關性得分(通過計算嵌入之間的余弦相似度):
檢索出相似度得分最高的前k個塊,但保留這些塊在原始長上下文d中的順序。
上圖直觀展示了普通RAG與OP-RAG之間的差異:一個長文檔被切分為13塊并計算了相似度分數。
同樣是檢索相似度得分最高的前4個塊,Vanilla RAG按分數降序重排了,而OP-RAG保留了塊之間的相對順序。
實驗設置
研究人員選擇了專為長上下文QA評估而設計的EN.QA和EN.MC數據集進行實驗。
En.QA由351個人工注釋的問答對組成,數據集中的長上下文平均包含150,374個單詞,這里使用F1-score作為En.QA的評估指標。
EN.MC由224個問答對組成,其注釋與En.QA類似,但每個問題提供四個答案供選擇。
En.MC中的長上下文平均包含142,622個單詞,這里使用準確性作為En.QA評估的指標。
所有數據集上的塊大小都設置為128個token,塊之間不重疊,使用BGE-large-en-v1.5的默認設置來獲得查詢和塊的嵌入。
消融研究
上下文長度的影響
作者評估了上下文長度對OP-RAG性能的影響。實驗中每個塊包含128個token,生成答案時檢索塊數為128。
如下圖所示,隨著上下文長度的增加,性能最初會提高。這是因為更多的上下文可能有更大的機會覆蓋相關的塊。
然而,隨著上下文長度進一步增加,答案質量會下降,因為更多不相關的塊產生了干擾。
實驗中的Llama3.1-8B模型,在EN.QA數據集和EN.MC數據集上,上下文長度為16K時達到性能峰值,而Llama3.1-70B模型在EN.QA上的最佳性能點為16K,在EN.MC上為32K。
Llama3.1-70B的峰值點晚于Llama3.1-8B,可能是因為較大規模的模型具有更強的區分相關塊和不相關干擾的能力。
這里有兩方面的啟示,首先是需要在檢索更多上下文來提高召回率,和限制干擾來保持準確性之間進行權衡;
其次,引入過多的不相關信息會降低模型的性能,這也是當前長上下文LLM所面臨的問題。
OP-RAG和檢索塊數
如下圖所示,當檢索到的塊的數量較小(比如8)時,本文提出的保留順序RAG相對于普通RAG的優勢并不明顯。
而當檢索到的塊數量很大時,OP-RAG的性能顯著優于普通RAG。
在EN.QA數據集上,當檢索到的塊數為128時, 普通RAG只能實現38.40的F1-score,而OP-RAG獲得了44.43分。
在EN.MC數據集上,檢索塊數為192時,普通RAG的Accuracy為81.22,而OP-RAG達到了88.65。
實驗結果
研究人員將OP-RAG與兩種類型的基線進行比較。
第一類方法使用沒有RAG的長上下文LLM。如下表所示,在沒有RAG的情況下,LLM需要大量token作為輸入,效率低且成本高。
相比之下,本文的保序RAG不僅顯著減少了所需token數量,而且提高了答案質量。
對于Llama3.1-70B模型,沒有RAG的方法在EN.QA數據集上,只能實現34.26的F1-score,且平均需要117K個token作為輸入。相比之下,OP-RAG以48K個token的輸入獲得了47.25的分數。
第二類基線采用SELF-ROUTE機制 ,它根據模型自我反思將查詢路由到RAG或長上下文LLM 。如上表所示,OP-RAG方法明顯優于在LLM的輸入中使用更少token的方法。