数据标注
→ 返回数据工程
高质量训练数据是模型能力的上限。数据标注(Annotation)是给原始数据赋予标签的过程,直接决定模型在特定任务上的表现天花板。
标注类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 分类标注 | 给样本打一个或多个类别标签 | 情感正/负/中性 |
| 序列标注 | 给序列中每个元素打标签 | NER 命名实体识别 |
| 边界框标注 | 在图像中框出目标区域 | 目标检测数据集 |
| 分割标注 | 像素级别的区域划分 | 语义/实例分割 |
| 关系标注 | 标记两个实体之间的关系 | 知识图谱三元组 |
| 排序标注 | 对多个结果排序表示偏好 | RLHF 偏好数据 |
| 生成标注 | 人工写出期望的模型输出 | SFT 指令数据 |
标注质量控制
标注一致性(Inter-Annotator Agreement)
多人标注同一样本,用一致性指标衡量标注质量:
| 指标 | 适用场景 | 公式 |
|---|---|---|
| Cohen’s κ | 两人分类标注 | |
| Fleiss’ κ | 多人分类标注 | 多人版 Cohen’s κ |
| Krippendorff’s α | 多人、多种标注类型 | 更通用,处理缺失值 |
κ 值参考:
-
0.8:高度一致,可用
- 0.6–0.8:良好
- 0.4–0.6:中等,需审查
- < 0.4:差,需重标或修改指南
标注指南(Annotation Guidelines)
好的标注指南应包括:
- 任务定义和目标
- 每个标签的明确定义
- 边界情况的决策树
- 大量正反例样本
- 常见错误警示
主动学习(Active Learning)
智能选择最有价值的样本进行标注,减少标注量:
# 不确定性采样:优先标注模型最不确定的样本
import numpy as np
def uncertainty_sampling(model, unlabeled_pool, n_samples=100):
probs = model.predict_proba(unlabeled_pool)
# 熵越大 = 越不确定
entropy = -np.sum(probs * np.log(probs + 1e-8), axis=1)
uncertain_indices = np.argsort(entropy)[-n_samples:]
return uncertain_indices
# 循环:标注 → 训练 → 选样本 → 标注 ...主动学习策略:
| 策略 | 原理 |
|---|---|
| 不确定性采样 | 选择模型预测熵最高的样本 |
| 多样性采样 | 选择与已标注数据差异最大的样本 |
| 核心集方法 | 选择能代表未标注集的最小子集 |
| BADGE | 结合梯度幅度与多样性 |
RLHF 偏好数据标注
训练大模型对齐所需的特殊标注形式:
给标注员看两个模型回答(A 和 B),要求选择"更好"的那个
评判维度:
- 有帮助(Helpful):是否回答了问题
- 无害(Harmless):是否避免有害内容
- 诚实(Honest):是否承认不确定性
结果格式:
{
"prompt": "用户问题",
"chosen": "更好的回答",
"rejected": "较差的回答"
}
工具平台
| 工具 | 类型 | 适合场景 |
|---|---|---|
| Label Studio | 开源自托管 | 文本/图像/音频多类型 |
| Labelbox | 商业 SaaS | 企业级,工作流管理 |
| Scale AI | 众包 + 平台 | 大规模标注外包 |
| Argilla | 开源,LLM 专注 | 偏好数据、指令数据标注 |
| CVAT | 开源 | 计算机视觉标注 |
| Prodigy | 商业,命令行友好 | NLP 主动学习标注 |
标注成本估算
文本分类(单标签):$0.02–0.05 / 样本
NER 标注:$0.05–0.2 / 句子
边界框标注:$0.1–0.5 / 图片
RLHF 偏好对:$0.5–2 / 对(需要专业标注员)
医疗/法律专业标注:$5–50 / 样本