免費全文 模型微調 進階

微調資料集怎麼準備:格式、數量與品質的實際標準

微調成敗八成取決於資料。這篇是可以直接照做的準備流程。

模型微調教程封面

微調最常見的失敗不是超參數設錯,而是資料本身就有問題——標註不一致、格式混雜、混進了模型本來就會的簡單樣本。

資料格式

// train.jsonl,每行一筆對話
{"messages": [
  {"role": "system",    "content": "你是客服工單分類助手。"},
  {"role": "user",      "content": "我上週訂的東西還沒到"},
  {"role": "assistant", "content": "{\"type\":\"logistics\",\"urgency\":\"mid\"}"}
]}

system 訊息務必與上線時完全一致。訓練時寫一種、推論時寫另一種,等於白訓練。

數量的實際感覺

  • 固定格式輸出:300–500 筆常常就夠。
  • 分類任務:每個類別至少 50 筆,罕見類別要刻意補。
  • 語氣與寫作風格:1000 筆以上才會穩定。
  • 複雜推理:微調不是好工具,先考慮換模型或改流程。

品質檢查清單

  1. 同一種輸入的標註是否一致——抽 50 筆讓第二個人重標,看一致率。
  2. 有沒有重複樣本,去重後數量掉多少。
  3. 標籤分布是否嚴重偏斜。
  4. 輸出是否都符合目標格式(用程式驗證,不要人工看)。
  5. 有沒有混進個資或機密內容。
import json, collections, hashlib

seen, dup, bad = set(), 0, 0
dist = collections.Counter()
for line in open('train.jsonl', encoding='utf-8'):
    row = json.loads(line)
    out = row['messages'][-1]['content']
    key = hashlib.md5(json.dumps(row, sort_keys=True).encode()).hexdigest()
    if key in seen: dup += 1
    seen.add(key)
    try:    dist[json.loads(out)['type']] += 1
    except Exception: bad += 1
print(f'重複 {dup} 筆、格式錯誤 {bad} 筆、分布 {dist}')
切驗證集要在去重之後,而且要確保驗證集裡沒有與訓練集近似重複的樣本,否則分數會虛高。
下一步

這個主題還有更深入的實戰教程

VIP 專區收錄 50 篇進階內容:架構設計、生產環境取捨、成本與合規。 每週五新增 3 篇。

看訂閱方案 → 先逛逛 VIP 專區

延伸閱讀

更多模型微調 →