第二章:数据标注与准备——标注规范制定、常见标注工具、数据格式与质量评估

数据标注,说白了就是给文本“贴标签”。

我见过太多团队,模型选得再好,算法调得再花哨,最后都栽在数据上。为什么?因为标注质量不过关。你想想看,模型学的是标注员给的数据,如果标注本身就有问题,那模型能学出什么好东西?

这一章,我们就来聊聊数据标注与准备的几个核心环节。我会结合我踩过的坑,给你讲清楚。

2.1 标注规范制定:别让标注员猜你的心思

标注规范,就是你和标注员之间的“合同”。

我刚开始做关系抽取时,犯过一个低级错误。我给了标注员一份很简短的规范,大概就两页纸。结果呢?标注员把“张三的妻子是李四”标成了“人物-夫妻”关系,而把“张三和李四是夫妻”标成了“人物-配偶”关系。同一个意思,两种标签,模型直接懵了。

所以,规范一定要细。细到什么程度?

  • 实体类型定义要明确:比如“人物”实体,要不要包含“张三的父亲”这种复合实体?我建议不包含,只标最小粒度的实体。
  • 关系类型定义要互斥:比如“夫妻”和“配偶”只能选一个。别让标注员纠结。
  • 边界情况要举例:比如“苹果公司”和“苹果手机”,前者是组织,后者是产品。不举例,标注员很容易标错。
  • 否定与歧义处理:比如“张三没有和李四结婚”,这里的关系是“否定”,还是“无关系”?我一般会单独加一个“否定关系”标签。

核心原则:标注规范要能回答标注员的任何疑问。如果标注员需要频繁来问你,说明规范不够细。

2.2 常见标注工具:LabelStudio vs BRAT

工具选得好,效率翻倍。我主要用过两款:LabelStudio 和 BRAT。

2.2.1 LabelStudio

LabelStudio 是我现在的主力工具。为什么?因为它灵活。

  • 支持多种标注类型:文本分类、序列标注、关系抽取,一个工具全搞定。
  • 界面友好:拖拽式操作,标注员上手快。
  • 可定制:你可以自己写配置,定义标签、关系、甚至快捷键。
  • 支持协作:多人同时标注,还能做一致性检查。

举个例子,配置一个关系抽取任务,你只需要写一个简单的 XML 配置:

<View>
  <Labels name="entity" toName="text">
    <Label value="人物" background="red"/>
    <Label value="组织" background="blue"/>
  </Labels>
  <Relations>
    <Relation value="工作于"/>
    <Relation value="出生于"/>
  </Relations>
  <Text name="text" value="$text"/>
</View>

嗯,就这么简单。标注员在界面上选中实体,再拉一条线连起来,就能标关系了。

2.2.2 BRAT

BRAT 是老牌工具了。我早期项目用过它。

  • 轻量级:部署简单,一个 Python 脚本就能跑起来。
  • 标注速度快:快捷键丰富,熟练后效率很高。
  • 可视化好:标注结果一目了然。

但 BRAT 有个硬伤:不支持多人协作。你想想看,一个项目几百份文档,一个人标到猴年马月?而且 BRAT 的配置比较麻烦,需要写 .ann 文件格式。

我的建议:小团队(1-2人)可以用 BRAT,快速验证。大团队(3人以上)直接上 LabelStudio,省心。

2.3 数据格式:BIO 与 BILOU

标注完的数据,总要存成某种格式。最常用的就是 BIO 和 BILOU。

2.3.1 BIO 格式

BIO 是“Begin, Inside, Outside”的缩写。说白了,就是给每个字打一个标签。

  • B-实体类型:实体的第一个字
  • I-实体类型:实体的中间字或结尾字
  • O:非实体

举个例子,句子“张三在北京工作”,标注后是这样的:

张 B-人物
三 I-人物
在 O
北 B-地点
京 I-地点
工 O
作 O

BIO 格式简单直观,但有个小问题:无法区分相邻的相同类型实体。比如“张三李四”,如果都是人物,BIO 会标成:

张 B-人物
三 I-人物
李 I-人物
四 I-人物

你看,模型会以为“张三李四”是一个实体。这就是 BIO 的局限。

2.3.2 BILOU 格式

BILOU 是 BIO 的升级版。它多了两个标签:

  • L-实体类型:实体的最后一个字
  • U-实体类型:单个字的实体

还是那个例子,“张三李四”用 BILOU 标:

张 B-人物
三 L-人物
李 B-人物
四 L-人物

这样模型就能清楚知道,这是两个独立的实体。我个人的经验是:如果实体长度变化大,或者经常出现单字实体,用 BILOU 更稳妥

格式 优点 缺点 适用场景
BIO 简单、易实现 无法区分相邻同类型实体 实体类型少、长度固定
BILOU 能区分相邻实体、信息更丰富 标签数量多、模型复杂度略高 实体类型多、长度变化大

2.4 数据质量评估:别让垃圾数据毁了模型

数据标完了,不代表就能直接用了。你得先评估质量。

我曾经接手过一个项目,标注员标了 1 万条数据,我直接拿去训练模型,结果 F1 只有 0.3。后来一查,标注错误率高达 40%。嗯,从那以后,我养成了一个习惯:先评估,再训练

评估数据质量,我一般看三个指标:

  1. 标注一致性:同一份数据,让两个标注员分别标,然后算他们的标注结果有多一致。常用指标是 Cohen's Kappa 系数。一般要求 Kappa > 0.8。
  2. 标注准确率:抽一部分数据,让专家重新标一遍,然后对比。准确率一般要求 > 95%。
  3. 标注覆盖率:看看有没有漏标的实体或关系。比如句子中明明有“张三”,但标注员没标出来。

注意:标注一致性低,说明规范有问题。标注准确率低,说明标注员能力不足。覆盖率低,说明标注员偷懒了。这三个问题,要分别处理。

评估完之后,我通常会做两件事:

  • 反馈给标注员:把错误案例整理出来,开个短会,讲清楚为什么错。
  • 重新标注:对于一致性低的数据,让标注员重新标,或者由专家仲裁。

只有经过质量评估的数据,才值得喂给模型。别嫌麻烦,这一步省了,后面模型调参的时间会加倍还给你。

一句话总结:标注规范要细,工具要顺手,格式要选对,质量要把关。数据准备好了,模型就成功了一半。

数据标注与准备核心流程 标注规范制定 实体/关系定义 标注工具选择 LabelStudio / BRAT 数据标注执行 BIO / BILOU 格式 质量评估 反馈与迭代 核心输出:高质量标注数据集 关键质量指标 • 标注一致性 (Cohen's Kappa > 0.8) • 标注准确率 (> 95%) • 标注覆盖率 (无漏标)

专注资料整理