大模型数据标注教程:从零搭建可用的标注流程
大模型数据标注不是简单“打标签”,而是把业务问题拆成模型能学习的输入输出对。
本文按零基础可执行的方式,讲清从任务设计到标注工具部署、再到导出校验的完整流程,适合准备微调数据或评测集的新手。
先想清楚:标注任务和数据结构
动手前先确定三件事:模型要解决什么任务、每条数据长什么样、合格标准是什么。
以文本分类为例,一条数据至少包含 text(原文)和 label(类别);
如果是指令微调,则需要 instruction、input、output 三个字段。
建议先用表格工具写 10 条示例,团队确认后再批量标注。
示例要覆盖典型情况和边界情况,避免全部是简单样本。
标注规范里写清“不确定时选哪个类别”“多标签如何处理”,减少返工。
准备数据:清洗和脱敏
原始数据往往有重复、乱码、HTML 标签和隐私信息。
可以用 Python 做基础清洗,下面是一个可运行的片段:
import re
import pandas as pd
df = pd.read_csv("raw.csv")
df["text"] = df["text"].astype(str).str.replace(r"<[^>]+>", "", regex=True)
df["text"] = df["text"].str.replace(r"\s+", " ", regex=True).str.strip()
df = df.drop_duplicates(subset=["text"])
df = df[df["text"].str.len() > 5]
df.to_csv("clean.csv", index=False)
涉及手机号、身份证号等字段时,先脱敏再导入标注工具。
清洗后保留原始文件备份,避免误删无法恢复。
部署标注工具:Label Studio 最小可用配置
小团队可以用 Label Studio 开源版起步。
下面以 Linux 服务器和 Docker 为例,前提是已安装 Docker 和 Docker Compose。
在服务器创建目录并写入 docker-compose.yml:
version: "3.8"
services:
label-studio:
image: heartexlabs/label-studio:latest
ports:
- "8080:8080"
volumes:
- ./data:/label-studio/data
environment:
- LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK=true
restart: unless-stopped
执行 docker compose up -d,浏览器访问 http://服务器IP:8080 注册管理员账号。
生产环境建议在前面加 Nginx 反向代理并配置 HTTPS,同时限制注册入口,避免公网随意注册。
进入项目后,按任务配置标注界面。
文本分类可使用如下 XML 配置:
导入 clean.csv 后即可开始标注。
如果导入乱码,检查 CSV 是否为 UTF-8 编码;
如果页面无法访问,先用 docker ps 确认容器状态,再检查防火墙是否放行 8080 端口。
标注过程中的避坑与质量控制
标注前先做一轮 20 条试标,让所有标注员对同一批数据打标,计算一致率。
分歧大的类别要回到规范里补充例子。
不要一次性导入全部数据。
先导入小批量验证流程,确认字段映射、标签选项和导出格式都正确,再扩大规模。
定期备份 ./data 目录。
标注数据是核心资产,容器重建前务必确认备份可用。
可以用 tar -czf backup.tar.gz ./data 做简单归档,并存到另一台机器或对象存储。
权限最小化。
标注员只给项目成员权限,不共享管理员账号;
公网部署时开启 HTTPS,避免账号密码明文传输。
导出和验证:确认数据能直接用于训练
标注完成后从项目导出 JSON 或 CSV,检查三件事:字段名是否与训练脚本一致、标签值是否在预期集合内、是否存在空标注。
可以用下面的命令快速统计:
python -c "import json,collections; d=json.load(open('export.json')); print(len(d)); print(collections.Counter([x['label'] for x in d]))"
如果数量与导入时差异较大,检查是否有任务被跳过或重复导入。
最终数据集建议按 8:1:1 拆分为训练、验证和测试集,并保留一份原始导出文件,方便回溯。
走完以上步骤,你就拥有了一套可重复的大模型数据标注流程。
后续扩大规模时,优先优化标注规范和一致性检查,而不是盲目增加标注人数。