SFT 指令微調數據如何構建?
SFT的重點是學習樣式,而非知識注入,所以SFT的樣本在于其質量而非數量,少量但精良的樣本往往勝過大批中低品質的樣本,實現同樣甚至更優的微調效果。通常情況下,2-10k數據就會有一個不錯的效果。這一理念在Meta發布的《LIMA: Less Is More for Alignment》論文中得到了有力闡述,該文獻強調了在指令微調過程中,高品質微調數據的決定性作用。據此,SFT數據應當將重心放在提升樣本質量的打磨上,而非單純追求數量的增長。
1、構建策略
- 任務導向策略:明確需要模型完成的具體任務,如文本分類、情感分析、機器翻譯等,根據任務定義構建相應的指令模板。例如,對于文本分類任務,指令可以是“將以下文本分類為正面或負面”。
- 數據來源多樣化策略:收集與任務相關的原始數據,數據來源可以包括公開數據集、專業數據庫、眾包平臺等。同時,可以結合領域知識庫生成包含特定領域概念的指令和響應。
- 數據增強策略:通過同義詞替換、句子重構等方法增加數據多樣性,提高模型的泛化能力。還可以適當構建few-shot及COT(Chain of Thought)數據加入訓練,有助于模型的指令理解以及多輪對話能力。
- 多任務學習與混合訓練策略:可以采用多任務學習的方式,將不同的SFT數據源混合后進行訓練。也可以采用混合序列訓練或雙階段混合微調(DMT)策略,先在專業數據集上訓練,再在通用能力數據集上訓練,或在第二階段加入不同比例的專業數據。
2、構建原則
樣本多樣性(Sample Diversity)
- 指令多樣性:考察樣本中指令的覆蓋范圍是否廣泛,是否包含了各類任務類型、不同難度級別以及多樣化的指令結構和表達方式,確保模型在微調后能應對多種復雜情境。
- 內容多樣性:檢查樣本中提供的文本內容是否涵蓋了不同主題、文體、長度以及語境,以避免模型在特定領域或文本類型上過擬合,確保其具備良好的泛化能力。
答案質量(Answer Quality)
- 準確性(Accuracy):評估答案是否準確無誤地響應了給定指令和內容,是否忠實反映了任務要求,且不包含事實性錯誤、邏輯矛盾或語義模糊。
- 完備性(Completeness):考察答案是否全面覆蓋了指令所要求的所有任務點,尤其對于多步驟或復合任務,答案應完整體現所有必要的操作結果。
- 簡潔性與清晰度(Conciseness & Clarity):衡量答案是否言簡意賅、表達清晰,避免冗余信息或含糊表述,確保模型在微調后生成的輸出易于理解和使用。
一致性(Consistency)
- 內部一致性:檢查同一指令對不同內容的處理結果是否保持一致,即模型在相似情境下應給出相似的答案。
- 外部一致性:對比樣本答案與已知的知識庫、專家判斷或公認的基準結果,確保答案符合領域共識和常識。
難度適配(Difficulty Calibration)
難易程度分布:分析樣本集中簡單、中等、復雜任務的比例,確保微調數據集包含不同難度級別的樣本,有助于模型逐步提升處理復雜指令的能力。
噪聲控制(Noise Reduction)
- 標簽錯誤檢查:識別并剔除標注錯誤或不一致的樣本,確保答案與指令、內容間的映射關系正確無誤。
- 數據清洗:去除重復樣本、無關內容或低質量文本,提升數據集的整體純凈度。
3、構建流程
- 確定任務和指令:明確任務定義,根據任務構建相應的指令模板。
- 收集原始數據:從公開數據集、專業數據庫或眾包平臺等渠道收集與任務相關的原始數據。
- 數據清洗:對收集的數據進行清洗,去除無效或不相關的信息。
- 標注數據:按照制定的標注標準,通過人工標注或使用半自動化工具標注數據,包括指令和預期輸出。
- 設計指令微調數據集:將數據集分割為訓練集、驗證集和測試集。同時,根據需要對指令進行格式化,確保與模型輸入要求一致。
- 增強數據多樣性:通過數據增強方法和覆蓋不同場景,提高數據的多樣性和模型的泛化能力。
- 評估和迭代:對構建的數據集進行評估,檢查數據質量和多樣性是否符合要求。根據評估結果進行迭代優化,以提高數據集的質量。