到目前位置,我们主要关注一项NLP任务-分类。然而,还有其他NLP任务可以采用神经网络完成。命名实体识别(Named Entity Recognition)就是其中之一,它处理识别文本中指定的实体,比如地点、人名、日期时间间隔、化学式等。
课前练习
使用NER的示例
假设您想开发一个自然语言聊天机器人,类似于Amazon Alexa或者谷歌助手。智能聊天机器人的工作原理是通过对输入的语句进行文本分类以理解用户想要什么。分类的结果称作意图(intent),它决定了聊天机器人应该做什么。
图像有作者提供
但用户可能会在短语中提供一些参数作为输入。例如,当询问天气,用户可能指定位置或者日期。机器人要有能力理解这些实体,并在执行操作之前填入相应的参数。这就是NER发挥作用的地方。
✅ 另一个例子是分析科学医学论文。我们需要查找的主要内容之一是特定的医学术语,比如说疾病和医疗物质。虽然使用子字符搜索可以提取小部分疾病,数复杂的实体,比如说化合物名称和药物名称,需要使用更复杂的方法。
使用NER进行词元(Token)分类
NER模型本质上是一种词元(token)分类模型,因为对于每个输入词元(token),我们需要决定它是否属于某个实体,如果属于,那属于哪个实体类别。
考虑如下沦为标题:
新生儿婴儿三尖瓣关闭不全和碳酸锂中毒 。(Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infant)
这里的实体是:
- 三尖瓣关闭不全是一种疾病(Tricuspid valve regurgitation is a disease) (DIS)
- 碳酸锂是一种化学物质(Lithium carbonate is a chemical substance) (CHEM)
- 中毒也是一种疾病(Toxicity is also a disease) (DIS)
注意一个实体可以跨越多个词元(token)。而且正如这个例子,我们需要区分连续的两个实体。因此,每个实体通常使用两个类别-一个确定第一个token的实体(通常使用B-作为签注,表示开头),另一个表示实体的延续(I-,表示内部词元)。我们也使用O作为一个类别,表示所有其他token。这种token标记称作BIO 标记(或者IOB)。标记后,我们的标题将如下所示:Notice that one entity can span several tokens. And, as in this case, we need to distinguish between two consecutive entities. Thus, it is common to use two classes for each entity - one specifying the first token of the entity (often the B- prefix is used, for beginning), and another - the continuation of an entity (I-, for inner token). We also use O as a class to represent all other tokens. Such token tagging is called BIO tagging (or IOB). When tagged, our title will look like this:
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 |
因为我们需要在token和类别之间简历一对一的对应关系,我们可以训练一个最下图的右边的多对多的神经网络模型:
图片出自Andrej Karpathy的这篇博客文章 。NER 词元(token)分类模型属于这种图片最右边的神经网络结构。
训练NER模型
因为NER模型实质上是一个词元(token)分类模型,我们可以使用我们熟悉的RNN模型来完成这个任务。在这种情况下,每一个循环神经网络块都将返回词元(token)ID。以下代码笔记中的示例展示了如何训练LSTM进行词元(token)分类。
✍示例代码笔记: NER
继续阅读以下代码笔记进行学习:
总结
NER模型是一种词元(token)分类模型,这意味着它可以用来执行词元(token)分类。这是NLP中非常常见的任务,可以帮助识别文本中的地方、名字、日期等特定实体。
挑战
完成下面链接中的作业,训练一个用于识别医疗术语的NER模型,然后尝试将其应用于其他数据集上。
课后练习
复习与自学
通读这篇博客 《循环神经网络的非凡效果(The Unreasonable Effectiveness of Recurrent Neural Networks)》 并遵循这篇文章中的“进一步阅读”部分加深您的知识。
作业
在这节课的作用中,您需要训练一个医疗实体识别模型。您可以从训练一个这节课中描述的LSTM开始,然后使用BERT transform模型进一步训练。阅读说明获取所有细节。