NER 中的 BIO 标注体系是什么?请举例说明 B-PER、I-PER、O 标签的含义。
BIO 标注体系
BIO(Begin-Inside-Outside)是 NER(命名实体识别)任务中最常用的序列标注编码方案,用于将"实体片段抽取"问题转化为"逐 token 分类"问题。
一、三种标签前缀
| 前缀 | 含义 | 作用 |
|---|---|---|
| B-XXX | Begin,实体片段的起始token | 标记一个实体的开始边界 |
| I-XXX | Inside,实体片段的内部/后续token | 标记实体延续部分,与前面的 B/I 同类型衔接 |
| O | Outside,不属于任何实体 | 标记非实体 token |
其中XXX是实体类型,如PER(人名)、ORG(机构)、LOC(地名)、GPE(地缘政治实体)等。
二、标签含义示例
以句子"张三在北京大学读书"为例(按字切分):
| 字 | 张 | 三 | 在 | 北 | 京 | 大 | 学 | 读 | 书 |
|---|---|---|---|---|---|---|---|---|---|
| 标签 | B-PER | I-PER | O | B-ORG | I-ORG | I-ORG | I-ORG | O | O |
逐个解释:
- B-PER(张):人名实体的起始字,表示"张"是一个 PER 类型实体的开始。
- I-PER(三):人名实体的内部字,与前面的 B-PER 衔接,共同构成完整实体"张三"。
- O(在、读书):非实体,不归属任何命名实体。
- B-ORG(北):机构名实体的起始字。
- I-ORG(京大学):机构名实体的延续字,与 B-ORG 共同构成"北京大学"。
三、解码规则
从标签序列还原实体片段的规则:
- 遇到
B-XXX→ 开启一个新实体,记录类型和起始位置。 - 遇到
I-XXX→ 若与前一个实体类型相同,则延续当前实体;若类型不同或前一个不是同类实体,则视为非法(实践中通常截断或报错)。 - 遇到
O→ 关闭当前实体,输出已积累的片段。
例如上例解码结果:
张三→ PER北京大学→ ORG
四、BIO 的扩展变体
| 方案 | 增加的标签 | 用途 |
|---|---|---|
| BIOES | E(End,实体末位)、S(Single,单字实体) | 显式标注实体边界,部分任务精度更高 |
| BIOHD | H(Hyphen)、D(Different) | 处理嵌套实体 |
BIOES 示例(“张三”):
| 张 | 三 |
|---|---|
| B-PER | E-PER |
单字实体(如"京"作为地名)则标S-LOC。
五、为什么需要 BIO 而不是直接标类型
若直接给每个 token 标PER/ORG/O,模型无法区分相邻同类实体边界。例如"张三李四"两个独立人名,直接标注为PER PER,解码时会被错误合并为一个实体"张三李四"。BIO 通过B显式标记起始边界,保证:
B-PER I-PER B-PER I-PER→ 解码为两个实体"张三"和"李四"B-PER I-PER I-PER I-PER→ 解码为一个实体"张三李四"
六、与 CRF 的配合
BIO 标签序列存在合法转移约束,例如:
O不能直接接I-XXX(必须有前置B-XXX)B-PER不能接I-ORG(类型必须一致)
CRF 的转移矩阵可以学习这些约束,对非法转移赋予负权重,从而在解码阶段自动避免不合法的标签序列。这是 BiLSTM-CRF / BERT-CRF 在 NER 中优于纯 softmax 输出层的关键原因之一。