2026-09-24 12 min read -- 次瀏覽
微調資料品質管控:先質檢,再訓練
數量、品質、分佈、去重、驗證五件事,讓你的微調不會輸在起跑線。
📌 本篇文章重點
- 微調前半段功力在資料:數量、品質、分佈、去重、驗證五件事。
- 「去重」常被忽略,卻最影響模型不亂記。
- 用腳本把長度、標籤、語言的統計拉出來,再靠眼睛抽查樣本。
- 留一份「驗證集」,防微調把模型調壞。
一、為什麼這篇值得看?
許多人微調失敗,不是參數錯,而是資料是「垃圾進」——重複、錯誤、分佈失衡、指令格式不一。這篇教你像「資料工程師」一樣看待資料:先質檢,再訓練。
二、核心概念,3 分鐘搞懂
微調的五個「資料抓手」:
- 數量:夠不代表好,但太少一定學不動。
- 品質:錯誤標註如毒藥,會被模型內化。
- 分佈:類別失衡會讓模型偏科。
- 去重:重複樣本會被重複教育,造成過擬合。
- 驗證:沒留驗證集,壞了也不知道。
💡 一句話總結
先讓資料「健康」,再讓模型「聰明」——順序不能反。
三、動手實作:3 步做資料健檢
Step 1
用統計清點「分佈」
Python
import pandas as pd
df = pd.read_json("train.jsonl", lines=True)
print(df["category"].value_counts()) # 類別分佈
print(df["instruction"].str.len().describe()) # 長度
print(df["output"].isna().sum()) # 缺漏值
看到「某類只有 3 筆」或「instruction 全長 5000 字」,就該先補資料,不是先開訓練。
Step 2
去重與衝突清洗
Python
# 1. 完全相同:直接 drop_duplicates
df = df.drop_duplicates(subset=["instruction"])
# 2. 近乎相同:用 embedding 距離去挑
# 同一指令但輸出互相矛盾 → 人工決策
for pair in near_dupes(df, threshold=0.95):
resolve(pair) # 保留品質高的那筆
⚠️ 隱形殺手
「同題不同答」的矛盾樣本會教模型「搖擺」。清洗時把這類剔掉或統一。
Step 3
抽樣目視 + 切驗證集
- 隨機抽 30–50 筆逐一目視:錯字、答非所問、格式不一致,標出來。
- 把乾淨資料切片成 train / eval(9:1,且 eval 不重複進 train)。
- 訓練後用 eval 跑一次,對比微調前的分數,看一般能力是否有退化。
四、常見髒資料與對策
| 髒資料 | 後果 | 對策 |
|---|---|---|
| 重複樣本 | 過擬合 | 去重(字串+向量) |
| 標註錯誤 | 學錯內容 | 抽樣人工覆蓋 |
| 類別失衡 | 偏科 | 重採樣/補樣本 |
| 格式不統一 | 輸出亂跳 | 正規化為同一模板 |
| 過長過短 | 注意力被稀釋 | 長度上下限截斷 |
五、常見問題(FAQ)
Q1幾筆才算「夠」?
風格/語氣微調,100–300 筆高品質就夠;要學「能力」,通常要幾千筆以上。先小量驗證方向,再加量。
Q2驗證集該放多少量?
10% 或至少 30–50 筆。太少看不出是否退化,太多又佔掉訓練量。
Q3AI 標註資料可以嗎?
可以當草稿,但高風險場景務必人工覆蓋。錯誤樣本的學習效果是「負面的」。
總結
微調成功的 70% 在資料:統計清點 → 去重清洗 → 抽樣目視+切驗證。資料健康了,那些學習率、epoch 才能真正發揮。先學「資料工程」,再談「模型工程」。