用你自己的標註訓練模型
在管理員訓練頁面上用研究的標籤訓練模型,在留出條目上給模型打分,並把預測作為預標籤展示給標註者。
v2.14.0 新增
模型訓練用標註者已經給出的標籤擬合一個模型,在訓練時留出的條目上給模型打分,還可以把模型的答案作為預標籤展示給標註者,由標註者確認或修改。本頁說明訓練迴圈、管理員訓練頁面、按任務分組的訓練器,以及詳細介紹各個部分的頁面或教程。本頁面向執行自託管 Potato 伺服器的研究負責人和管理員。訓練頁面和 sklearn-text 訓練器從 2.11 起就是 Potato 的一部分。2.14.0 版新增 37 個訓練器、在 GPU 伺服器和 SLURM 叢集上的遠端訓練、Runs 表裡的留出得分,以及釋出到 Hugging Face Hub。
訓練迴圈
迴圈的每一輪都用目前收集到的人工標籤訓練一個模型,並把模型的答案作為起點交給下一位標註者。迴圈分六步:
- 標註。 標註者照常給條目打標籤,Potato 把多位標註者在同一條目上的標籤合併為一個標籤,預設用 Dawid-Skene,也可以用多數投票。
- 訓練。 一次執行把已標註的條目劃分為 train、val 和 test 三部分,並在單獨的程序裡擬合模型。每個條目在每次執行中都落在同一個劃分裡,因為劃分是條目 ID 的帶種子雜湊。
- 打分。 執行在留出的 val 和 test 條目上給模型打分。
- 回寫。 執行的預測作為預標籤,寫入你所選方案的條目資料。低於置信度下限的預測和 train 劃分條目上的預測不會寫入。
- 修正。 下一位標註者看到的是已經填好的模型答案,可以確認,也可以修改。稽核者還可以記錄模型是否答對。
- 重新訓練。 下一次執行在新標籤上訓練,稽核者修正過的每個條目都進入 train 劃分。
開啟訓練
模型訓練預設關閉,只需一個配置鍵就能開啟。把下面這個塊加到現有配置裡:
model_training:
enabled: true重啟伺服器,用管理員會話或管理員 API 金鑰開啟 /admin/training。沒有 enabled: true,訓練路由就不存在。開啟訓練不會改變標註者看到的任何內容,因為預標籤只出現在 writeback.schemas 所列的方案上,而這個列表預設為空。
訓練頁面頂部的 Start a run 面板包含一次執行的全部設定。Schema 列出研究的標註方案,Trainer 列出適合所選方案的類型和條目的訓練器,Runs on 列出執行可以在哪些地方執行。Parameters 欄位接受 JSON,初始內容來自所選訓練器在 model_training.trainer_params 裡的條目。欄位下方的說明列出該訓練器接受的每個參數。Train now 啟動執行。在另一次執行進行時啟動的執行會在佇列裡等待,在 Runs 表裡顯示為 waiting #N,並帶有 Cancel run 按鈕。
sentiment 方案上的兩次 sklearn-text 執行,得分都是在模型從未訓練過的評論上測得的
Runs 表裡的每個執行 ID 都會開啟 /admin/training/runs/<run_id> 上的執行頁面。執行頁面顯示這次執行的狀態、訓練器、後端、各劃分的大小、留出得分和參數,隨後是執行記錄的每個指標和執行日誌。失敗的執行還會多出一個 What went wrong 部分。在執行頁面上,你還可以把這次執行的 val、test 或 train 條目儲存為資料集版本,並把模型釋出到 Hugging Face Hub。要在沒有 GPU 的示例項目上完成第一次執行,請跟著訓練你的第一個模型操作。
按任務分組的訓練器
Potato 2.14.0 有 38 個訓練器,每個都在 Trainer 選單裡以註冊名出現。下表按訓練器所學習的標註類型對它們分組:
| 任務 | 訓練器 | 詳見 |
|---|---|---|
| 文本上的標籤 | sklearn-text, hf-text-classification, setfit | 訓練你的第一個模型 |
| 跨度、關係、對話樹和詞彙註解 | hf-token-classification, hf-relation, hf-conversation-tree, byt5-gloss | 訓練器 |
| LLM 和獎勵模型 | llm-sft, llm-dpo, reward-model, prm-reward | 微調 LLM |
| 影像、玻片、顯微影像、地圖和頁面版面 | hf-image-classification, torchvision-detect, ultralytics-detect, torchvision-segment, ultralytics-segment, cellpose, sam-finetune, layoutlmv3, vlm-sft | 視覺模型 |
| 音訊 | hf-audio-tagger, whisper-asr, diarization | 音訊模型 |
| 體資料、點雲和影片 | volume-unet, external-3d, video-track | 體資料、點雲和影片 |
| 分子、光譜、訊號和機器人回合 | rdkit-property, peak-cnn, signal-cnn, episode-model | 科學模型 |
| 決策模型(Laya、Jev、OpenJev) | decision-calibrate, laya-finetune, openjev-finetune | 訓練器 |
| 你已經在別處執行的模型 | label-studio-ml, hf-inference, openai-vlm-boxes, roboflow, cvat-nuclio | 自帶模型 |
最後一行的五個訓練器不擬合任何東西。這五個訓練器各自把留出條目傳送給在別處執行的模型,Potato 對這些答案的打分、回寫和稽核都與訓練出的模型的答案相同。sklearn-text 只需要普通的 Potato 安裝,pip install "potato-annotation[train]" 會安裝文本、影像、音訊和 LLM 訓練器所需的包。未安裝的訓練器會在訓練頁面上顯示為“not installed”,並附上安裝該訓練器的命令。訓練器給出每個訓練器的標註類型、條目類型、安裝命令和參數。
執行在哪裡執行
執行在一個後端上執行,可以在 Runs on 選單裡逐次選擇,也可以用 model_training.backend 設定預設值。Potato 有四種後端:
local在 Potato 伺服器上以子程序訓練。device: auto先選 CUDA,再選 Apple 的 Metal,最後選 CPU。ssh在 Potato 通過金鑰式 ssh 能連上的 GPU 伺服器上訓練。Potato 把 Potato 原始碼複製到該伺服器,在那裡啟動執行,並在執行成功後把模型複製回來。slurm以同樣的方式連線叢集的登入節點,並用sbatch把訓練作業提交到計算節點。這個後端只調用sbatch、squeue、scancel和scontrol,因此沒有srun或sacct的叢集也能使用。agent服務於 Potato 連不上的機器,例如 NAT 後面的工作站。那臺機器上的potato training agent向伺服器輪詢作業,模型檔案留在那臺機器上。
potato training check <backend> config.yaml 在第一次執行之前測試一個後端,訓練頁面上的 Check 按鈕做同樣的事。配置列出每個後端鍵,在 GPU 伺服器或叢集上訓練逐步設定這三種遠端後端。
留出得分
每次執行都在 val 和 test 條目上給模型打分,所用指標按方案的標註類型選定。單標籤分類器得到 macro-F1,跨度標註器得到跨度 F1,框檢測器得到 IoU 0.5 下的 mAP,轉錄模型得到 1 減去詞錯誤率。Runs 表為每次執行顯示一個主得分,執行頁面列出每個指標,指標名裡帶有劃分,例如 val_macro_f1 或 test_f1。有標籤而沒有預測的條目算作錯誤,因此訓練器無法靠跳過難條目來抬高得分。當訓練器在 val 條目上挑選最佳檢查點時,主得分取自 test 條目,因為 val 得分已經塑造了模型。不在 val 上做任何選擇的訓練器,例如 sklearn-text,主得分取自 val 條目。配置給出每種標註類型的指標。
預標籤和模型稽核佇列
預標籤是在標註頁面上填好的模型答案,由標註者確認或修改。回寫把一次執行的預測變成 writeback.schemas 所列方案的預標籤,不需要 pre_annotation 塊。把 writeback 塊加到 model_training 下面:
model_training:
enabled: true
writeback:
schemas: [sentiment]
min_confidence: 0.6
include_unlabeled: true有了這個塊,置信度低於 0.6 的 sentiment 預測會被儲存但不顯示。include_unlabeled: true 讓每次執行也對無人標註的條目做預測。沒有這個設定時,執行只在留出的 val 和 test 條目上做預測。執行的 train 劃分裡的條目永遠不會得到預標籤,回寫也從不改動人工標籤。只有當標註者編輯了預標籤或轉到下一個條目時,預標籤才會成為標註者的答案。
新的標註者看到模型的答案已被選中,可以確認或修改
assignment_strategy: model_review 按置信度從低到高把帶預標籤的條目分給稽核者。稽核者對每個條目記錄 accept、correct 或 reject 的判定。被拒絕的預標籤會從條目上撤下,不再顯示。此後的每次執行都在判定為 correct 的條目上訓練,並且不再用這個條目給模型打分。預標籤會把標註者拉向模型的答案。等留出得分足以支撐這個模型之後,再開啟 include_unlabeled,並用如何分辨帶預標籤資料中的稽核與橡皮圖章找出不看就接受預標籤的標註者。迴圈中的模型在同一個項目上演示回寫、稽核和重新訓練。
隨標註到來而重新訓練
auto_retrain 隨著標註陸續到來自動啟動執行,每次新執行都會替換上一次執行的預標籤。把這個塊加到 model_training 下面:
model_training:
enabled: true
auto_retrain:
enabled: true
trainer: sklearn-text
schemas: [sentiment]
update_frequency: 25
min_interval_s: 600在這些取值下,自上次自動執行以來收到 25 條標註,並且距上次執行結束已過 600 秒,就會啟動一次執行。配置列出每個 auto_retrain 鍵和檢查跳過執行的原因,迴圈中的模型說明何時該開啟重新訓練。
把模型釋出到 Hugging Face Hub
模型位於 Potato 伺服器上的成功執行,在執行頁面上有一個 Publish to the Hugging Face Hub 表單。推送會上傳模型的權重、配置和分詞器檔案,外加一份根據這次執行寫成的 README.md 模型卡。模型卡寫明訓練器、基礎模型、方案、標籤、各劃分的大小和留出得分。執行的預測和訓練資料的任何副本都留在伺服器上。
倉庫名要輸入兩次,兩次一致時推送才會進行。Private 預設勾選,Hugging Face 令牌來自伺服器上的環境變數(預設是 HF_TOKEN),而不是來自頁面。留在遠端主機或代理機器上的模型無法從執行頁面推送。配置列出上傳哪些檔案和 API 路由,在你的標註上微調 LLM則從頭到尾走一遍推送。
模型訓練與標註引擎
標註引擎使用同樣的訓練器。開啟蒸餾(features.distill)後,引擎用一個訓練器(預設 sklearn-text)在引擎的人工標籤和已被契約認證的機器標籤上擬合一個模型,然後把這個模型作為 trained 來源放在配置好的級聯之前。引擎的 cert 和 audit 劃分裡的條目從不進入蒸餾訓練集。trained 來源還可以從一次訓練執行中載入模型,把這次執行的模型目錄作為 artifact_dir。標註引擎配置列出蒸餾的各個鍵。
模型訓練與主動學習
Potato 的主動學習功能在研究的標籤上擬合模型,目的比模型訓練更窄。主動學習每隔 update_frequency 條標註就在伺服器程序內擬合一個 scikit-learn 分類器,並用它重排佇列,最不確定的條目排在最前。只有在 assignment_strategy: active_learning 下,標註者才會拿到重排後的佇列。主動學習的分類器是在它自己擬合時用過的條目上打分的,它的預測也從不展示給標註者。
模型訓練在單獨的程序或另一臺機器上執行 38 個訓練器中的任何一個,在留出條目上給模型打分,並把模型的答案顯示為預標籤。模型訓練同樣可以為佇列排序。在 assignment_strategy: llm_confidence 下,已釋出預標籤置信度最低的條目排在最前。hf-text-classification 和 hf-image-classification 的 acquisition 參數用 margin、熵、BALD 或 core-set 得分取代這個順序。用主動學習來決定接下來讓人標哪些條目。需要在留出條目上打分的模型、給標註者的預標籤,或一個要釋出的模型時,用模型訓練。
教程
每個教程都從安裝到出分的執行走完一種配置:
- 用你的標註訓練第一個模型在情感研究上訓練
sklearn-text,不需要 GPU。 - 在 GPU 伺服器、SLURM 叢集或 NAT 後的機器上訓練設定 ssh GPU 伺服器、SLURM 叢集和輪詢代理。
- 帶預標籤和重新訓練的模型迴圈標註涵蓋回寫、稽核、採集、
auto_retrain和資料集版本。 - 在你的標註上微調 LLM訓練 SFT、DPO、獎勵和過程獎勵模型,並包含 QLoRA 和 Hub 推送。
- 在影像標註上訓練檢測和分割模型在影像、玻片、顯微影像和地圖上訓練檢測器和分割器,另有 Cellpose、SAM、LayoutLMv3 和視覺語言模型。
- 在你的標註上訓練語音和音訊模型訓練 Whisper、說話人分離、頻譜圖檢測器和音訊標註器,並使用 RTTM 檔案。
- 在體資料、點雲和影片上訓練模型訓練
volume-unet、external-3d和video-track。 - 在分子、光譜、訊號和機器人回合上訓練模型訓練
rdkit-property、peak-cnn、signal-cnn和episode-model。 - 來自你已在執行的模型的預標籤和留出得分通過推理橋或
label-studio-ml接入你已在提供服務的模型。 - 用 Opacus 做差分隱私微調用
dp參數和 Opacus 訓練分類器。
延伸閱讀
- 訓練器 - 全部 38 個訓練器,按任務分組
- 配置 - 每個
model_training鍵、後端、路由和儲存路徑 - 主動學習 - 用 scikit-learn 分類器重排佇列
- LLM 與視覺預標註 - 來自 LLM 或視覺模型而非訓練模型的預標籤
- 標註引擎 - 用盲態人工標籤樣本檢驗的機器標籤
- 使用者模擬器 - 在真實標註者入場之前試跑迴圈的模擬標註者
實現細節請參閱源文件。