数据标注 · 方案与质检
把「我们要标注一批数据」变成一套可以直接开工、可以直接验收的标注工程文档。标注项目返工的最大原因不是标注员手慢,而是方案没写清边界:两个人对同一条数据给出不同标签,质检时才发现规则缺失,整批返标。这个技能按"先立规矩、再开工、边标边检"的顺序,把方案、SOP、质检、格式四件事一次做完。
一、输入:开工前问清 6 件事
不需要全部回答,缺哪项就按推荐默认值补齐并在方案里标注"默认值,可调整":
| 问题 | 缺省处理 |
|---|---|
| 任务类型:分类 / 检测 / 分割 / NER / 文本分类 / 情感 / OCR 校对 | 必答,无法推断时停 |
| 数据形态:图片 / 短文本 / 长文档 / 对话 / 音频转写 | 必答 |
| 标签候选:已有标签表?还是从零设计? | 没有则按"二、标签体系设计"从零生成 |
| 规模与人力:多少条?几个人标? | 默认假设 1 万人日以下、2-3 人 |
| 质检要求:有无甲方合格线(如 Kappa ≥ 0.8)? | 默认 Kappa ≥ 0.75,抽检 10% |
| 交付格式:COCO / YOLO / VOC / LabelStudio / 自定义 JSON? | 默认 COCO(视觉)或 LabelStudio JSON(文本) |
二、标签体系设计(方案的核心)
- MECE 自检:标签之间不重叠(互斥)、合起来全覆盖(穷尽)。写完标签表后逐对追问:"一条数据同时满足 A 和 B 怎么办?"答不上来就是有重叠,必须加边界规则或合并。
- 互斥边界写进标签定义:不是写"什么算 A",而是写"什么算 A 而不算 B"。例:
辱骂不含吐槽产品但不针对人(后者归负面反馈)。 - "其他"类的使用限制:允许存在,但要求标注员每次选"其他"必须填一句原因;若某原因占比 > 15%,说明标签体系缺类,触发补类评审。
- 标签数量与复杂度匹配:二分类 ≤ 3 类不需要层级;5-15 类平铺;> 15 类必须分层级(一级 ≤ 9 个),否则标注员记忆负担导致一致性崩塌。
- 每类配正反例:每个标签至少 2 正例 + 2 易混淆反例,反例从"最容易和它混淆的邻居标签"里出。
三、标注规则写法(给 SOP 用)
- 一条规则只说一件事,格式:
场景 → 动作 → 示例。 - 优先级链写死:当多条规则冲突时,按
安全红线 > 法律合规 > 业务规则 > 边界示例的顺序取优先。 - 歧义处理三级:① 规则能判 → 按规则;② 规则不能判 → 按"宁缺勿滥"原则(标注员无权创造标签,归入暂存区);③ 暂存区每日由负责人裁决并回写规则。
- 时长预估:按"每条平均秒数 × 数据量 × 1.4(含休息与返标)"给人力排期,防止招标报价拍脑袋。
四、质检方案
- 抽检比例:总量的 10%,且每人每日标量中至少抽 30 条(样本太小时按比例上浮)。
- 一致性指标:
- 两人标同一子集:Cohen's Kappa = (P_o − P_e) / (1 − P_e),P_o 为观测一致率,P_e 为按各类占比算出的期望一致率。
- 三人及以上:Fleiss' Kappa。
- 判读:κ < 0.4 推翻重来(规则有硬伤);0.4–0.6 补规则再训一轮;0.6–0.8 可继续但需日检;≥ 0.8 放量。 - 合格线与返标:单人抽检准确率 < 98%(规则明确类)或 < 95%(边界模糊类)触发该人整批全检;返标只返"错的那一类",避免整批重标伤士气。
- 盲标对撞:每批预留 5% 数据由两人盲标,只对撞这部分算 Kappa,成本低且能持续监控。
五、导出格式映射(references 里有完整字段表)
- COCO JSON:images / annotations / categories 三段,
category_id从 1 开始、0 保留为背景;bbox 为[x,y,width,height]且以左上角为原点。 - YOLO txt:每图一个 txt,每行
class cx cy w h,全部归一化到 0-1;class 顺序严格按 classes.txt。 - VOC XML:每图一个 xml,bbox 为像素绝对坐标且是
xmin,ymin,xmax,ymax(与 COCO 的x,y,w,h不同,转换时最容易出错)。 - LabelStudio JSON:
result[].value内嵌标签结构,注意original_width/original_height必填,否则导入后坐标失效。
四个格式的字段对照表、换算公式和可直接抄的示例文件见 references/格式映射与示例.md。
格式脚手架脚本(纯标准库,零依赖、零联网):给标签列表即可一键生成四格式的标签字典与示例文件:
# 内置虚构示例(先跑通形态)
python3 scripts/gen_mapping.py --demo --out ./mapping_out
# 用自己的标签(逗号分隔)
python3 scripts/gen_mapping.py -t 裂纹,划痕,污渍 --out ./mapping_out
# 或用标签字典 JSON(支持 [{"id":1,"name":"..."}] 或 {"labels":[...]} 或纯字符串数组)
python3 scripts/gen_mapping.py --dict labels.json --out ./mapping_out
输出:labels_dict.json(标签字典)、coco_annotations.json、yolo_classes.txt + 示例行、
voc_example.xml、labelstudio_example.json、mapping_all.json(汇总)。所有示例均为虚构占位数据。
六、工作流程
用户给需求
→ 补齐 6 项输入(缺省项标注"默认值")
→ 产出①标注方案.md(标签体系 + 逐条规则 + 歧义处理)
→ 产出②标注员SOP.md(正反例对照 + 优先级链 + 暂存区机制)
→ 产出③质检方案.md(抽检 + Kappa 公式与判读 + 返标流程)
→ 产出④格式包(标签字典 JSON + 按选定格式给字段映射与示例文件)
四份产出一次给全,不用用户逐轮追问。方案里所有"默认值"集中列在文档末尾,便于用户一次改完。
七、边界
- 不做:数据采集爬取、模型训练、标注平台采购报价、众包平台运营。
- 输出是方法论与模板,最终规则需业务负责人确认签字后才可作为验收依据。
- Kappa 判读阈值(0.4/0.6/0.8)是行业惯用参考线,甲方合同另有约定以合同为准。