跨度标注
一份完整的跨度标注指南,涵盖文本区域的高亮标记、重叠跨度与嵌套跨度、标签颜色、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 风格。参见检测幻觉。
- 抽取式问答:在一段文章中高亮某个问题的答案。
- 音频事件检测:在波形上标记某个声音出现的时刻。参见音频标注。
- 关系与共指:把多个跨度连接起来。参见关系与事件抽取和共指消解。