用你自己的标注训练模型
在管理员训练页面上用研究的标签训练模型,在留出条目上给模型打分,并把预测作为预标签展示给标注者。
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 或视觉模型而非训练模型的预标签
- 标注引擎 - 用盲态人工标签样本检验的机器标签
- 用户模拟器 - 在真实标注者入场之前试跑循环的模拟标注者
实现细节请参阅源文档。