这篇文章是对《Bidirectional LSTM-CRF Models for Sequence Tagging》的一个总结,先上链接:https://arxiv.org/pdf/1508.01991.pdf
1. 概述
这篇论文是百度2015年发表的,它并不是对LSTM进行创新,也不是对CRF进行创新,而是提出了将两种方法结合的方式实现序列标注任务,并达到了当时的state of the art。BI-LSTM-CRF的优势在于可以有效地使用过去和未来的特征,这一点归功于双向LSTM的结构,同时它还可以通过CRF使用sentence level的标注信息(这里的sentence level我到后面再解释)。最后模型不仅鲁棒性强,而且对词嵌入的依赖较小。
2. 基本介绍
序列标注任务包括POS(词性标注)、chunking(组块分析:标出句子中的短语块)、NER(命名实体识别),文中的实验也是基于这三个经典的任务进行验证的。目前大多序列标注模型都是线性统计模型,例如HMM、MEMM、CRF等,文中作者提出了多种基于神经网络的序列标注模型,这些模型包括LSTM网络、BI-LSTM网络、LSTM-CRF和BI-LSTM-CRF。
这篇paper的主要contribution:
- 系统地比较了上述提到的模型在NLP标注数据集上的性能
- BI-LSTM-CRF首次应用于NLP标准数据集上,并且在三个经典的序列标注任务中,该模型精度达到了state of the art
- 实验验证了BI-LSTM-CRF具有鲁棒性并且对词嵌入的依赖较小
3. 模型介绍
3.1 LSTM(Long Short-Term memory)网络
在介绍LSTM网络之前,需要先提一下RNN(Recurrent neural networks),RNN是一类用于处理序列数据的神经网络,目前在语言模型和语音识别任务上都取得了不错的结果。RNN一个显著的优势是可以利用历史信息预测当前输出,下图是一个RNN结构。
![2e91fc33b45e8d6588310cf43108bc58.png](https://i-blog.csdnimg.cn/blog_migrate/579cbd6e4fa08427bebcffec33af2ba5.jpeg)
一个简单的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网络通过精妙的门控制将短期记忆与长期记忆结合起来,并且一定程度上解决了梯度消失的问题。
![bd44018fe6aedfafd7fd04a1d944b756.png](https://i-blog.csdnimg.cn/blog_migrate/043fc333a2e749817506ba41bf83385b.jpeg)
论文中LSTM的图结构上不是很清晰,我一般会用上面的图对其结构进行分析。公式如下:
其中i表示输入门,f表示遗忘门,o表示输出门,C表示神经元状态。下图为LSTM序列标注模型:
![cbb6fc8f51341a6bfbbbc7a403343d78.png](https://i-blog.csdnimg.cn/blog_migrate/d244c753a964ef17e68689f8e0be93ed.jpeg)
3.2 双向LSTM网络
BI-LSTM是对LSTM的改进,从下图可以观察出该网络能够有效的利用过去和未来的特征。
![e83b3ac109a2fc72829b9d1d0aa3a09e.png](https://i-blog.csdnimg.cn/blog_migrate/9e9fd16e53ac8dde48e73a0d10290233.jpeg)
3.3 CRF网络
在预测当前标签时,有两种方法可以利用相邻的标签信息。第一种是先预测每个时间步的标签分布,然后使用类似波束的解码方式来找到最佳标签序列。最大熵分类器和MEMM属于这一种工作机制。第二种是关注整个句子而不是单个位置的信息,CRF就属于这一类。实验表明,CRF通常可以获得更高的标注精度。
![cac9dbf9f4641b7e089c6bc3f36edf1d.png](https://i-blog.csdnimg.cn/blog_migrate/c669d3977ab683d81d2bd945658cbd56.jpeg)
3.4 LSTM-CRF网络
将LSTM与CRF结合生成LSTM-CRF模型,该模型同时具有两者的优势,即具备捕捉到输入的过去特征和句子级的标签信息的能力。CRF层有状态转移矩阵作为参数,该层可以使用过去和未来的标签信息来预测当前标签,这与双向LSTM相似。文中并没有具体介绍两个部分是如何进行连接的,所以我又去搜索了一些资料:
要了解原理,必须知道损失函数是如何构建的!!CRF层的损失函数包括了两种类型的分数:Emission score和Transition score,这两个分数是CRF层的核心概念。
3.4.1 Emission score
这个分数来自LSTM层,如下图所示黄色框内的即为emission score,
![4092edd99e6d80074e42291e10e069a2.png](https://i-blog.csdnimg.cn/blog_migrate/eb5db18c8a2286123c886735cd8204b4.jpeg)
为了方便说明,每个标签可以用下表的索引值表示:
![a393bacadb75906448d325bc8cfccd03.png](https://i-blog.csdnimg.cn/blog_migrate/1040f5969687651cdb8ba1ceecf25452.jpeg)
接下来会用
3.4.2 Transition score
用
![436d6eba384049af38b3e4c6ed155e3c.png](https://i-blog.csdnimg.cn/blog_migrate/21f583cc3ec1125a71a7ba0ec35f0ca8.jpeg)
这里的转移分数矩阵是整个模型的参数,是通过CRF层学习得到的,并不需要手动构建。
3.4.3 Loss Function
CRF损失函数由实际路径得分和所有可能路径的总得分组成。 在所有可能的路径中,真实路径的得分最高。假设每个可能的路径都有一个分数
在训练过程中,模型的参数值会不断更新,以增加真实路径得分的百分比。
- 计算RealPath scores
- 计算TotalPath score
计算所有路径的分数有一个非常简单的方法,就是将每条路径的分数都算出来然后再相加,当然这个方法肯定是很低效的,时间复杂度会非常高。高效的实现方法是动态规划,我在这里就不介绍了。。。
到这里。。模型的整个连接思路差不多就介绍完了~继续说论文
3.5 BI-LSTM-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指的是什么呢,下面举几个例子:
- 句子的第一个单词的标签必须是“B-"或者"O"开头,不能是"I-"开头
- "B-label1 I-label2 I-label3..",这里的label1,label2和label3必须是同个标签
- "O I-label”是不合理的,实体的标签必须以"B-"开头
- ……
简而言之,LSTM或者BI-LSTM可以学习输入到输出的映射关系,而CRF还可以学习标签之间的关系。这里的这些constrains是通过转移分数矩阵来学得的啦~继续继续
BI-LSTM-CRF的损失函数构建是和LSTM-CRF一样的,只是LSTM-CRF的Emission score是通过LSTM得到的,而在BI-LSTM-CRF网络中是通过BI-LSTM得到的。结构如下:
![8bbd0626f02c383df39e85e6171664e7.png](https://i-blog.csdnimg.cn/blog_migrate/995bdaedf9a620a3ad751476018fbf5d.jpeg)
文中还介绍了模型的训练过程,其实就是批训练的方式,然后先正向,再反向。。。
![b7819bc0a6edc34f604b6c0c9f3a318e.png](https://i-blog.csdnimg.cn/blog_migrate/bfd6b8c1c7b4eaa74b27c99b37180472.jpeg)
4. 实验
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很像了,并且这种连接方式可以加快网络的训练。
![d4d78d4dc67463c7a8c278f490ea1fac.png](https://i-blog.csdnimg.cn/blog_migrate/d359709019b7319c6c239fdc95c98053.jpeg)
4.3 Results
![8f29ad0f4d366dc94b4141da13af3940.png](https://i-blog.csdnimg.cn/blog_migrate/579d9ac56d7032c9fc91f7bec388bd7e.jpeg)
对于不同的词嵌入方式,BI-LSTM-CRF在三个任务中都获得了最好的成绩(除了Random词嵌入的POS任务上),而且相比Conv-CRF,BI-LSTM-CRF对词嵌入的依赖更小。
接下来文中还将BI-LSTM-CRF在不同的任务中与已有的模型进行对比:
POS:
![054eee7b598eb3aa8536b50db2dc2443.png](https://i-blog.csdnimg.cn/blog_migrate/fb6eaa3de0cef9b8c02e1cb0a4b00cc6.jpeg)
chunking:
![8e6cd53f7d8fa3297a0d16341a2e7010.png](https://i-blog.csdnimg.cn/blog_migrate/8e76dffdf98f14dabc4d1e8fcf76dfa7.jpeg)
NER:
![080c50596b711bfd6f39fd778ba80085.png](https://i-blog.csdnimg.cn/blog_migrate/092e95d3d68af3d94ba4e987e1c96b9a.jpeg)
可以看出BI-LSTM-CRF模型在不同的任务中表现优异
5. 总结
CRF这一块的知识点其实还蛮难理解的,这一篇论文也让我对CRF有了更深的理解~很多细节的部分其实文中并没有提到,希望我对模型结合部分的解释大家能够看得懂,有不正确的地方也请大家批评指正
6. 参考文献
- 原文:https://arxiv.org/pdf/1508.01991.pdf
- 这篇博客将BI-LSTM-CRF模型原理解释的非常清晰:https://createmomo.github.io/2017/09/12/CRF_Layer_on_the_Top_of_BiLSTM_1/