所有 public leaderboard 分數都到齊了,結果不僅印證了預測,還給了我們許多超出預期的震撼教育。
回顧週一的五路設計
這週的題目是 Kaggle 的 Disaster Tweets——判斷一則推文是不是在講真實的天災或緊急事件。五條路線同一份 Kaggle 官方切分、同一個 F1 指標:
- Route A:TF-IDF + Logistic Regression(M1 CPU,零訓練成本)
- Route B:DistilBERT 微調(Kaggle GPU 通用模型)
- Route C:本地
gemma4:e2b零樣本(純靠 prompt) - Route D:BERTweet 微調(Kaggle GPU 社群特化模型)
- Route E:NIM Embedding + Logistic Regression(雲端降維 + 本地分類)
結果對比表
| route | public LB | 本地驗證 | 訓練/推論成本 |
|---|---|---|---|
| D — BERTweet 微調 | 0.83941 | 0.82118 | Kaggle,約 72.6 分鐘(CPU) |
| E — Embedding + LogReg | 0.83113 | 0.81011 | NIM API,約 9 分鐘 |
| B — DistilBERT 微調 | 0.83052 | 0.81487 | Kaggle,34.4 分鐘(CPU) |
| A — TF-IDF + LogReg | 0.80018 | 0.76238 | M1 CPU,0.5 秒 |
| C — Gemma 零樣本 | 0.77536 | 0.76647 (樣本) | M1 CPU,34.5 分鐘 |
關鍵發現
王者誕生:領域特化的威力 (Route D)。 專精社群文本的 BERTweet 以 0.83941 穩坐冠軍寶座,拉開了與通用模型 DistilBERT 的差距。這證明了在特定的文本場景(尤其是充滿俚語與符號的推特)中,選擇一個「吃對語料長大」的預訓練模型,比調整參數更有效。
效能怪物:Embedding API 的逆襲 (Route E)。 這是本週最驚艷的發現。只花了 9 分鐘呼叫 NVIDIA NIM 的 Embedding API,再用最古老的 LogReg 畫一條線分類,竟然拿到了 0.83113 的超高分,幾乎打平了辛苦微調超過一小時的 DistilBERT!它既具備 LLM 的深層語意理解,又避開了生成式模型批量推論常見的速率限制與解析失敗,是批量分類的最強解法。但這個高分要打一個折扣——nlp-getting-started 是 Kaggle 最知名的公開教學資料集之一,不能排除 embedding 模型的預訓練語料已經掃過它的某個公開副本,細節見加碼文的但書段落。
零樣本沒訓練就打到 A 的 97% (Route C)。 gemma4:e2b 完全沒看過任何一筆這個任務的標記資料,純靠 prompt instruction,分數只落後 TF-IDF 2.5 分。當你完全沒有標記資料、或懶得訓練,本地 LLM 零樣本已經足夠當一個能用的應急方案。
成本與分數的極端對比 (Route A)。 Route A 只要半秒鐘就跑完,竟然還能死守 0.80 的大關。災難推文的分類線索(關鍵字、大寫比例)對淺層模型來說非常好抓。這證明了 TF-IDF 沒有過時,它永遠值得當作試水溫的第一條底線。
結論與適用場景
這場五路大亂鬥給了我們非常實用的模型選擇指南:
- 追求極致效能與開發速度:選 Embedding API + 淺層分類器。這絕對是未來處理海量文本分類的首選架構。
- 追求最高分數且有領域限制:去 HuggingFace 找領域特化 (Domain-specific) 的預訓練模型來微調。
- 完全沒有標記資料:直接上本地 LLM 做 Zero-shot,它能給你一個及格的起跑點。
- 驗證任務難度:先跑一次 TF-IDF,半秒鐘就能知道這個任務的天花板在哪裡。
延伸閱讀與番外篇
五條路線各自的實作細節與血淚史,已經拆成了單獨的筆記:
- 0.5 秒極速基準:TF-IDF 筆記(已發)
- 三次 push 的 Kaggle 踩坑記:DistilBERT 筆記(已發)
- 免費的最貴:零樣本 Gemma 筆記(已發)
[加碼大結局!] 如果你覺得這五條路線還不夠過癮,我們其實還做了更瘋狂的嘗試:把這 10,000 筆資料丟給 70B 等級的雲端巨獸做 Zero-shot,並試圖把 A、D、E 混合在一起做終極的 Ensemble!想看雲端大模型為何集體陣亡、以及 Ensemble 的防霸凌數學巧思,請見番外篇: 👉 加碼對決:雲端 LLM 慘遭滑鐵盧,Embedding 模型與 Ensemble 的逆襲