原文出处:Named Entity Recognition 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。
命名实体识别
到目前为止,我们聊得最多的是 NLP 的一个任务:分类。神经网络还能做别的 NLP 任务,命名实体识别(Named Entity Recognition,NER)就是其中之一。它负责认出文本里的具体实体,比如地名、人名、日期时间区间、化学分子式之类。
课前测验
NER 的使用示例
假设你要开发一个自然语言聊天机器人,像 Amazon Alexa 或 Google Assistant 那样。智能聊天机器人的工作原理,是对输入句子做文本分类,从而理解用户想要什么。分类的结果就是所谓的意图(intent),它决定机器人该去做什么。
原文此处有一张作者自绘的示意图,画的是聊天机器人先从用户话语里识别意图,再用 NER 抽出实体填充参数槽位的过程。
不过,用户可能在一句话里顺带给出一些参数。比如问天气时,她可能说明地点或日期。机器人要能识别这些实体,在动手执行之前把参数槽位填好。NER 派的正是这个用场。
再举一个例子:分析医学科研论文。我们要找的主要是具体的医学术语,比如疾病和医学物质。少数疾病大概用子字符串搜索就能抽出来,但更复杂的实体,比如化学化合物和药物名称,需要更复杂的办法。
NER 即词元分类
NER 模型本质上是词元分类(token classification)模型:对每个输入词元,要判断它属不属于某个实体;如果属于,还要判断属于哪个实体类别。
看下面这个论文标题:
Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infant. (新生儿三尖瓣反流与碳酸锂中毒。)
里面的实体有:
- 三尖瓣反流(Tricuspid valve regurgitation)是一种疾病(
DIS) - 碳酸锂(lithium carbonate)是一种化学物质(
CHEM) - 中毒(toxicity)也是一种疾病(
DIS)
注意,一个实体可以横跨好几个词元;而且像这个例子里,还得把紧挨着的两个实体区分开。所以常见做法是每个实体用两个类别:一个标记实体的首个词元(常用 B- 前缀,取自 beginning,开始),一个标记实体的后续词元(I-,取自 inner token,内部词元)。剩下的词元统一归入 O 类(other,其他)。这种词元标注法叫 BIO 标注(也叫 IOB)。标注完成后,上面这个标题长这样:
| Token | Tag |
|---|---|
| Tricuspid | B-DIS |
| valve | I-DIS |
| regurgitation | I-DIS |
| and | O |
| lithium | B-CHEM |
| carbonate | I-CHEM |
| toxicity | B-DIS |
| in | O |
| a | O |
| newborn | O |
| infant | O |
| . | O |
因为要在词元和类别之间建立一一对应,我们可以从这张图里选最右侧的多对多(many-to-many)神经网络结构来训练:
原文此处有一张图(第 17 课引用过的常见循环神经网络模式图,展示一对一、多对一、一对多、多对多几种结构),出自 Andrej Karpathy 的这篇博客。NER 词元分类模型对应的就是图中最右侧的多对多架构。
训练 NER 模型
既然 NER 模型本质上是词元分类模型,我们完全可以把前面学过的 RNN 直接拿来用。这种情况下,循环网络的每个单元块都会返回一个词元 ID。下面这个 notebook 演示如何训练 LSTM 做词元分类。
✍️ 示例 Notebook:NER
继续在下面的 notebook 里学:
本课小结
NER 模型是一个词元分类模型,也就是说它可以执行词元分类任务。这在 NLP 里很常见,帮助识别文本中的具体实体,包括地名、人名、日期等等。
🚀 挑战
完成下面链接的作业:训练一个医疗术语的命名实体识别模型,然后换一个数据集再试试。
课后测验
复习与自学
读一遍博客《循环神经网络为何出奇地有效》(The Unreasonable Effectiveness of Recurrent Neural Networks),跟着文中的 Further Reading(延伸阅读)部分继续深入。
作业
这节课的作业要求训练一个医疗实体识别模型。你可以按本课讲的方法先训一个 LSTM,再进阶到 BERT 这类 Transformer 模型。具体细节见作业说明。