# 怎麼讓現成模型學會你的任務，還做成網頁 Demo？

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

- 作者：Michael Kuo（https://mk-ai-notes.pages.dev/about/）
- 發布日期：2026-11-02（2026-11-02T20:02:00+08:00）
- 原文網址：https://mk-ai-notes.pages.dev/posts/ep02-finetune/
- 分類：一人公司工作流＋學習系列（https://mk-ai-notes.pages.dev/category/workflow/）
- 系列：動手學大模型 12 問 第 3 篇／共 12 篇（https://mk-ai-notes.pages.dev/series/dive-into-llms/）
- 標籤：微調、Hugging Face、Gradio、LLM
- 閱讀時間：約 9 分鐘（約 1233 字）
- 參考來源：https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter1

![怎麼讓現成模型學會你的任務，還做成網頁 Demo？](https://mk-ai-notes.pages.dev/og/ep02-finetune.png)

---

## 一句話回答

不用從零訓練：先挑一個已經讀過大量文字的「預訓練模型」（例如 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 自己寫的示意，非教程原文）：

```python
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()
```

4. 跑通之後，到 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 以自己的話解說，如有錯誤歡迎留言指正。

---

本系列整理自上海交通大學《動手學大模型》公益教程（https://github.com/Lordog/dive-into-llms），以自己的話解說，非官方內容。

引用本文請附原文網址：https://mk-ai-notes.pages.dev/posts/ep02-finetune/（作者：Michael Kuo）
