【NLP-NER】命名实体识别中最常用的两种深度学习模型
命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。
上一期我们介绍了NER的基本概念,大致介绍了NER常用的模型。本期我们详细介绍目前NER最常用的两种深度学习模型,LSTM+CRF和Dilated-CNN。
作者&编辑 | 小Dream哥
1 LSTM+CRF
在NLP领域,有那么一段时间,LSTM是“最红”的特征抽取器,自然,NER中也开始引入LSTM来进行特征抽取。
LSTM我就不再做过多的介绍,其原理在我的一篇文章中有详细的介绍,读者可以点击如下的链接回顾:
如上图所示,是用双向LSTM+CRF进行命名实体识别的模型结构图。
我们来好好分析一下这个模型,看数据的流转和各层的作用。
1.embedding layer 将中文转化为字向量,获得输入embedding
2.将embedding输入到BiLSTM层,进行特征提取(编码),得到序列的特征表征,logits。
3.logits需要解码,得到标注序列。将其输入到解码CRF层,获得每个字的序列。
总结一下,该模型的重点其实有两个:
1. 引入双向LSTM层作为特征提取工具,LSTM拥有较强的长序列特征提取能力,是个不错的选择。双向LSTM,在提取某个时刻特征时,能够利用该时刻之后的序列的信息,无疑能够提高模型的特征提取能力。
2. 引入CRF作为解码工具。中文输入经过双向LSTM层的编码之后,需要能够利用编码到的丰富的信息,将其转化成NER标注序列。通过观察序列,预测隐藏状态序列,CRF无疑是首选。
2 ID-CNN+CRF
膨胀卷积可能有很多朋友还不是很熟悉,这里先做一个简单的介绍。
Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积))或者是Convolution with holes。从字面上就很好理解,就是在标准的卷积里注入空洞,以此来增加感受野。
Convolution with 3*3 kernel
Dilated Convolution with 3*3 kernel
如上图所示,相比原来的正常卷积,膨胀卷积多了一个超参数,称之为膨胀率(dilation rate),指的是kernel的间隔数量(例如,正常的卷积是膨胀率是1)。
“膨胀”的好处是,不做池化,不损失信息的情况下,增大了感受野,让每个卷积输出都包含较大范围的信息。
《Fast and Accurate Entity Recognition with Iterated Dilated Convolutions》一文中提出在NER任务中,引入膨胀卷积,一方面可以引入CNN并行计算的优势,提高训练和预测时的速度;另一方面,可以减轻CNN在长序列输入上特征提取能力弱的劣势。
具体使用时,dilated width会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而感受野却是指数增加的,这样就可以很快覆盖到全部的输入数据。
如上图所示,模型是4个大的相同结构的Dilated CNN block拼在一起,每个block里面是dilation width为1, 1, 2的三层Dilated卷积层,所以叫做 Iterated Dilated CNN。
IDCNN对输入句子的每一个字生成一个logits,这里就和BiLSTM模型输出logits之后完全一样,再放入CRF Layer解码出标注结果。
总结
LSTM+CRF和ID-CNN+CRF两种模型其实都是同一个架构:深度学习特征提取+CRF解码。现在绝大部分的NER任务都是采用这样的一套框架。本文详细的介绍了上述两种方法的模型结构和本质,具体的实现和代码,包括数据预处理,模型搭建,训练,部署等在我们的知识星球里都有详细的介绍,感兴趣的同学可以扫描下面的二维码加入。