这篇文章是对《Bidirectional LSTM-CRF Models for Sequence Tagging》的一个总结,先上链接:https://arxiv.org/pdf/1508.01991.pdf
这篇论文是百度2015年发表的,它并不是对LSTM进行创新,也不是对CRF进行创新,而是提出了将两种方法结合的方式实现序列标注任务,并达到了当时的state of the art。BI-LSTM-CRF的优势在于可以有效地使用过去和未来的特征,这一点归功于双向LSTM的结构,同时它还可以通过CRF使用sentence level的标注信息(这里的sentence level我到后面再解释)。最后模型不仅鲁棒性强,而且对词嵌入的依赖较小。
序列标注任务包括POS(词性标注)、chunking(组块分析:标出句子中的短语块)、NER(命名实体识别),文中的实验也是基于这三个经典的任务进行验证的。目前大多序列标注模型都是线性统计模型,例如HMM、MEMM、CRF等,文中作者提出了多种基于神经网络的序列标注模型,这些模型包括LSTM网络、BI-LSTM网络、LSTM-CRF和BI-LSTM-CRF。
这篇paper的主要contribution:
在介绍LSTM网络之前,需要先提一下RNN(Recurrent neural networks),RNN是一类用于处理序列数据的神经网络,目前在语言模型和语音识别任务上都取得了不错的结果。RNN一个显著的优势是可以利用历史信息预测当前输出,下图是一个RNN结构。
一个简单的RNN结构包括输入层x,隐藏层h和输出层y。上图表示的是一个NER任务,每一个单词被标注为人名、地名、机构名、其他实体与非实体,其中B-,I-标签用于标注实体的开始和中间位置,文中还举了个例子:句子EU rejects German call to boycott British lamb 应该标注为B-ORG O B-MISC O O O B-MISC O O.
输入层表示时刻t的特征,可以是独热编码、密集向量特征或是离散特征。与前馈网络相比,RNN引入了前一个隐藏状态和当前隐藏状态的连接关系,其隐藏层和输入层的公式如下:
U、W、V是模型参数,f(z)和g(z)分别是sigmoid函数和softmax函数。
LSTM是在RNN的基础上提出的,是RNN的一种改进方式。当序列长度较长时,RNN容易出现梯度消失的问题,即RNN只能有短期记忆,LSTM网络通过精妙的门控制将短期记忆与长期记忆结合起来,并且一定程度上解决了梯度消失的问题。
论文中LSTM的图结构上不是很清晰,我一般会用上面的图对其结构进行分析。公式如下:
其中i表示输入门,f表示遗忘门,o表示输出门,C表示神经元状态。下图为LSTM序列标注模型:
BI-LSTM是对LSTM的改进,从下图可以观察出该网络能够有效的利用过去和未来的特征。
在预测当前标签时,有两种方法可以利用相邻的标签信息。第一种是先预测每个时间步的标签分布,然后使用类似波束的解码方式来找到最佳标签序列。最大熵分类器和MEMM属于这一种工作机制。第二种是关注整个句子而不是单个位置的信息,CRF就属于这一类。实验表明,CRF通常可以获得更高的标注精度。
将LSTM与CRF结合生成LSTM-CRF模型,该模型同时具有两者的优势,即具备捕捉到输入的过去特征和句子级的标签信息的能力。CRF层有状态转移矩阵作为参数,该层可以使用过去和未来的标签信息来预测当前标签,这与双向LSTM相似。文中并没有具体介绍两个部分是如何进行连接的,所以我又去搜索了一些资料:
要了解原理,必须知道损失函数是如何构建的!!CRF层的损失函数包括了两种类型的分数:Emission score和Transition score,这两个分数是CRF层的核心概念。
3.4.1 Emission score
这个分数来自LSTM层,如下图所示黄色框内的即为emission score,
为了方便说明,每个标签可以用下表的索引值表示:
接下来会用
3.4.2 Transition score
用
这里的转移分数矩阵是整个模型的参数,是通过CRF层学习得到的,并不需要手动构建。
3.4.3 Loss Function
CRF损失函数由实际路径得分和所有可能路径的总得分组成。 在所有可能的路径中,真实路径的得分最高。假设每个可能的路径都有一个分数
在训练过程中,模型的参数值会不断更新,以增加真实路径得分的百分比。
计算所有路径的分数有一个非常简单的方法,就是将每条路径的分数都算出来然后再相加,当然这个方法肯定是很低效的,时间复杂度会非常高。高效的实现方法是动态规划,我在这里就不介绍了。。。
到这里。。模型的整个连接思路差不多就介绍完了~继续说论文
与LSTM-CRF网络相似,将双向LSTM网络和CRF网络结合起来,形成了BI-LSTM-CRF网络。 除了过去的输入特征和句子级别的标签信息,BILSTM-CRF模型可以使用将来的输入特征。这里我来补充一下我对句子级别信息的理解。。其实在3.4这个部分的图里也可以看出,即使不要CRF层,LSTM或者BI-LSTM也可以预测标签,那CRF层的作用是什么?
我在一篇博客中看到一个很好的解释:CRF layer can learn constrains from training data.这里的constrains指的是什么呢,下面举几个例子:
简而言之,LSTM或者BI-LSTM可以学习输入到输出的映射关系,而CRF还可以学习标签之间的关系。这里的这些constrains是通过转移分数矩阵来学得的啦~继续继续
BI-LSTM-CRF的损失函数构建是和LSTM-CRF一样的,只是LSTM-CRF的Emission score是通过LSTM得到的,而在BI-LSTM-CRF网络中是通过BI-LSTM得到的。结构如下:
文中还介绍了模型的训练过程,其实就是批训练的方式,然后先正向,再反向。。。
4.1 数据集
作者测试了LSTM、BI-LSTM、CRF、LSTM-CRF和BI-LSTM-CRF模型在3个nlp序列标注任务上的性能,分别选取Penn TreeBank(PTB)为POS数据集,CoNLL 2000为chunking数据集,CoNLL 2003为NER数据集。
4.2 details
这里有值得一提的两个小细节:第一个是输入特征,实验并不是只用word embedding后的向量作为网络的输入特征,而是在其基础上加了spelling features和context features。第二个是特征的连接方式,如下图所示,直接将输入特征与输出层连接,这个思路其实和resnet中的residual很像了,并且这种连接方式可以加快网络的训练。
4.3 Results
对于不同的词嵌入方式,BI-LSTM-CRF在三个任务中都获得了最好的成绩(除了Random词嵌入的POS任务上),而且相比Conv-CRF,BI-LSTM-CRF对词嵌入的依赖更小。
接下来文中还将BI-LSTM-CRF在不同的任务中与已有的模型进行对比:
POS:
chunking:
NER:
可以看出BI-LSTM-CRF模型在不同的任务中表现优异
CRF这一块的知识点其实还蛮难理解的,这一篇论文也让我对CRF有了更深的理解~很多细节的部分其实文中并没有提到,希望我对模型结合部分的解释大家能够看得懂,有不正确的地方也请大家批评指正