Skip to content

跨度标注

一份完整的跨度标注指南,涵盖文本区域的高亮标记、重叠跨度与嵌套跨度、标签颜色、BIO/IOB 标注,以及如何在 Potato 中构建跨度任务。

跨度标注是指标记条目内部的某个区域,而不是给整个条目打标签。标注者高亮一段文本(或一段音频),并为其指定一个标签。 它是命名实体识别、错误标记、抽取式问答和音频事件检测的基础,这些都是跨度任务,区别只在于标签集合不同。

一个跨度就是一段带标签的子序列:一个起始位置、一个结束位置和一个类别。在机器学习中,这通常被表述为序列标注,即给每个词元(token)打上一个标签。

一个基础的跨度任务

定义好标签,让标注者去高亮即可。颜色和提示文字能让界面操作更快、更一目了然:

yaml
annotation_schemes:
  - annotation_type: span
    name: entities
    description: "Highlight each named entity and choose its type."
    labels: [PERSON, ORGANIZATION, LOCATION, DATE, MISC]
    label_colors:
      PERSON: "#3b82f6"
      ORGANIZATION: "#10b981"
      LOCATION: "#f59e0b"
      DATE: "#8b5cf6"
      MISC: "#6b7280"
    sequential_key_binding: true
    allow_overlapping: false

命名实体识别设计正是这个任务,可以直接运行。

重叠跨度与嵌套跨度

默认情况下,一个字符最多只属于一个跨度。但有些任务需要更多:

  • 重叠跨度:两个标注覆盖了部分相同的文本,例如一个情感跨度覆盖在一个实体跨度之上。
  • 嵌套跨度:一个跨度位于另一个跨度内部,例如 "[University of [Michigan]]",其中地点嵌套在组织机构之内。

当你的标注指南有此需要时,设置 allow_overlapping: true。请尽早决定这一点,因为它会改变标注者对边界的思考方式。

BIO/IOB 标注,你导出的数据长什么样

跨度标注在用于训练时,通常会以词元标签的形式导出为 BIO 方案(也称 IOB):B- 标记一个实体的首个词元,I- 标记其内部的词元,O 标记不属于任何实体的词元。

text
Barack    B-PERSON
Obama     I-PERSON
visited   O
Paris     B-LOCATION

Potato 可以将跨度导出为 CoNLL 和 spaCy 格式,二者直接采用这种标注方式。参见导出标注用于机器学习

把边界确定准确

跨度工作中最难的部分,是就跨度从哪里开始、到哪里结束达成一致。几条有用的规则:

  • 决定是否包含周边的标点、称谓("Dr.")以及末尾的所有格,并把决定写下来。
  • 在跨度层级而不仅是文档层级上测量一致性,这样边界上的分歧才会显现出来。参见标注者间一致性
  • 用提示文字把边界规则始终摆在标注者眼前。

NER 之外的跨度任务

同一套机制还支撑着许多任务:

  • 错误跨度:标记译文或模型输出中的错误,采用 MQM 风格。参见检测幻觉
  • 抽取式问答:在一段文章中高亮某个问题的答案。
  • 音频事件检测:在波形上标记某个声音出现的时刻。参见音频标注
  • 关系与共指:把多个跨度连接起来。参见关系与事件抽取共指消解

延伸阅读