
在沒有資料科學團隊的情況下清理和整理微調資料集
逐步指南:使用無程式碼工具清理、驗證和整理微調資料集——涵蓋去重複、標籤驗證、格式檢查以及針對非技術團隊的分佈分析。
大多數微調失敗不發生在訓練期間。它們發生在訓練之前——在資料集中。使用雜亂資料訓練的模型會產生雜亂的輸出。使用標籤不一致的資料訓練的模型會產生不一致的分類結果。使用與生產輸入不匹配的資料訓練的模型在生產環境中表現不佳。
問題在於資料清理傳統上是資料科學的任務。它涉及編寫用於去重複的 Python 腳本、構建用於分佈檢查的統計分析,以及創建自訂驗證管道。如果您是 AI 代理商、產品負責人或沒有資料工程背景的獨立開發者,這可能感覺像是一堵牆。
但其實不必如此。以下 6 步驟流程使用無程式碼工具、試算表技巧和 LLM 輔助驗證來生產乾淨、可投入生產的微調資料集。我們見過代理商使用這種方法在 2-4 小時內清理 1,000 個示例的資料集——無需 pandas、無需 Python、無需資料科學學位。
為什麼資料清理如此重要
以下是我們定期看到的三種情況:
情況 1: 一家代理商從客戶那裡收集了 2,000 個客戶支援示例。他們立即進行微調。模型在測試集上獲得 78% 的準確率。他們花了兩週嘗試不同的超參數、學習率和訓練輪次。沒有什麼能顯著改變這個數字。
情況 2: 另一家代理商從同類型的客戶那裡收集了 800 個示例。他們花半天清理資料。他們進行微調。模型在可比測試集上獲得 91% 的準確率。
差異不在於模型、超參數或訓練方式。在於資料。
髒資料在訓練期間引入矛盾信號。如果示例 #142 說輸入 X 屬於類別 A,而示例 #891 說一個幾乎相同的輸入屬於類別 B,模型就無法可靠地學習任何一個。這些矛盾在收集過程中是不可見的,但在訓練期間卻是毀滅性的。
經驗法則: 每花一小時清理資料,可以節省 3-5 小時後期調試模型性能的時間。
6 步驟清理流程
步驟 1:格式驗證(15-30 分鐘)
在做任何其他事情之前,驗證資料集中的每個示例在結構上是否正確。這可以發現那些本來會導致訓練失敗或靜默資料損壞的明顯問題。
需要檢查的內容:
- 每個示例都包含所有必填欄位(輸入、輸出以及訓練管道所需的任何元資料欄位)
- 必填欄位中沒有空值或 null 值
- 輸出值匹配預期類型(例如,類別標籤來自預定義集合,而非自由文字變體)
- 文字欄位不包含編碼偽影、HTML 標籤或不可見字元
如何在不編寫程式碼的情況下完成:
在試算表(Google Sheets 或 Excel)中打開您的資料集。使用以下技巧:
- 缺失值: 對每列排序。空白儲存格會聚集在頂部或底部。標記並調查它們。
- 無效標籤: 為類別欄位建立下拉驗證清單。任何不符合有效類別的儲存格都會顯示驗證錯誤。在 Google Sheets 中:資料 > 資料驗證 > 項目清單。
- 長度檢查: 添加一列使用
=LEN(A2)來檢查輸入和輸出長度。按長度排序。極短的輸入(少於 10 個字元)通常是資料輸入錯誤。極長的輸出可能包含複製貼上偽影。 - 字元問題: 使用
=CLEAN(A2)刪除不可列印的字元。如果A2 <> CLEAN(A2),該儲存格包含可能損壞訓練的不可見字元。
使用 Ertas Vault: 上傳您的資料集,Vault 會自動執行格式驗證。它標記缺失欄位、無效標籤值、編碼問題和長度異常。您審查並修復標記的項目,而不是自己尋找它們。
典型結果: 3-8% 的示例存在格式問題。修復它們通常很簡單——填寫缺失欄位、糾正類別標籤中的拼寫錯誤、刪除編碼偽影。
步驟 2:去重複(15-30 分鐘)
重複和近似重複的示例浪費訓練容量,可能導致模型記憶特定示例而非學習一般規律。
完全重複 很容易:按輸入欄位對試算表排序,掃描相同的行。在 Google Sheets 中,使用條件格式突出顯示重複項:格式 > 條件格式 > 自訂公式:=COUNTIF(A:A, A2)>1。
近似重複 更難但更重要。這些是措辭略有不同但傳達相同資訊的輸入。例如:
- 「我如何取消訂閱?」
- 「我能怎樣取消訂閱?」
- 「我想取消訂閱」
這三個示例基本上教模型相同的事情。在小數量的情況下,資料集中包含這三個示例並不有害,但如果 15% 的資料集是近似重複,您的有效資料集大小比您想像的小 15%。
不編寫程式碼: 按輸入文字排序並直觀掃描。大多數近似重複會按字母順序聚集在一起。標記輸入與上方或下方行非常相似的行。
使用 LLM 輔助: 將 50-100 個輸入批次粘貼到 Claude 或 GPT-4o 中,提示如下:
Review these inputs and identify groups that are near-duplicates
(same meaning, different phrasing). List each group with the
row numbers. Only flag true semantic duplicates, not inputs
that happen to discuss the same topic.
[paste inputs with row numbers]
使用 Ertas Vault: Vault 計算所有輸入對的嵌入相似度,並自動標記超過可配置相似度閾值(預設:0.92 餘弦相似度)的對。您審查標記的對並決定保留哪個。
典型結果: 在手動收集的資料集中,5-15% 的示例是近似重複。在合成資料集中,這可能是 15-25%。從每個重複組中刪除所有示例,只保留一個——保留品質最高的版本。
步驟 3:標籤一致性檢查(1-2 小時)
這是影響最大的步驟。不一致的標籤是訓練品質下降的頭號原因,除非您主動尋找,否則它們是不可見的。
問題所在: 不同的標註者(或同一個標註者在不同天)對相似輸入的標籤不同。類別之間的邊界被不一致地解釋。邊緣案例根據標籤者和時間被分配到不同的類別。
如何在不編寫程式碼的情況下檢查:
方法 1:類別審查。 按每個類別篩選試算表。閱讀每個類別的 20-30 個示例。問自己:「這些都清楚地屬於這個類別嗎?」標記任何看起來處於邊緣或放錯位置的示例。
方法 2:混淆對分析。 對於每對可能被混淆的類別(例如,「billing_error」vs「refund_request」),篩選兩個類別並比較示例。它們之間的界限清晰且一致嗎?
方法 3:LLM 輔助審查。 這是最快的方法。將 50-100 個示例(輸入 + 分配的標籤)粘貼到前沿模型中:
Review these labeled examples for consistency. For each example,
confirm whether the assigned label is correct or suggest a
correction. Pay special attention to:
- Examples that could belong to multiple categories
- Labels that seem inconsistent with similar examples
- Edge cases where the labeling guideline may be ambiguous
Format: Row [number]: [CORRECT / INCORRECT → suggested label] — [brief reason]
[paste examples]
分批對整個資料集執行此操作。LLM 標記為不正確的任何示例都需要人工審查。
典型結果: 5-12% 的示例存在標籤不一致。修復它們通常可以將模型準確率提高 3-8%——這是整個微調管道中 ROI 最高的單一活動。
步驟 4:分佈分析(30-45 分鐘)
訓練資料的分佈應近似生產資料的分佈。如果不是,您的模型將校準不良——對罕見類別過於自信,對常見類別表現不佳。
需要檢查的內容:
- 類別分佈。 統計每個類別的示例數量。計算每個類別的百分比。與生產分佈(或您對其的最佳估計)進行比較。
- 輸入長度分佈。 訓練輸入是否代表模型將看到的內容?如果生產輸入範圍從 20 到 800 個詞,但您的訓練資料全部是 100-200 個詞,模型在處理短輸入和長輸入時將遇到困難。
- 時間分佈。 如果您的資料是隨時間收集的,請檢查分佈是否發生了變化。6 個月前的資料可能反映與當前生產流量不同的模式。
如何在不編寫程式碼的情況下完成:
在試算表中:
- 類別計數: 對每個類別使用
=COUNTIF(B:B, "category_name")。創建簡單的條形圖。 - 長度分佈: 添加詞數列:
=LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ",""))+1。創建直方圖(插入 > 圖表 > 直方圖)。 - 與生產資料比較: 如果您有生產資料,請創建並排圖表。從視覺上看,形狀應該相似。如果某個類別在生產中佔 5% 但在訓練資料中佔 25%,則存在分佈不匹配。
如何處理不匹配:
- 過度代表的類別: 刪除多餘的示例,優先刪除品質較低或重複的示例。
- 代表不足的類別: 為該類別生成更多示例(合成資料在這裡效果很好),或收集更多真實示例。
- 輸入長度不匹配: 在代表不足的長度上明確生成示例。
典型結果: 大多數手動收集的資料集有 1-3 個類別嚴重過度或代表不足。重新平衡通常可以將代表不足類別的性能提高 10-20%,而對過度代表的類別影響甚微。
步驟 5:異常值移除(30-45 分鐘)
訓練資料中的異常值是與資料 集其餘部分截然不同的示例。它們不一定是錯誤的——它們可能是合法的邊緣案例——但它們可能不成比例地影響訓練,尤其是在小型資料集中。
需要尋找的異常值類型:
- 極長或極短的輸入。 如果 98% 的輸入是 50-300 個詞,而兩個示例有 2,000 個詞,這些異常值可能在訓練過程中主導梯度更新。
- 偏題示例。 以某種方式進入資料集但根本不屬於任務域的輸入。
- 模糊示例。 即使是領域專家也無法自信地分配正確標籤的輸入。這些是訓練雜訊,不是有用的邊緣案例。
如何在不編寫程式碼的情況下找到它們:
- 按輸入長度排序。檢查頂部和底部 2-3% 是否有異常。
- 按輸出長度排序。同樣的檢查。
- 對於每個類別,按字母順序排序並掃描前幾個和最後幾個示例——內容中的異常值通常排列在兩端。
決策框架: 對於每個異常值,問:「我的模型在生產中會遇到這樣的輸入嗎?」如果是,保留它(並考慮添加類似示例以減少其孤立性)。如果不是,刪除它。
典型結果: 1-3% 的示例是值得刪除的異常值。單獨的影響很小,但與其他清理步驟一起累積。
步驟 6:最終人工審查(1-2 小時)
最後一步是對步驟 1-5 中標記的所有內容進行有針對性的人工審查,加上最後的隨機抽樣。
審查標記的項目: 逐一查看您在之前步驟中標記的每個示例。做出最終決定:修復、保留或刪除。
隨機抽樣檢查: 從清理後的資料集中抽取 30-50 個隨機示例。閱讀每一個。如果您在 50 個示例中發現超過 1-2 個問題(錯誤率超過 4%),則需要再進行一輪清理。如果 0-1 個問題,您的資料集已準備好。
記錄您的決定。 保留一份關於您建立的標籤規則、您解決的邊緣案例以及您澄清的類別的簡短日誌。這份文檔在您以後需要擴展資料集時非常有價值——它確保原始資料集和新增內容之間的一致性。
按任務類型分類的常見資料問題
分類任務
最常見問題: 標籤錯誤的示例,尤其是在類別邊界。兩個概念上重疊的類別(例如,「投訴」vs「反饋」)將存在不一致的標籤。 修復: 為每個類別邊界編寫明確的決策標準。將標準應用於所有邊緣案例示例。
文字生成任務
最常見問題: 輸出風格不一致。一些示例使用正式語氣,其他使用隨意語氣。一些包含標題,其他不包含。模型學習了這種不一致性。 修復: 為輸出定義風格指南。重寫偏離的示例。即使是小的格式差異(輸出末尾有無句號)也很重要。
提取任務
最常見問題: 缺少欄位。一些示例提取所有目標欄位,其他遺漏可選欄位。模型學習到缺少欄位是可以接受 的。
修復: 決定哪些欄位是必填的,哪些是可選的。對於必填欄位,每個示例都必須包含它們。對於可選欄位,對「未找到」使用一致的表示(例如,null vs 空字串——選一個)。
對話任務
最常見問題: 輪次結構不一致。一些對話以問候開始,其他直接跳到任務。一些包含系統消息,其他不包含。 修復: 標準化對話結構。每個對話應遵循相同的輪次順序、角色標籤和系統消息格式模板。
時間估算
以下是完整 6 步驟流程的實際耗時,基於我們與代理商團隊的經驗:
| 資料集大小 | 手動清理 | 使用 Vault + LLM 輔助 | 品質提升 |
|---|---|---|---|
| 250 個示例 | 1.5-2.5 小時 | 30-45 分鐘 | +5-10% 準確率 |
| 500 個示例 | 2-4 小時 | 45-90 分鐘 | +5-12% 準確率 |
| 1,000 個示例 | 3-6 小時 | 1-2 小時 | +5-15% 準確率 |
| 2,500 個示例 | 6-12 小時 | 2-4 小時 | +5-15% 準確率 |
| 5,000 個示例 | 12-20 小時 | 4-8 小時 | +5-15% 準確率 |
準確率提升列顯示了與在未清理資料集上訓練相比,在保留測試集上的典型增益。這是您僅從清理中獲得的額外性能——不需要更改模型、超參數或訓練方式。
何時清理,何時生成更多資料
先清理,如果:
- 您的隨機審計發現超過 5% 的問題
- 您尚未進行任何清理
- 您的學習曲線是平的(更多資料沒有幫助)
- 您的類別不平衡超過 2 倍
生成更多資料,如果:
- 您的資料已經乾淨(超過 96% 的標籤準確率)
- 在當前資料集大小下,您的學習曲線仍在上升
- 特定類別代表不足,您找不到更多真實示例
- 您需要覆蓋現有資料中不存在的輸入模式
在大多數情況下,正確的順序是:先清理,然後評估,然後在需要時生成更多。跳過清理直接收集資料的團隊最終花費 2-3 倍的時間,因為他們收集的資料複合了現有的品質問題。