為 RAG 生成合成資料集
前言
本篇介紹如何運用大型語言模型(LLM)生成合成資料集,解決特定領域資料稀缺問題,提升 RAG 系統的檢索與回答效能。
本篇目標
RAG 設定的合成資料
不幸的是,在機器學習工程師的日常工作中,經常會遇到標註資料不足或數量極少的情況。通常,當意識到這點時,專案就會啟動漫長的資料收集與標註流程。幾個月後,才能開始開發解決方案。
然而,隨著大型語言模型(LLM)的出現,某些產品的開發模式發生了轉變:現在可以憑藉 LLM 的泛化能力,幾乎即時地測試一個想法或開發一項人工智慧驅動的功能。如果結果證明(大致)符合預期,那麼傳統的開發流程便能隨之展開。
圖片來源:AI工程師的崛起,作者:S.Wang
圖片描述
上方是「傳統機器學習 (Traditional ML)」的流程,由資料/機器學習工程師負責:資料 (Data) 經過處理後,建立模型 (Model),最終形成產品 (Product)。
下方是「大型語言模型 (LLM) 驅動的人工智慧 (LLM enabled AI)」的流程,由人工智慧工程師負責:從產品 (Product) 開始,如果成功 (if successful),則產生資料 (Data),如果需要擴展 (if scaling),再建立模型 (Model)。
圖片描述結束
其中一種新興方法是檢索增強生成 (RAG).它用於知識密集型任務,在這些任務中,您不能僅依賴模型的知識。RAG 將資訊檢索元件與文本生成器模型相結合。要瞭解有關此方法的更多資訊,請參閱指南中的相關部分.
RAG 的核心組件是檢索模型,它負責識別相關文件並將其傳送給大型語言模型(LLM)進行後續處理。檢索模型的效能越好,產品或功能的成果就越佳。理想情況下,檢索功能應能開箱即用。然而,其效能往往會在不同語言或特定領域中有所下降。
試想一下:您需要建立一個能根據捷克法律和法律實踐(當然是用捷克語)回答問題的聊天機器人。或者設計一個專為印度市場量身打造的稅務助理(這是 OpenAI 在 GPT-4 展示期間提出的一個使用案例)。您很可能會發現,檢索模型經常會錯過最相關的文件,整體表現不佳,從而限制了系統的品質。
想像一下:您需要創建一個聊天機器人,根據捷克法律和法律慣例(當然是捷克語)回答問題。或者設計一個為印度市場量身定製的稅務助手(OpenAI 在 GPT-4 演示期間介紹的用例)。您可能會發現 Retrieval 模型經常錯過最相關的文檔,並且整體性能不佳,從而限制了系統的品質。
但這有個解決方案。一個新興趨勢是利用現有的大型語言模型來合成數據,以訓練新一代的大型語言模型(LLM)、檢索器(Retrievers)或其他模型。這個過程可視為透過基於提示的查詢生成,將大型語言模型(LLM)蒸餾成標準尺寸的編碼器。雖然這種蒸餾是計算密集型的,但它能大幅降低推論成本,並可能極大地提升效能,尤其是在資源匱乏的語言或專業領域。
在本指南中,我們將依賴最新的文本生成模型,如 ChatGPT 和 GPT-4,它們可以按照說明生成大量合成內容。Dai 等人(2022) 提出了一種方法,其中只需 8 個手動標記的示例和大量未標記的數據(用於檢索的文檔,例如,所有解析的定律),就可以實現近乎最先進的性能。這項研究證實,合成生成的數據有助於訓練特定於任務的檢索器,以用於由於數據稀缺而難以進行監督域內微調的任務。
特定領域資料集生成
要使用 LLM,需要提供簡短描述並手動標記一些範例。請務必注意,不同的檢索任務具有不同的搜索意圖,這意味著 「相關性」 的定義不同。換句話說,對於同一對 (Query, Document),它們的相關性可能會因搜索意圖而完全不同。例如,參數檢索任務可能會尋求支持參數,而其他任務需要反參數(如ArguAna 數據集).
請考慮以下範例。雖然為了更容易理解,用英文編寫,但請記住,數據可以是任何語言,因為ChatGPT/GPT-4 甚至可以有效地處理資源不足的語言。
Prompt:
Task: Identify a counter-argument for the given argument.
Argument #1: {insert passage X1 here}
A concise counter-argument query related to the argument #1: {insert manually prepared query Y1 here}
Argument #2: {insert passage X2 here}
A concise counter-argument query related to the argument #2: {insert manually prepared query Y2 here}
<- paste your examples here ->
Argument N: Even if a fine is made proportional to income, you will not get the equality of impact you desire. This is because the impact is not proportional simply to income, but must take into account a number of other factors. For example, someone supporting a family will face a greater impact than someone who is not, because they have a smaller disposable income. Further, a fine based on income ignores overall wealth (i.e. how much money someone actually has: someone might have a lot of assets but not have a high income). The proposition does not cater for these inequalities, which may well have a much greater skewing effect, and therefore the argument is being applied inconsistently.
A concise counter-argument query related to the argument #N:
以下是藉由
-
Chatgpt 4o 模型
-
Gemini 2.5 Flash 模型進行回答問題、
回答問題
A concise counter-argument query related to the argument #N:
Could it be argued that income-based fines still achieve a more equitable outcome overall than flat fines, even if they don’t account for every individual circumstance like wealth or dependents?
Counter-Argument for Proportional Fines
Counter-argument query: Does the current system of non-proportional fines already exacerbate these issues of impact inequality and wealth disparity, making a move toward income-proportional fines a step in the right direction, even if not a perfect solution?
一般來說,這樣的提示可以表示為:
(e_{\text{prompt}}, e_{\text{doc}}(d_1), e_{\text{query}}(q_1), \ldots, e_{\text{doc}}(d_k), e_{\text{query}}(q_k), e_{\text{doc}}(d))
各元素的定義:
e_{\text{doc}} 和 e_{\text{query}} 分別是特定於任務的文件,查詢描述,e_{\text{prompt}} 是ChatGPT/GPT-4的特定任務提示/指令,並且d是一個新的文件檔,大型語言模型(LLM)將為生成查詢
從此提示開始,僅使用最後一篇文件 d 和產生的查詢來進一步訓練本地模型。當目標檢索語料庫 D 可用,但新任務的註釋查詢-文檔對數量有限時,可以應用此方法。
整個管道概述:
圖片來源:Dai et ai.(2022)
圖片解釋開始:
- Target domain documents(目標領域文件)
- 它是使用者手邊已有的知識文本。例如法律條文、產品說明書、技術手冊等,這些將作為 LLM 的生成依據。
- Few-shot Prompt(少量範例提示)
- 用戶會準備幾個範例,格式如下:
Argument: {doc}
Counter-argument: {query}
- 這種格式提供上下文,讓 LLM 理解如何根據一段文件(Argument)生成對應的「查詢句」,也可以用來誘導 LLM 自動生成更多查詢-文件配對。
- Large LM(大型語言模型):
- 利用 GPT-4、Claude、PaLM、… 等大型模型,根據提示 + 文件,批次生成合成的查詢(Query)對應到原始文檔(Document)。
- Synthetic data (query, document) pairs(合成資料)
- 產出大量 Query-Document
- Small Dual Encoder(小型雙編碼檢索器):
- 最後使用這些合成資料訓練一個檢索模型(dual encoder)
圖片解釋結束:
負責任地處理範例的手動註釋至關重要。最好多準備一些(例如20個),並在提示中隨機挑選2-8個。這增加了生成數據的多樣性,而無需在註釋中花費大量時間。然而,這些範例應該具有代表性、格式正確,甚至詳細說明目標查詢長度或其語氣等細節。示例和指令越精確,合成數據就越能用於訓練 Retriever。低品質的少量範例可能會對定型模型的產生品質產生負面影響。
在大多數情況下,使用像 ChatGPT 這樣更實惠的模型就足夠了,因為它在英語以外的不尋常領域和語言上表現良好。比方說,一個帶有說明和 4-5 個示例的提示通常佔用 700 個令牌(假設由於 Retriever 限制,每個段落不超過 128 個令牌),生成為 25 個令牌。因此,為 50,000 個文件的語料庫產生合成資料集以進行本地模型微調將花費 50,000 * (700 * 0.001 * $0.0015 + 25 * 0.001 * $0.002) = 55,其中 $0.0015 和 $0.002 是 GPT-3.5 Turbo API 中每 1,000 個權杖的成本。甚至可以為同一文檔生成 2-4 個查詢示例。然而,進一步培訓的好處通常是值得的,特別是如果您不是將 Retriever 用於一般領域(例如英語新聞檢索),而是用於特定領域(如前面提到的捷克法律)。
50,000 這個數字並不是隨機的。在研究中Dai et ai.(2022),據稱這大約是模型所需的手動標記數據數量,以匹配在合成數據上訓練的模型的質量。想像一下,在推出您的產品之前必須收集至少 10,000 個範例!這需要不少於一個月的時間,人工成本肯定會超過一千美元,遠遠超過生成合成數據和訓練本地獵犬模型。現在,使用您今天學到的技術,您可以在短短幾天內實現兩位數的指標成長!
圖片來源:Dai et ai.(2022)
圖片解釋開始:
一張折線圖,橫軸是「# Human-annotated Examples」(人工標註範例數量),縱軸是「nDCG@10」(一種評估檢索模型表現的指標,數值越高越好)。圖中有兩條線:藍色實線標記為「Supervised」(監督學習),代表使用人工標註數據訓練的模型性能;橙色虛線標記為「8-shot Promptagator」(8個範例提示生成器),代表使用僅8個手動範例通過合成數據訓練的模型性能。圖中顯示,當人工標註範例數量達到N=50,000時,監督學習的性能才接近甚至略低於使用8個範例合成數據的性能
圖片解釋結束:
以下是同一篇論文中 BeIR 基準測試中一些數據集的提示範本。
圖片來源:Dai et ai.(2022)
圖片解釋:
一個表格,列出了多個數據集(Dataset)及其對應的「Prompt」(提示詞)格式。每一行展示了在不同類型的數據集(如 ArguAna, FiQA, HotpotQA 等)中,用於提示大型語言模型生成數據的基本結構,通常包含一個「passage X」(文章或段落X)和一個「query X」(查詢或問題X),以及如何將它們組織成特定的語義關係(例如:「Argument: passage X 1 Counter argument: query X」或「Evidence: passage X 1 Vexed question: query X」)
圖片解釋結束:
References
Generating Synthetic Dataset for RAG
目錄 : Applications - 大型語言模型應用和指南
上一篇 : Applications - 生成數據
下一篇 : Applications - 解決產生資料集的多元性



