论文详读:Chinese NER Using Lattice LSTM

这篇论文是18年发表在ACL上的论文,18年基于字符的中文命名体识别的最好的模型。(19年IJCAI发表的CNN-Based Chinese NER with Lexicon Rethinking,是在这篇论文上做的改进,也可以看看)

1.论文背景    

1.1 NER

首先介绍一下什么是NER 命名体识别,命名体识别指的是将一段文本序列中包含的我们感兴趣的实体(有特定意义的实体)识别出来,例如人名,地名和机构名等。命名体识别也属于序列标注问题,是给定一个序列,对序列中的每一个元素做一个标记,或者说给每一个元素打一个标签

例如今年海钓比赛在厦门市与金门之间的海域举行。

我们对这句话进行序列标注之后的结果:

今(O)年(O)海(O)钓(O)比(O)赛(O)在(O)厦(B-LOC)门(I-LOC)市(E-LOC)与(O)金(B-LOC)门(E-LOC)之(O)间(O)的(O)海(O)域(O)举(O)行(O)。

这段标注采用的是BIEO标注方式,即Begin, Intermediate, End, Other,针对不同的标注任务标注方式也各不相同。通过标注之后的结果,我们可以识别出原来句子中的存在的两个地点实体“厦门市”和“金门”。在上面的中文命名实体识别的例子中,我们感兴趣的是文本序列中的实体。在其他任务中会针对任务的不同打上不同的标签。

 1.2 NER的应用 

NER是关系抽取、信息提取、问答系统、句法分析、机器翻译等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要地位。命名实体识别(NER)和实体关系抽取(RE)是知识抽取中非常重要的部分,同时其作为自然语言处理(NLP)中最遇到的问题一直以来是科研的研究方向之一。

 

1.3 BiLSTM-CRF

传统的方法有CRF(Conditional Random Field)。近年来随着深度学习的兴起,包括命名实体识别在内的序列标注模型从CRF迁移到了BILSTM-CRF等深度模型。当前在英文命名实体识别上,最好的模型是加上Character Embedding和ELMo (Embeddings from Language Models)或者最近google新提出的BERT (Bidirectional Encoder Representations from Transformers) 的BILSTM-CRF。

这篇论文实际上也是基于BILSTM-CRF的,所以先介绍一下这个模型。

                                论文详读:Chinese NER Using Lattice LSTM_第1张图片

 

这里用的标注集是BIO(B-LOC表示地点首字,I-LOC表示地点非首字,O表示非实体)

对于输入的序列“中国很大”,首先获得单个字符的one-hot编码,然后利用预训练或者随机初始化embedding矩阵将句子中的每个字 xi 由one-hot向量映射为低维稠密的字向量(character embedding)xi∈Rd ,d 是embedding的维度。在输入下一层之前,设置dropout以缓解过拟合。

在设置dropout后,接入一个线性层,将隐状态向量从 m 维映射到 k 维,k 是标注集的标签数,从而得到自动提取的句子特征,记作矩阵 P∈Rn×k 。可以把 pi∈Rk 的每一维 pij 都视作将字 xi 分类到第 j 个标签的打分值,

这里,如果对 P 进行Softmax的话(就相当于对各个位置独立进行 k 类分类)其实就可以进行标签预测了。那问题就来了为什么还需要加个CRF层。简单说就是条件随机场可以把label的上下文学出来。lstm加softmax分类的时候只能把特征的上下文关系学出来,label的没学出来。

假设有这样一个序列:

中国队获胜

我们只是用双向LSTM进行预测,结果可能是

中(B-ORG )国(B-ORG)队(I-ORG)获(O)胜(O)

这样会存在一个明显的错误,实际上B-ORG后面不可能再接B-ORG。因为使用双向LSTM这样对各个位置进行标注时无法利用已经标注过的信息,所以接下来将接入一个CRF层来进行标注。

具体怎么实现的,看底下这个图。

                    论文详读:Chinese NER Using Lattice LSTM_第2张图片

底下wi这里是输入序列(词表示或者字表示) 然后经过双向LSTM得到一个隐含状态(可以认为是一个分数值)假设这里共有5个标签,输入序列长度也是5,所以得到的是5个5*1的向量。然后构造一个CRF的转移矩阵。

                   论文详读:Chinese NER Using Lattice LSTM_第3张图片

比如这个图,转移矩阵加了起始状态和终止状态,所以是大小7*7的。转移矩阵指的是这个状态转移到另一个状态的得分。比如这个0.0006 是人名首字转移到机构名尾字的得分,非常低。说明这个状态转移是不合理的。

最后把这两部分的分值相加,求分数值最大的那个标签序列。

比如这里y是一个标签序列,score(x,y)指的是模型对于输入序列x的标签等于y的打分。Pi,yi指的是将第i个标签预测称yi的分值。Ay-1,yi指的是y-1转移到yi的转移分值。

最后可以用动态规划维特比算法来求解分数最大值对应的标签

 

2.现有模型

2.1基于字符的模型

      前面说的命名体识别模型是基于字符的,直接对每个字符进行序列标注。比如这个图就是基于字符的一个模型。这里的xi指的是字符embedding向量

      基于字符的模型存在一个缺点就是丢失了词的信息,embedding向量所含的信息太少。由于没有进行分词,所以基于字符的方法无法利用句子中的单词信息,这也会使得识别效果有瑕疵。举个例子,比如一句话“南京市长江大桥”,如果没有单词信息,识别结果很可能为:“南京“,”市长”,“江大桥”

      在这个基础上也有很多人做了改进。比如这个字符+二元词指的是这个字符的embedding和这个字符和它的下一个字符组成的二元词的embedding拼接起来(这里Cj和图里的Cj不是一个东西,图里指的是LSTM的结构 细胞状态)

      还有就是字符+softword,就是把字符embedding和训练得到的分词的标记信息一起作为输入特征(增强字符表示形式)

 

2.2基于字的模型

      另外一种模型就是基于词的模型,就是首先对句子进行分词,然后再进行标签预测。这样也存在一些问题,就是错误传播,也就是说如果分词的时候出现错误,那么这个错误可能会一直传播下去,直接导致识别错误。分词的时候还容易出现OOV现象

       在自然语言处理或者文本处理的时候,我们通常会有一个字词库(vocabulary)。这个vocabulary要么是提前加载的,或者是自己定义的,或者是从当前数据集提取的。

        假设之后你有了另一个的数据集,这个数据集中有一些词并不在你现有的vocabulary,我们就说这些词汇是Out-of-vocabulary,简称OOV。

       也有人对基于词的模型进行了调整。比如这个词+字的LSTM模型。

——后续慢慢更新

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