完整程式碼可在 GitHub 專案中找到:Finetune-30-days-demo / day-12
前面幾天,我們已經能做到:
但是光是能「記錄」還不夠。當實驗數量一多,如果不能比較不同模型與參數組合,我們就無法回答這些問題:
因此,Day 12 的重點是:利用我們的 metrics.json 與資料庫,做效能紀錄與比較分析。
每次訓練完成後,系統會自動寫入一份 metrics.json,包含以下四類資訊:
訓練指標 (train)
評估指標 (eval)
系統資源 (system)
訓練參數 (meta)
這些資料會存進 SQLite DB,讓我們能進一步查詢與比較。
我們在相同參數下,測試了四個不同的模型:
模型 | 準確率 | 訓練時間 | 處理速度 | 特點 |
---|---|---|---|---|
DistilBERT | 85% | 11.10 秒 | 5,765 tokens/sec | ✅ 輕量快速,準確率表現不錯 |
RoBERTa | 86% | 22.17 秒 | 2,887 tokens/sec | ✅ 準確率高,速度中等 |
ALBERT | 62% | 23.25 秒 | 2,753 tokens/sec | ❌ 準確率偏低,收斂較慢 |
BERT Chinese | 56% | 20.01 秒 | 3,199 tokens/sec | ❌ 適合中文,英文任務表現差 |
🔎 觀察:
在基礎比較後,我們挑選了兩個「值得進一步優化」的模型:
RoBERTa → 追求最高準確率
DistilBERT → 追求速度與效率
模型 | 優化前準確率 | 優化後準確率 | 優化前時間 | 優化後時間 | 處理速度 | 說明 |
---|---|---|---|---|---|---|
RoBERTa | 86% | 91% | 22.17 秒 | 39.77 秒 | 1,609 tokens/sec | ✅ 準確率提升最多,但成本增加 |
DistilBERT | 85% | 81% | 11.10 秒 | 10.92 秒 | 5,861 tokens/sec | ⚡ 速度維持,準確率略降 |
RoBERTa:適合追求準確率的場景
DistilBERT:適合追求速度與效率的場景
ALBERT & BERT Chinese
Day 12 的重點在於,系統不再只是單純紀錄結果,而是能透過 metrics.json 與資料庫進行系統化的比較分析。這讓我們能清楚地看出不同模型在準確率、速度與資源消耗上的差異,也讓「哪個模型適合哪種場景」有了明確依據。
更進一步,透過不同優化策略的實驗,我們看見了兩條清楚的路線:RoBERTa 代表了高準確率的追求,而 DistilBERT 則展現了高效率的價值。這樣的比較,不僅幫助我們在有限資源下做決策,也為接下來的部署策略選型打下了基礎。