UC Berkeley |RAFT: 對不相關的RAG檢索結果進行建模
大家好,我是HxShine,今天推薦一篇UC Berkeley的一篇RAG效果優化的文章~
大模型引入新的知識一般有兩個途徑,一種是RAG檢索增強,一種是SFT,哪種方式效果比較好呢?或者說有沒有一些其他的更為有效的方式呢?
這篇論文介紹了一種新的訓練方法——檢索增強型微調(RAFT:Retrieval Augmented FineTuning),旨在改善領域特定的RAG(Retrieval-Augmented Generation)條件下,大型語言模型(LLMs)對問題的回答能力。
簡單來說,RAFT將RAG+SFT+COT有機的結合起來,在多項問答測試集上,利用LLama2 7B的模型,就取得了比ChatGPT3.5+RAG結合的方法。具體來說,在RAFT中,面對一個問題及一組檢索到的文檔時,模型被訓練為忽略那些不相關的知識,同時挖掘其中與問題的相關知識的來提升問答效果。同時其結合鏈式思考COT策略提升推理能力。其在PubMed、HotpotQA、Hugging Face、Torch Hub、TensorFlow Hub等問答數據集上,取得了非常不錯的效果。
一、概述
Title: RAFT: Adapting Language Model to Domain Specific RAG URL:?? https://arxiv.org/abs/2403.10131??
Code:?? https://github.com/ShishirPatil/gorilla??
Authors: Tianjun Zhang, Shishir G. Patil, Naman Jain, Sheng Shen, Matei Zaharia, Ion Stoica, Joseph E. Gonzalez
1 Motivation
? 大模型引入新知識(例如緊急新聞或私有領域知識)要么通過RAG,要么微調,但如何最佳地讓模型獲得這些新知識還值得探索。
? 為了改善LLMs在特定領域中的性能,特別是在開放書本式問答("open-book" questioning)任務中,本文提出了RAFT(Retrieval Augmented FineTuning)方法,嘗試將SFT,RAG,COT進行結合,提升特定領域QA的效果。
2 Methods
背景:哪種方式引入外部知識最好?
Figure 1: How best to prepare for an Exam?
1.純監督的微調(FT):種方法通過直接“記憶”輸入文檔或者回答練習問題(不引用文檔)來“學習”,類似于考試前直接背誦或者通過做練習題來準備,但沒有引用外部文檔。
2.純檢索增強生成(RAG):這種方法相當于開卷考試,但是沒有提前學習。即在回答時可以引用文檔,但沒有充分利用固定領域設置和提前接觸到測試文檔的學習機會。
3.監督微調和檢索增強生成結合(RAFT):結合了監督式微調(SFT)和檢索增強生成(RAG),通過引用文檔中的相關段落來生成答案,同時在模擬的不完美檢索環境中進行訓練,從而有效地為開卷考試設置做準備。
省流版方案總結:
RAFT: 在RAFT中,給定一個問題和一組檢索到的文檔,訓練模型忽略那些無助于回答問題的文檔,即不相關的文檔,并引用相關文檔中的正確知識來回答問題。
RAFT方法步驟:
? 采用檢索增強型微調(RAFT)方法,訓練模型識別并忽視那些分散注意力的文檔。
? 通過引用問題答案的相關文檔中的確切文本序列,實現對問題更準確的回答。
?結合RAFT的思路鏈式(chain-of-thought-style)響應,提高了模型的推理能力。
RAFT方法概覽:
Figure 2: Overview of our RAFT method.
與傳統RAG不同,RAFT方法探索在訓練過程中如何使用正負文檔集來調整大型語言模型(LLMs),它的核心思想是從一組正文檔和負文檔中讀取外部知識,讓大模型學習過濾非相關知識的能力。在測試時,所有方法都遵循標準的RAG設置,即在上下文中提供檢索到的前k個文檔。
總的來說RAFT方法通過模擬不完美的檢索環境和結合鏈式思考風格的訓練,提高模型在特定領域內的RAG任務性能。通過這種方式,RAFT方法旨在提高模型的準確性和魯棒性,使其在面對檢索到的文檔時能夠更好地識別和利用相關信息。
RAFT方法的關鍵特點包括:
1.區分正負文檔:在訓練數據中,模型被提供了一個問題(Q)、一組文檔(Dk),以及一個由其中一個文檔(D?)生成的鏈式思考風格的答案(A?)。這里的文檔被分為“正樣本”文檔(D?),即包含問題答案的文檔,和“干擾”文檔(Dk),即不包含答案相關信息的文檔。
2.訓練數據的準備:在數據集中的一部分(P%),保留正樣本文檔和干擾文檔;而在另一部分(1-P%)的數據中,只包含干擾文檔,不包含正樣本文檔。這樣的訓練數據準備方法迫使模型在某些情況下不依賴于文檔內容來記憶答案,而是從上下文中推導答案。
3.生成推理過程:RAFT方法強調生成一個推理過程,如鏈式思考(Chain-of-Thought),來解釋提供的答案。這包括引用原始上下文中的段落,并詳細解釋如何基于引用得出結論。
3 Conclusion
RAFT方法通過結合微調和檢索增強技術,顯著提高了大型語言模型在特定領域內的性能。這種方法不僅提高了模型在提供上下文中解決問題的能力,還增強了模型對于干擾文檔的魯棒性,使其在實際應用中更加可靠和有效。
Table 1: RAFT improves RAG performance forall specialized domains
總結:
? 與基礎的LLaMA2模型相比,RAFT在PubMed數據集上的性能提升了76.35%,在Torch Hub上提升了86.86%。
? 即使與特定領域的微調模型(DSF)相比,RAFT也顯示出更好的性能,尤其是在HotpotQA和HuggingFace數據集上,分別提升了30.87%和31.41%。
? 與更大的GPT-3.5模型+RAG相比,RAFT在某些數據集上也展現了顯著的優勢。
二、詳細內容
1 RAFT示例
Figure 3: RAFT prompt to help LLM evaluate its own generated reasoning and answers, contrasting them with the correct reasoning and answers.
該示例說明了如何通過提供問題、上下文和答案來訓練大型語言模型(LLMs)生成合理的推理鏈,并據此給出答案。這個過程中,模型被要求識別和引用正確的文檔內容來形成答案,并且能夠評估自己生成的推理和答案的正確性。
1.問題(Question): 模型被給定一個問題,例如:"The Oberoi family is part of a hotel company that has a head office in what city?"
2.上下文(Context): 與問題相關的一組文檔或信息片段,上下文有相關的參考信息,也有非相關的干擾信息。在這個例子中,上下文提供了關于Oberoi家族和他們在酒店業的參與的信息,以及Oberoi集團的總部位置。
3.答案(Answer):最終的答案。
4.推理鏈(Chain-of-Thought, CoT): 模型生成的推理過程,它解釋了如何從上下文中得到答案。在這個例子中,推理鏈引用了上下文中的兩個關鍵信息片段,并解釋了如何根據這些引用得出Oberoi集團總部位于德里。
5.指令(Instruction): 指導模型如何生成推理鏈的指令。在這個例子中,指令要求模型使用特定的格式來提供推理,即在##Reason##和##Answer##之間插入引用的上下文和最終答案。
通過這種方式,RAFT方法不僅訓練模型從文檔中提取和利用相關信息來回答問題,而且還訓練模型生成詳細的推理過程,這有助于提高模型的透明度和可解釋性。此外,這種方法還鼓勵模型自我評估,并從中學習改進。這種自我評估的過程有助于模型在未來的任務中提高性能和準確性。
2 COT的作用(消融實驗)
Table 2: Ablation on Chain-of-Thought
1.數據集(Datasets):
? PubMed: 專注于生物醫學研究問題的問答數據集。
? HotpotQA: 一個需要多步推理的問答數據集。
? HuggingFace: 來自 Gorilla API Bench 的數據集,涉及基于文檔生成正確的 API 調用。
? Torch Hub: 類似于HuggingFace,也是一個API調用的數據集。
? TensorFlow Hub: 另一個衡量API調用能力的基準數據集。
2.實驗配置(Model Configurations):
?RAFT w.o CoT: 應用了 RAFT 方法但沒有使用 Chain-of-Thought 的模型。
?RAFT: 應用了 RAFT 方法并結合了 Chain-of-Thought 的模型。
3.效果分析(Performance):
? 在大部分列出的數據集上,使用 CoT 的 RAFT 模型(RAFT)相比于沒有使用 CoT 的 RAFT 模型(RAFT w.o CoT)都展現出了更好的性能。
? 在 HotpotQA 數據集上,使用 CoT 的性能提升尤為顯著,從 25.62% 提升到了 35.28%,增益為 9.66%。
? 在 HuggingFace 數據集上,使用 CoT 的性能提升也很明顯,從 59.07% 提升到了 74.00%,增益為 14.93%。
CoT方法顯著提高了模型在特定領域內的性能,特別是在處理需要詳細推理和解釋的任務時。通過生成詳細的推理鏈并引用上下文,模型能夠更清晰地解釋其答案,從而提高了答案的準確性和可解釋性。這表明CoT是提高模型性能的一個重要組成部分,尤其是在需要模型進行深入理解和推理的復雜任務中。
3 RAFT方法與特定領域微調(DSF)方法對比
Figure 4: Comparison of RAFT and DSF
1.問題(Question):
? 給定一部電影,和相關Documents,詢問編劇是誰?
2.文檔(Documents):
? 提供了包含相關信息的文檔片段,其中提到了編劇David Weissman及其參與的電影作品,包括“Evolution”。
3.RAFT模型的輸出:
? RAFT模型正確地從文檔中提取了信息,并識別出David Weissman是“Evolution”的編劇。RAFT模型生成的推理鏈清晰地引用了文檔中的相關信息,并據此給出了正確答案。
4.DSF模型的輸出:
? 相比之下,DSF模型在處理相同的問題和文檔時出現了錯誤。DSF模型錯誤地提取了電影名稱作為編劇。
結論是,RAFT方法通過結合鏈式思考和上下文引用,特別在需要理解和利用提供文檔內容的任務上,提高了模型在特定領域問題上的表現。另外也說明在訓練過程中對文檔理解和推理COT的重要性,有助于模型在實際應用中更準確地處理和回答問題。
4 訓練過程中正確樣本(外部檢索的知識)的比例(P%)對模型性能的影響
Figure 5: How many golden documents to involve?
實驗說明:橫軸表示訓練數據中包含正確樣本的比例,從0%到100%,縱軸表示模型在測試時的最終準確率。
實驗結論:在訓練大型語言模型時,合理平衡正確樣本和非正確樣本的比例對于提高模型在特定領域RAG任務上的性能至關重要。通過調整這一比例,可以使模型更好地學習如何處理和利用相關文檔信息,同時避免過度依賴特定樣本,從而提高模型的泛化能力和魯棒性。
5 推理時不同數量的干擾文檔對模型性能的影響
Figure 6: Test-Time Documents Varying
說明:"D*"、"D1"、"D2"、"D3"等符號代表了在訓練過程中使用的不同組合的文檔數量,"D*"代表包含正確答案信息的文檔,這些文檔是回答問題所必需的,包含了解決問題的關鍵信息。"D1"、"D2"、"D3"等代表干擾文檔,這些文檔不包含回答問題所需的相關信息。在訓練過程中,這些干擾文檔被用來模擬真實世界中的情況,即模型在嘗試從檢索結果中找到正確答案時,可能會遇到大量不相關的信息。
總結:
1.訓練數據配比的重要性,并非所有情況都適合使用相同數量的干擾文檔進行訓練。例如,在某些數據集上,訓練時使用一個“正樣本”文檔加上三個干擾文檔(D* + 3D)可能會獲得最佳性能,而在其他數據集上,可能需要調整這個比例。
2.在訓練過程中模擬真實檢索環境的重要性。通過在訓練中包含不同數量的干擾文檔,模型可以學習在測試時如何處理檢索器可能返回的不確定數量的文檔,包括正確和錯誤的信息,在有些任務上可以顯著提升效果。
本文轉載自?? NLP PaperWeekly??,作者: NLP PaperWeekly
