写在最前面。最近对NER做了一个调研,看了一些论文,将论文中提到的NER方法汇总到博客里,此博客还会继续更新。相关论文和数据集整理可见Github。
按照我的个人理解,NER任务可以分为Encoder和Decoder两部分。前者获取输入句子的向量化表示,后者得到对每个字符的分类结果。对于大部分的NER论文,Decoder都会用到CRF,主要的创新在不同的子任务(比如中文NER的词汇增强,少标注样本以及低资源学习、重叠实体识别等)的Encoder部分。
目录
- 基本模型
- 1. Bidirectional LSTM-CRF Models for Sequence Tagging
- 2. A Multi-task Approach for Named Entity Recognition in Social Media Data,ACL2017
- 3. Empower Sequence Labeling with Task-Aware Neural Language Model,AAAI2018
- 4. Neural Chinese Named Entity Recognition via CNN-LSTM-CRF and Joint Training withWord Segmentation,WWW2019
- 5. CAN-NER: Convolutional Attention Network for Chinese Named Entity Recognition,NAACL2019
- 词汇增强
- 嵌套实体
- 小样本
基本模型
基本模型包括RNN-CNN based模型及其变种,也有一部分使用了多任务学习的方法,图神经网络在近几年也开始出现在相关NER任务里,主要用于Flat NER的任务。对于小样本或者低资源没有特定的解决方案。
1. Bidirectional LSTM-CRF Models for Sequence Tagging
BiLSTM+CRF,没有什么好描述的,不过却奠定了NER的基调。
2. A Multi-task Approach for Named Entity Recognition in Social Media Data,ACL2017
采用多任务学习的解决方案:次要任务实体分割;主要任务实体识别。整个模型分为三部分:feature representation, model description, and sequential inference。
使用了三种不同的特征作为模型的输入: character, word(预训练的词向量+词性标注), and lexicons(专业词典)。这三种不同的输入分别使用CNN,LSTM和Dense进行提取。
整个模型表示为:
首先,系统将句子嵌入到高维空间中,使用CNN、BLSTM和Dense编码器提取特征。然后,它将每个编码器的结果向量串联起来并执行多任务。左上方的单节点层表示分割(红色),右上方的三节点层表示分类(蓝色)。最后,CRF分类器使用公共Dense层的权重来执行序列标注。
其中的CNN和BiLSTM分别如下:
3. Empower Sequence Labeling with Task-Aware Neural Language Model,AAAI2018
依然是多任务的,本文的多任务是语言模型以及NER。在character level LSTM之上加入了一个highway layer,用来将LSTM产生的字符表示映射到不同的表示空间,这样语言模型和序列标注模型就可以共享character level LSTM。
字符级LSTM只会在单词边界处对下一个单词进行预测,因此在图中,输出到下highway的都是
c
i
,
_
c_{i,\_}
ci,_这种表示单词边界的向量。对于BLSTM,前向和后向分别有两种不同的结果,分别表示为
f
i
,
r
i
f_i, r_i
fi,ri。Highway的本质其实就是门操作,论文中给出了如下公式:
图中提到的蓝色和灰色的Highway的输出被用于语言模型(Language Model),而黄色和粉丝的Highway的输出和单词的embedding结合起来被输入到单词级别的BLSTM中,最终过一个CRF进行词性标注。
这里要提及一下LM,它是描述序列生成的一组模型,当前单词的概率与之前所有的单词相关:
而在本文的语言模型中的输入是
c
i
,
_
c_{i,\_}
ci,_,所以写作:
然后又做了一个逆向的:
最终,总体的loss被表示为:
4. Neural Chinese Named Entity Recognition via CNN-LSTM-CRF and Joint Training withWord Segmentation,WWW2019
引入一个CNN-LSTM-CRF神经结构来为CNER捕获本地和远程上下文。其次,提出了一个统一的框架来联合训练CNER模型和分词模型,以提高CNER模型识别实体边界的能力。第三,引入了一种从已有标记数据中自动生成伪标记样本的方法,可以丰富训练数据。
其中,中文分词的损失函数为:
其中
y
s
s
e
g
y_s^{seg}
ysseg为句子的标签序列,
c
s
c_s
cs为CNN网络输出语句的隐藏字符表示,
θ
s
e
g
θ^{seg}
θseg为参数。最终的损失函数依旧是联合损失:
本文提到的标记数据生成方法值得强调一下,假如标记数据中“张三在阿里工作”,张三被标记为人名,阿里为公司,那么“李四在腾讯工作”这个未标记数据中的李四也可以被认为是人名。其实这对应了一个trigger的提取操作,这中想法有被应用在其他论文里,咱们后续再说。
5. CAN-NER: Convolutional Attention Network for Chinese Named Entity Recognition,NAACL2019
首先将CNN与局部注意机制相结合,增强模型捕捉字符序列之间隐含的局部上下文关系的能力。与使用正常CNN层的基线的实验结果相比,我们的卷积注意层的F1性能有了明显的提高;其次,引入了一个基于字符的中文NER模型,该模型由具有局部注意的CNN和具有全局自注意层的Bi-GRU组成。我们的模型实现了最先进的f1分数没有使用任何外部词嵌入和词汇资源,这是更实际的真实NER系统。
这个图看起来有点抽象,不过使用公式拆解开来就很好理解了:
首先是输入的embedding。
d
e
=
d
c
h
+
d
p
o
s
+
d
s
e
g
d_e = d_{ch}+d_{pos}+d_{seg}
de=dch+dpos+dseg,也就是输入的维度包含了三种特征:中文字级别的特征,position的特征,分割的特征(通过BMES编码,俺也不太清楚具体是啥)。然后,是一个local attention,用于获取局部大小为
k
k
k的窗口内部的字符级别的注意力:
最终的输出为
h
m
h_m
hm。然后是对其进行经典的卷积,最后接一个sum-pooling。
之后是GRU和一个全局的注意力机制,计算过程和local注意力差不多:
最终通过CRF得到的预测值为:
词汇增强
词汇增强有一些列论文,旨在借助预定义的专业提点提升中文NER的准确率。因为基于词的中文NER还需要一个上层的分词任务,与英文不同。关于词汇增强有一系列的论文,最早发表于2018ACL。词汇增强中经常出现的关键词有:Lexicon,FLat,Lattice。强调一下,我最后把Gazetteers的相关任务也算作词汇增强的一种。
此处偷懒,放一下知乎大佬的文章,我们在此只介绍一下复旦大学邱锡鹏老师团队的文章。
FLAT: Chinese NER Using Flat-Lattice Transformer,ACL2020
传统的lattice结构存在复杂性和动态性,现有的大多数基于格的模型难以充分利用gpu的并行计算,推理速度通常较低。
因此本文提出了一种新的flat的lattice结构,将词典的相对位置信息编码并加到输入的后边。
Flat的结构可以和transformer结合起来,作为encoder的部分服务于文本表示学习的下游任务:
图中的矩阵代表四种不同的position encoder方法(这是在transformer中必不可少的),通过对位置信息的编码,使得模型对不同词之间的相对位置信息敏感。本文的四种位置编码分别为:
其中,
i
j
ij
ij表示不同的实体,
(
h
h
)
(hh)
(hh)表示两个单词head之间的距离。那么,所有实体相对位置的编码的融合向量为:
那么,实体之间融合了位置信息的注意力为:
其中
E
x
i
,
j
E_{x_i,j}
Exi,j表示实体的向量。使用这个新的注意力计算方法代替transformer中的self-attention,也就是下面公式中的
A
A
A:
接下来的计算方式就和transformer一毛一样了。
嵌套实体
嵌套这个词被表示为Nested,与其相对的是Flat的NER。举个例子,“中国银行”在Flat NER中只对应一个“组织”实体,但是“中国”也是一个国家的实体,Flat NER无能为力。Nested一般通过建模单词之间的关联关系得到两两词(英文中的词,中文里的字)之间的概率转移矩阵 M i j M_{ij} Mij, i i i被视为潜在的可能作为实体的开始词(字), j j j则被视为结束词(字)。如果二者之间的概率高,可能就会被作为一个新的实体。图神经网络也会被用到此任务中去建模长距离的依赖关系。