一个更加详细的版本:https://blog.csdn.net/Amy_mm/article/details/81975827
文章目录
目录
Chinese NER Using Lattice LSTM
Chinese NER Using Lattice LSTM
论文和代码链接
文章主旨
- 本文提出了一种新的NER模型,利用到了语言序列中所有的单个字符和词库中的所有的分词结果。
简介
-
英文的NER效果最好的模型来自于LSTM-CRF模型。
-
中文的NER结果依赖于中文分词结果,因为NER的边界就是中文分词的边界。有一个中文NER的办法就是先分词,然后进行NER,但是这样的话,分词的错误会传递到NER的结果。这在开放领域会更加严重,因为跨域分词依然会比较困难。有人研究过基于字符的中文NER方法会比基于分词结果的要好。
-
但是基于字符的中文NER方法又失去了部分词序列提供的信息,为了解决这个问题,这篇论文提出了将所有可能分词信息和字符信息混在一起做NER的方法如:figure 1
-
在图中,我们可以利用长江大桥、长江、大桥来对有可能识别到的人名“江大桥”进行消歧
-
如下图所示,Lattice-LSTM可以将所有的字符信息和分词信息涵盖,然后模型会从上下文自动的找到有用的词汇。
论文模型
- 本文到的主题结构采用的是LSTM-CRF.
- 一个完整的句子s,s可以表示成s = c1,c2,c3,…,cm,这里c表示句子中的每一个字符
- s也可以表示成s = w1,w2,w3,…,wn,这里的w表示句子的每一个分词结果
- t(i,k)表示第i个分词结果的第k个字符,如:“南京市 长江大桥”中有两个分词结果,南京市和长江大桥,其中对该句话,t(1,2)表示第一个分词的第二个词,也就是南京市中的“市”这个字。注意这里不是作为第一个字符的,是1作为第一个字符。
- 标注方法用的传统的BIOES方法
一、基于字符的模型
- 首先做一个基于字符的模型,如下如所示,简而言之,下图就是一个LSTM模型,
这里指的是第一个字符的词向量化形式,
指的就是LSTM中的门结构,
代表的就是LSTM中的输出。
- 注意,本文采用的是双向LSTM,
,所以向量会有一个拼接的过程。就是每一个字符正向LSTM的结果和反向LSTM的结果拼接起来。
- 最后的到的结果用来做序列标注。模型使用的是CRF模型。
基于字符的gram模型
- 这里和上面没什么区别,就是在算每个字的向量的时候,加入了这个字和其后面一个字作为词的词向量。
如:算“南”这个字的向量的时候,会把“南”的词向量和“南京”的词向量一起拼接起来作为“南这个字的输入”,具体论文:https://pan.baidu.com/s/18sImkW9YPgbL1_j4YMWZww
基于字符和分词结果模型
- 与上面类似,只不过是没有机械的用到下一个字符,而是用到了以这个字符开头的分词结果。不多介绍
上面说到的模型最后都会使用CRF模型来做序列标注。
二、基于词的模型
基于词的模型,就是把字换成了词,如下图所示。代表的是每个词的词向量。
后续还介绍了很多模型~ 暂时不一一介绍
三、Lattice模型
终于到了我们的主角
下面解释一下这幅图:
大家看上图,我们利用这个公式求出中间插入的南京市这个词的, 同样的是lstm的门机构,唯一缺少的就是输出门,因为这个结构不需要输出,只需要往后传递参数c就好了~
看上图,输出之后,我们会求出作为南京市的一个输入门,就是把南京市的和下一个字“市”的输入
结合起来。
看上图,我们利用这个公式计算“市”这个词的细胞更新状态,就是更新c,其实这个很简单,就是这个"市"这个字会有很多的输入,把他们都按照权重加起来就好了。
疑问其实到这里发现,为啥没有遗忘门呢,很奇怪?望高手解答。
CRF
后面就是一套典型的CRF,不再多说。
吹逼时刻(实验效果)
看这里,句子如果不是很长,可以优先考虑基于词的,当然作者的lattice更厉害了