中文命名实体识别NER详解

中文命名实体识别是在自然语言处理领域有着具足轻重的地位,因为在很多应用中,我们一定要提取出我们话术中的实体,所以说命名实体识别是非常重要的。一般来说,现在网上有很多NER的开源库,我们通过调用API就可以进行人名、地名、时间、机构名等实体的识别,效果也非常不错。但是这仅仅是限于某一些领域的命名实体识别,所以我们如果要进行特定领域的命名实体识别,就要另行进行开发。其实我觉得,我们通过导入词库的方法进行命名实体识别效果也挺不错,做法也很简单,缺点就是比较机械。这里我们来一起学习用双向LSTM和CRF进行医学领域的命名实体识别。
首先是我们的训练数据,当然监督学习需要有标注好的数据,通常来说有很多标记方法。这里我们用的就是 IOB 和 IOBES 的标注方法。我们来看看这两种标记方法到底表示什么意思:
中文命名实体识别NER详解_第1张图片
通过上图我们就可以知道每一种标注是什么意思,下面我们具体来看看一个例子:
例子
这就是IOB的标注方法,睡眠欠佳表示症状,睡 B-SYM 表示实体的开始,眠 I-SYM、欠 I-SYM 和 佳 I-SYM表示实体的内部,其他的 O 表示实体的外部。同样的,这段话用IOBES的标注方式可以表示成:
例子
从上图可知,佳这个字 E-SYM 表示实体的结束,这样的 IOBES 标注方式可以更加准确地表示实体的信息。好了,然后我们说一下 BiLSTM + CRF 的架构,具体的LSTM架构可以参考博文LSTM架构详解:
中文命名实体识别NER详解_第2张图片
看到这个之后我们对整体的架构有了一个大致的理解了,从输入层到词嵌入然后再进去双向LSTM,然后到 project 层,然后我们细看 project 层,这一层输出如图所示:
中文命名实体识别NER详解_第3张图片
这里横坐标是话术的字数,纵坐标表示标签的数量。我们要通过维特比算法找到一条得分最高的路径,这里加上CRF的作用其实是对 project 层输出结果进行限制的,比如 B 后面只能接 E 或者 I,E 后面只能接 O 或者B,I 后面只能接E。这样可以让最终输出的结果更加准确。
整体的架构说完之后,我们再来看看特征工程,看看我们输入的时候需要哪些特征,首先是我们的字ID、tagID 和长度特征,所谓的长度特征就是 0 表示单个字成词, 1 表示一个词的开始, 2 表示一个词的中间,3 表示一个词的结尾。比如说 双侧瞳孔 这个词,长度是4,用长度特征表示就是 [1 2 2 3]。然后对应的词向量是经过预训练过的300维字向量,在look-up层,我们可以通过这个进行embedding,内容如下图所示:
中文命名实体识别NER详解_第4张图片
然后字向量嵌入之后就可以进入神经网络进行训练了。训练之后我们可以将模型存入预定好的路径,后续我们可以进行预测操作了,这篇博文主要是讲解双向LSTM+CRF进行NER的架构,代码详见 GitHub,谢谢。

你可能感兴趣的:(NLP,NER,命名实体识别)