第 3 篇/共 12 篇
怎麼讓現成模型學會你的任務,還做成網頁 Demo?
拿現成的 BERT,用推文資料微調成分類器,再用 Gradio 放上 Hugging Face Spaces。交大第 1 章的完整流程白話版。
一句話回答
不用從零訓練:先挑一個已經讀過大量文字的「預訓練模型」(例如 BERT),用你自己的標註資料再訓練一小段,這叫微調(Fine-tuning)。訓練好之後,寫一個幾十行的 Gradio 小程式,上傳到 Hugging Face Spaces,就有一個別人點網址就能用的網頁 Demo。
為什麼值得知道
很多工作上的需求,其實都是「分類」:
- 客服信件要分到哪個部門?
- 這則評論是好評還是負評?
- 這篇貼文是不是詐騙、是不是在講真實事件?
用大型聊天模型每次下提示也做得到,但如果資料量大、要求穩定又便宜,一個微調過的小模型常常更划算。而把成果做成網頁 Demo,是跟主管、客戶、教授溝通最快的方式:與其給報告,不如給一個能輸入文字、馬上看到結果的頁面。
白話原理
預訓練 vs. 微調
| 階段 | 做什麼 | 比喻 |
|---|---|---|
| 預訓練(Pre-training) | 模型讀大量文字,學會語言的一般規律 | 一個讀過很多書的大學畢業生 |
| 微調(Fine-tuning) | 用你的標註資料再訓練,學會特定任務 | 新人到公司接受一週的部門訓練 |
| 推論(Inference) | 用訓練好的模型處理新資料 | 新人正式上線接案 |
微調的成本遠低於預訓練,因為模型已經「懂語言」,只需要學會你的判斷標準。
三個關鍵工具
- Transformers:Hugging Face 的 Python 套件,一行就能下載 BERT、T5 這類模型,也提供訓練範例腳本。
- BERT(bert-base-uncased):擅長「讀懂」文字的模型,很適合分類。它不是聊天模型,不會生成長篇回答。
- Gradio+Spaces:Gradio 能用很少的程式碼做出輸入框、按鈕和結果顯示;Spaces 是 Hugging Face 提供的託管平台,把檔案放上去就會變成公開網頁。
教程裡實際做了什麼
任務是推文分類:教程稱為「虛假推文」資料集,來源是 Kaggle 入門競賽,每則推文標 0 或 1(是不是在講真實災難)。
- 建立環境:用 conda 建 Python 3.9 環境,安裝 Transformers 和相關套件;原文提醒 PyTorch 要裝 GPU 版,不然只能用 CPU 跑。
- 準備資料:下載 Kaggle 資料,切成訓練、驗證、測試三份。
- 路線一:拆開版(建議先看):只有三個檔案,分別負責讀資料、定義模型、訓練/驗證/預測,一行指令跑完。結構清楚,方便改成自己的資料或評估指標。
- 路線二:官方整合版(選做):用 Transformers 內建的分類腳本,靠參數控制。示範設定是 bert-base-uncased、最長 512 個 token、批次大小 32、學習率 2e-5、訓練 1 輪,用準確率評估。
- 排除網路問題:卡在下載模型或載入評估指標時,就先把它們下載到本機,參數改指向本機路徑。
- 部署:在 Hugging Face 建立 Gradio 類型的 Space,上傳
app.py、requirements.txt和訓練好的模型,Space 會自動建置成網頁。原文附了一個已部署的範例可參考。 - 進階練習:換成情感分類、新聞分類,或換 T5、ELECTRA 等模型;也列了問答、摘要、LoRA 輕量微調等參考資源。
硬體:原文沒寫明確的顯存需求。
動手試試
最小可行做法:
- 開一個 Colab 筆記本,執行階段選 GPU(免費額度時有時無,以當下為準)。
- 照 Transformers 官方文字分類範例,把 BERT 微調在一份小型標註資料上。BERT-base 規模不大,通常在 Colab 的 GPU 上跑得動。
- 訓練完,用極簡 Gradio 介面測試(MK 自己寫的示意,非教程原文):
import gradio as gr
from transformers import pipeline
clf = pipeline("text-classification", model="./my-model")
def predict(text):
return clf(text)[0]["label"]
gr.Interface(fn=predict, inputs="text", outputs="text").launch()
- 跑通之後,到 Hugging Face 建立 Gradio Space,把這支程式、套件清單和模型上傳。
只有 CPU 的筆電也能跑但慢很多,建議先用幾百筆資料試流程。
常見誤解
- 「微調就是重新訓練一個大模型」:微調是在現成模型上「補課」,資料量和運算量都小得多。
- 「BERT 跟 ChatGPT 是同一種東西」:BERT 擅長理解和分類,不擅長自由生成對話,任務選錯模型會事倍功半。
- 「準確率高就能上線」:要注意資料是否平衡、驗證集是否和訓練集重複,以及實際使用的文字是否和訓練資料長得像。
- 「放上 Spaces 就安全」:公開 Space 任何人都看得到程式碼,敏感資料別放。
延伸閱讀
- 第 1 章原文:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter1
- Gradio Spaces 說明:https://huggingface.co/docs/hub/en/spaces-sdks-gradio
本文整理自上海交通大學《動手學大模型》第 1 章,原教程:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter1 。內容由 MK 以自己的話解說,如有錯誤歡迎留言指正。
追蹤 MK,掌握最新 AI 工具應用
每週分享 GitHub 飆星實測、AI 工具教學與提示詞,短影片版都在社群。