MKMK 的 AI 筆記
動手學大模型 12 問

第 3 篇/共 12 篇

怎麼讓現成模型學會你的任務,還做成網頁 Demo?

閱讀約 9 分鐘(約 1,233 字)發布 分類 一人公司工作流+學習系列

#微調#Hugging Face#Gradio#LLM

怎麼讓現成模型學會你的任務,還做成網頁 Demo?

拿現成的 BERT,用推文資料微調成分類器,再用 Gradio 放上 Hugging Face Spaces。交大第 1 章的完整流程白話版。

本文目錄
  1. 一句話回答
  2. 為什麼值得知道
  3. 白話原理
    1. 預訓練 vs. 微調
    2. 三個關鍵工具
  4. 教程裡實際做了什麼
  5. 動手試試
  6. 常見誤解
  7. 延伸閱讀

一句話回答

不用從零訓練:先挑一個已經讀過大量文字的「預訓練模型」(例如 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(是不是在講真實災難)。

  1. 建立環境:用 conda 建 Python 3.9 環境,安裝 Transformers 和相關套件;原文提醒 PyTorch 要裝 GPU 版,不然只能用 CPU 跑。
  2. 準備資料:下載 Kaggle 資料,切成訓練、驗證、測試三份。
  3. 路線一:拆開版(建議先看):只有三個檔案,分別負責讀資料、定義模型、訓練/驗證/預測,一行指令跑完。結構清楚,方便改成自己的資料或評估指標。
  4. 路線二:官方整合版(選做):用 Transformers 內建的分類腳本,靠參數控制。示範設定是 bert-base-uncased、最長 512 個 token、批次大小 32、學習率 2e-5、訓練 1 輪,用準確率評估。
  5. 排除網路問題:卡在下載模型或載入評估指標時,就先把它們下載到本機,參數改指向本機路徑。
  6. 部署:在 Hugging Face 建立 Gradio 類型的 Space,上傳 app.py、requirements.txt 和訓練好的模型,Space 會自動建置成網頁。原文附了一個已部署的範例可參考。
  7. 進階練習:換成情感分類、新聞分類,或換 T5、ELECTRA 等模型;也列了問答、摘要、LoRA 輕量微調等參考資源。

硬體:原文沒寫明確的顯存需求。

動手試試

最小可行做法:

  1. 開一個 Colab 筆記本,執行階段選 GPU(免費額度時有時無,以當下為準)。
  2. 照 Transformers 官方文字分類範例,把 BERT 微調在一份小型標註資料上。BERT-base 規模不大,通常在 Colab 的 GPU 上跑得動。
  3. 訓練完,用極簡 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()
  1. 跑通之後,到 Hugging Face 建立 Gradio Space,把這支程式、套件清單和模型上傳。

只有 CPU 的筆電也能跑但慢很多,建議先用幾百筆資料試流程。

常見誤解

  • 「微調就是重新訓練一個大模型」:微調是在現成模型上「補課」,資料量和運算量都小得多。
  • 「BERT 跟 ChatGPT 是同一種東西」:BERT 擅長理解和分類,不擅長自由生成對話,任務選錯模型會事倍功半。
  • 「準確率高就能上線」:要注意資料是否平衡、驗證集是否和訓練集重複,以及實際使用的文字是否和訓練資料長得像。
  • 「放上 Spaces 就安全」:公開 Space 任何人都看得到程式碼,敏感資料別放。

延伸閱讀

本文整理自上海交通大學《動手學大模型》第 1 章,原教程:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter1 。內容由 MK 以自己的話解說,如有錯誤歡迎留言指正。

追蹤 MK,掌握最新 AI 工具應用

每週分享 GitHub 飆星實測、AI 工具教學與提示詞,短影片版都在社群。