RAFT:讓大型語言模型更擅長特定領域的 RAG 任務(raft詳解)
RAFT(檢索增強的微調)代表了一種全新的訓練大語言模型(LLMs)以提升其在檢索增強生成(RAG)任務上表現的方法。“檢索增強的微調”技術融合了檢索增強生成和微調的優點,目標是更好地適應各個特定領域。該技術由微軟的主要AI倡導者 Cedric Vidal 和 Meta 的 AI 倡導者 Suraj Subramanian 共同提出。
一、前言
生成式 AI 對企業最具影響力的應用之一是創建能夠訪問已有知識庫的自然語言接口,換句話說,它能夠針對銀行、法律和醫學等特定領域提供問題解答。目前主要有兩種方法可以實現這一點:
- 特定領域微調 (DSF):在代表特定領域知識的文檔集上訓練現有的基礎模型。
- 檢索增強生成 (RAG):將文檔存儲在矢量數據庫中,并在查詢時根據與問題的語義相似性檢索相關文檔,并將其納入大型語言模型的上下文進行情境學習。
本文將探討這兩種方法的局限性,并介紹加州大學伯克利分校研究人員 Tianjun Zhang 和 Shishir G. Patil 提出的 RAFT 方法如何克服這些局限性。該團隊以 Gorilla 大型語言模型而聞名,他們在 RAFT 論文中介紹了這種新方法,并展示了如何使用 Meta Llama 2 和 Azure AI Studio 進行研究和實施。
伯克利團隊還發表了一篇博客文章,解釋了 RAFT 方法的優缺點以及如何產生更有效的結果。RAFT 論文的代碼實現可在他們的 Github 代碼庫中找到。
接下來,我們將介紹 RAFT 方法的工作原理。
二、理解 RAFT 方法
RAFT 是一種將預訓練的大型語言模型微調到特定領域 RAG 設置的通用方法。在特定領域 RAG 中,模型需要根據特定領域的一組文檔回答問題,例如企業中的私有文件。這與通用 RAG 不同,因為通用 RAG 中的模型并不知道它將在哪個領域進行測試。
為了更好地理解特定領域 RAG,我們可以將其與考試類比。
- 閉卷考試:類比于大型語言模型無法訪問任何外部信息來回答問題的情況,例如聊天機器人。在這種情況下,模型只能依靠預訓練和微調期間學習到的知識來響應用戶的提示。
- 開卷考試:類比于大型語言模型可以參考外部信息來源(例如網站或書籍)的情況。在這種情況下,模型通常會與檢索器配對,檢索器會檢索相關文檔并將其附加到用戶的提示中。模型只能通過這些檢索到的文檔獲取新知識。因此,模型在開卷考試設置中的性能很大程度上取決于檢索器的質量以及檢索器識別相關信息的能力。
傳統的 RAG 在收到查詢時,會從索引中檢索一些可能包含答案的文檔,并將其作為上下文來生成答案。這就像學生參加開卷考試,可以翻閱教科書尋找答案。相比之下,微調就像閉卷考試,學生只能依靠記憶來回答問題。顯然,開卷考試更容易,這也解釋了 RAG 的有效性和流行性。
然而,這兩種方法都存在局限。微調的模型只能依賴于它所訓練的知識,有時可能會出現近似或幻想的問題。RAG 雖然基于文檔,但檢索到的文檔可能只是與查詢語義接近,并不一定包含正確答案。這些干擾性文檔可能會誤導模型,導致生成錯誤的答案。
為了克服 RAG 的這些缺陷,Tianjun 和 Shishir 提出了一種新的方法:RAFT。他們認為,如果學生在開卷考試前預先學習教科書,就能取得更好的成績。同樣,如果大型語言模型能夠事先“學習”文檔,就能提高 RAG 的性能。他們提出的檢索增強型微調(Retrieval-Augmented Fine Tuning)方法,就是試圖讓模型在使用 RAG 之前先對特定領域進行學習和適應。
RAFT 專注于一種比通用開卷考試更窄但越來越受歡迎的領域,稱為特定領域開卷考試。在這種情況下,我們事先知道模型將要測試的領域,例如企業文檔、最新新聞或代碼庫等。模型可以使用它所微調的特定領域中的所有信息來回答問題。
RAFT 使用 Meta Llama 2 7B 語言模型,首先準備一個合成數據集,其中每個樣本包含:
- 一個問題
- 一組參考文檔(包括相關文檔和干擾性文檔)
- 從文檔中生成的答案
- 使用思維鏈解釋,包含來自相關文檔的摘錄(由如 GPT-4 或 Llama 2 70B 這樣的通用大語言模型生成)
該數據集用于微調 Llama 2 7B 模型,使其更好地適應特定領域,并學會從檢索到的上下文中提取有用的信息。思維鏈解釋可以防止過擬合,提高訓練的魯棒性。
RAFT 介于 RAG 和特定領域微調之間,它既能使大型語言模型學習領域知識和風格,又能提高答案生成的質量。對于像 Llama 2 這樣在多個領域訓練的預訓練模型,RAFT 可以使其更適合醫療保健或法律等專業領域。
三、RAFT 模型評估
為了評估 RAFT 模型的性能,伯克利團隊使用了來自不同領域的數據集,包括維基百科、編碼/API 文檔和醫學問答:
- 自然問題 (NQ)、Trivia QA 和 Hotpot QA:基于維基百科的開放域問題,主要集中在常識。
- HuggingFace、Torch Hub 和 TensorFlow Hub:來自 Gorilla 論文中提出的 APIBench,主要關注如何根據文檔生成正確的 API 調用。
- PubMed QA:專門針對生物醫學研究問答的數據集,主要側重于根據給定文檔回答醫學和生物學問題。
研究人員還比較了以下基線模型:
- 使用零樣本提示的 LlaMA2-7B-chat 模型:這是問答任務中常用的指令微調模型,提供清晰的指令,但不提供參考文檔。
- 使用 RAG 的 LlaMA2-7B-chat 模型 (Llama2 RAG):與前者類似,但添加了參考上下文,是處理特定領域問答任務時最常用的組合。
- 使用零樣本提示的特定領域微調 (DSF):在沒有參考文檔的情況下進行標準指令微調。
- 使用 RAG 的特定領域微調 (DSF RAG):為特定領域微調模型配備外部知識,使其能夠參考上下文來回答未知問題。
下表展示了 RAFT 在醫學 (PubMed)、常識 (HotPotQA) 和 API (Gorilla) 基準測試上的結果。
四、Azure AI Studio 微調
伯克利團隊使用 Azure AI Studio 中的模型即服務 (MaaS) 對 Meta Llama 2 進行了微調,用于他們的 RAFT 論文。微軟學習平臺也提供了相關教程,解釋如何在 Azure AI Studio 中微調 Llama 2 模型。
過去,微調通常需要機器學習工程師具備豐富的專業知識,包括生成式 AI、Python、機器學習框架、GPU 和云基礎設施等。Azure AI Studio 的出現改變了這一現狀,它自動化了所有技術細節和基礎設施設置,讓用戶可以專注于數據準備。
以下是訓練 RAFT 模型的簡短教程,包括數據集準備、模型微調和模型部署。
4.1、數據集準備
我們提供一個示例來準備 RAFT 的數據集。數據集包含問題、上下文和答案。上下文是一組文檔,答案是使用思維鏈風格從其中一個文檔生成的,并借助 GPT-4 進行輔助。
Question: The Oberoi family is part of a hotel company that has a head office in what city?context: [The Oberoi family is an Indian family that is famous for its involvement in hotels, namely through The Oberoi Group]...[It is located in city center of Jakarta, near Mega Kuningan, adjacent to the sister JW Marriott Hotel. It is operated by The Ritz-Carlton Hotel Company. The complex has two towers that comprises a hotel and the Airlangga Apartment respectively]...[The Oberoi Group is a hotel company with its head office in Delhi.]CoT Answer: ##Reason: The document ##begin_quote## The Oberoi family is an Indian family that is famous for its involvement in hotels, namely through The Oberoi Group. ##end_quote## establishes that the Oberoi family is involved in the Oberoi group, and the document ##begin_quote## The Oberoi Group is a hotel company with its head office in Delhi. ##end_quote## establishes the head office of The Oberoi Group. Therefore, the Oberoi family is part of a hotel company whose head office is in Delhi. ##Answer: Delhi
4.2、模型微調
我們將訓練模型根據問題和提供的上下文輸出思維鏈答案。基礎模型 Llama2-7B 適用于 RAG 任務,因為它具備推理、理解語言、低延遲推理和易于適應不同環境的能力。用戶只需打開 AI Studio 的微調向導
選擇要微調的模型
選擇上傳數據選項并上傳您的訓練數據集,它必須是 JSONL 格式
并指定提示和完成所在的列
最后設置批量大小乘數、學習率和訓練輪數即可。
對于這些參數,Tianjun 和 Shishir 建議:
- 對于微調,使用乘數 1,學習率 0.00002 和訓練輪數 1。
4.3、模型部署
訓練模型后,您可以將其部署在您自己的 GPU 或 CPU 上,也可以將其部署在微軟 AI Studio 上。
AI Studio 極大地降低了大型語言模型微調的門檻,讓開發人員和企業可以更輕松地調整模型以適應特定領域的任務。這將推動定制模型在不同企業中的應用,促進生成式 AI 和大型語言模型的普及。
五、RAFT 團隊答疑
Cedric 和 Suraj 就 RAFT 的相關問題采訪了 Tianjun 和 Shishir。
問:為什么選擇 Llama 2 7B?
答:因為我們專注于 RAG 任務,這類任務需要模型具備推理、理解語言、低延遲推理和易于適應不同環境的能力。Llama 2 7B 恰好滿足這些要求,它是許多常識性問答任務的良好基礎模型,具有優秀的數學能力,并且能夠解析較長的文檔。同時,它也適合在 4 個 A100-40G GPU 上訓練并在單個 GPU 上部署。綜合考慮性能、易部署性和許可證等因素,Llama 2 模型非常適合 RAFT 任務。我們也希望借助微軟 AI Studio 探索 Llama 2 13b 或 70b 的潛力。
問:對于嘗試微調 Llama 的人,您有什么建議?
答:微調 Llama 是一項復雜的任務,涉及數據收集、數據清理和實際微調。我們建議收集與目標領域相關的多樣化問題,并構建思維鏈答案。存儲中間檢查點可以幫助提前停止訓練。此外,微調的學習率應該比預訓練的學習率低至少一個數量級。其他最佳實踐包括使用 16 位精度、訓練不超過 3 個 epoch,以及使用大批量大小。
問:微調應該應用于每個領域嗎?
答:微調模型的知識學習依賴于特定領域,但其行為在一定程度上可以泛化到其他領域。這涉及到準確性和泛化性之間的權衡。通常,針對特定領域進行微調是比較好的做法,但如果企業文檔集有限,針對這些文檔進行微調可能會獲得更好的性能,因為知識范圍更集中。
問:您對 Azure AI Studio 微調系統有何看法?
答:Azure AI 微調系統非常用戶友好,從訓練數據上傳到超參數選擇,再到部署訓練好的模型,一切都非常簡單易用。
問:AI Studio 微調有什么優勢?
答:最大的優勢是用戶無需擔心 GPU、訓練平臺和模型部署等問題,只需一鍵操作即可完成,而且性能出色!
問:您認為 AI Studio 微調可以改進什么?
答:作為研究人員,我們希望開發者能夠提供更多關于系統內部微調配方的細節,例如它是使用低秩近似微調還是全參數微調,使用了多少個 GPU,以及 LoRA 的超參數設置等等。
問:您認為 AI Studio 微調會給行業帶來什么變化?
答:它可以使企業輕松進行大型語言模型的微調和部署,極大地促進定制模型在不同企業中的應用。
六、結論
Llama 和 Azure 通過提供易于使用的平臺,使開發人員和企業能夠創建針對特定需求和挑戰的創新解決方案,推動了特定領域 AI 開發的新范式。這將使更多人受益于生成式 AI 和大型語言模型的最新進展,構建更加多樣化和包容的 AI 生態系統。(注: AI Studio 微調目前在美國西部 3 可用)
七、References
[1]. Tianjun Zhang, Shishir G. Patil, Naman Jain, Sheng Shen, Matei Zaharia, Ion Stoica, Joseph E. Gonzalez, R. (2024). RAFT: Adapting Language Model to Domain Specific RAG: https://arxiv.org/pdf/2401.08406.pdf
[2]. Gorilla LLM https://github.com/ShishirPatil/gorilla
[3]. Meta Llama 2 https://llama.meta.com/
[4]. Azure AI Studio https://ai.azure.com/
[5]. RAFT Github Repo: https://github.com/ShishirPatil/gorilla/tree/main/raft
[6]. Fine-tune a Llama 2 model in Azure AI Studio: https://learn.microsoft.com/en-us/azure/ai-studio/how-to/fine-tune-model-llama
[7]. MS Learn https://learn.microsoft.com/
[8]. RAFT: Adapting Language Model to Domain Specific RAG: https://gorilla.cs.berkeley.edu/blogs/9_raft.html