命名实体识别是信息抽取里最基础的一环,任务是从一段文本里把人名、地名、机构名这类有名字的东西圈出来。搜索引擎做问答、知识图谱建节点、客服系统抽订单,背后都先靠它把实体找准。它的做法不是整句打一个分类标签,而是给句子里每个字单独贴一个标签,所以本质上是一个序列标注问题。标签怎么设计,直接决定了模型能学到多细的实体边界。
这一节我们把主流的几套标签体系讲清楚,从最基础的 BIO 一直讲到带首尾标记的 BIOES,再配同一句中文的标注对照。看完你就能自己给一句话打标签,也能说清不同体系差在哪。读之前不需要任何模型基础,只要知道中文是按字切开、每个字配一个标签这个设定就行。
1. 逐字打标签
先把任务本身讲明白,标签体系才有依附。序列标注指的是给原始序列里的每个元素各打一个标签,再串成一条新标签序列的任务。放到中文命名实体识别里,输入是一句按字切开的中文,输出是和字等长的一串标签。模型要认的实体常见有三类:人名记作 PER,地名记作 LOC,机构名记作 ORG,其余不属于任何实体的字统一标成 O。
这套标签设计要回答几个具体问题:实体第一个字怎么标,实体中间的字怎么标,又在哪个字结束,遇到只占一个字的实体又怎么办。不同体系给出的答案各不相同。我们从最省的一套说起。
2. 基础标记体系
最简单也最常用的一套,只用三个字母区分实体的内外,社区叫它 BIO。B 取自 Begin,标记一个实体开头的那个字。I 取自 Inside,标记实体内部的字。O 取自 Other,标记不属于任何实体的普通字。三个字母拼上实体类型,就成了 B-PER、I-PER 这样的完整标签。
拿人名王晓明走一遍。王是人名的第一个字,标 B-PER。晓和明都在人名内部,都标 I-PER。如果句子后面还有普通字,一律标 O。三类实体 PER、LOC、ORG,每类各配一个 B 和一个 I,一共六个实体标签,再加一个 O,总共 7 个标签要预测。标签数量少,模型每个标签都能见够样本,训练起来快,数据量小的时候,预测 7 个标签往往比预测 13 个更稳。它的短板也明显,一个实体到哪结束,BIO 完全靠 I 标签突然消失来推断,结尾边界没有专门信号。
3. 首尾单字标记
BIO 缺的是收尾信号,补上它就有了 E,再补上单字实体就有了 S。E 取自 End,专门标记一个实体的最后一个字。有了 E,模型能明确知道一个实体在哪个字收尾,不用再靠猜。在原来 7 个标签的基础上,每类实体多一个 E,也就是 E-PER、E-LOC、E-ORG 三个,标签总数变成 10 个。这种带 E 的体系有时单独叫 BIOE。
再往前一步,加一个 S 取自 Single,专门给只占一个字的实体用。遇到单字实体,不再勉强拿 B 开头然后干等 I,而是直接标 S-PER、S-LOC、S-ORG。在 10 个标签的基础上再加这三个,总数到 13 个。这套同时带 E 和 S 的体系,社区里通常叫 BIOES。相关实验表明,当样本足够多时,E 和 S 带来的边界信号让效果略优于纯 BIO。
4. 句子标注实例
光看字母还是抽象,拿一句真实句子把 BIO 和 BIOES 并排标一遍就清楚了。取句子王晓明就读于北京大学,逐字切成王、晓、明、就、读、于、北、京、大、学。其中王晓明是人名,北京大学是机构名,其余字都不是实体。两套体系逐字标出来是这样的:
| 字 | 王 | 晓 | 明 | 就 | 读 | 于 | 北 | 京 | 大 | 学 |
|---|---|---|---|---|---|---|---|---|---|---|
| BIO | B-PER | I-PER | I-PER | O | O | O | B-ORG | I-ORG | I-ORG | I-ORG |
| BIOES | B-PER | I-PER | E-PER | O | O | O | B-ORG | I-ORG | I-ORG | E-ORG |
对比明和学这两列就看出差别了。BIO 里它们都是 I-PER、I-ORG,和中间字长得一模一样,模型看不出尾巴在哪。BIOES 里换成了 E-PER、E-ORG,实体收尾的位置被单独标了出来。
S 标签在这句里没机会出场,单独看一个例子。如果句子里孤零零出现一个人名李,BIO 会标成 B-PER,模型还得傻等后面的 I,BIOES 则直接标 S-PER,一个字母就告诉模型这是个一字实体,后面不用再续。
5. 数量与取舍
标签越多越好吗,未必,这里有个权衡。仍然以三类实体 PER、LOC、ORG 为例,三套体系的标签构成数一遍:
| 体系 | 每种实体的标记 | 实体标签数 | 加 O | 总标签数 |
|---|---|---|---|---|
| BIO | B、I | 6 | 1 | 7 |
| BIOE | B、I、E | 9 | 1 | 10 |
| BIOES | B、I、E、S | 12 | 1 | 13 |
标签少,模型在每个标签上见的样本多,小数据集上做 7 选 1 比做 13 选 1 更稳。数据量上去之后,13 个标签带来的边界收益盖过了稀疏带来的代价,BIOES 通常略胜一筹。所以怎么选,先看手里有多少标注语料。
有两个常见误区要顺手澄清。一是以为 I 标签能随便跟在任何标签后面。实际上 I-PER 前面必须是 B-PER 或者 I-PER,一个 I-ORG 直接出现在句首是非法序列,这个相邻约束靠后面模型里的 CRF 层去学。二是把 O 当成第四种实体。O 只是非实体的占位,不算实体类型,别和 PER、LOC、ORG 并列计数。
小结一下。命名实体识别是逐字打标签的序列标注任务,标签体系规定了实体首尾和单字怎么记。BIO 最省,只用 B、I、O,共 7 个标签。BIOES 在它之上补了 E 和 S,把收尾和单字实体单独标出来,标签数涨到 13。数据少用 BIO 更稳,数据多上 BIOES 更准,相邻标签合不合法则交给 CRF 层去约束。本篇标签划分参考了《会话式AI》一书的整理。




冀公网安备13050302001966号