title: 基于机器阅读理解框架的命名实体识别方法subtitle: A Unified MRC Framework for Named Entity Recognition
date: 2020-07-07
author: NSX
catalog: true
tags:
- NER
- MRC

基于机器阅读理解框架的命名实体识别方法

论文标题:A Unified MRC Framework for Named Entity Recognition

论文作者:Xiaoya Li, Jingrong Feng, Jiwei Li

论文链接:https://arxiv.org/pdf/1910.11476.pdf

今天,我们向大家介绍香侬科技被ACL 2020接收的第三篇论文: A Unified MRC Framework for Named Entity Recognition 。本文提出 使用基于 机器阅读理解 (Machine Reading Comprehension, MRC) 的框架 代替序列标注模型 (sequence labeling) 统一 处理嵌套与非嵌套命名实体识别问题。该方法解决了序列标注模型无法处理嵌套命名实体识别的缺陷, 在8个中英数据集(OntoNotes4.0/5.0、ACE2004/2005、GENIA、KBP17、MSRA、CoNLL)上取得接近或超过当前最佳效果的表现 ,尤其是在嵌套任务上大幅超越之前最优结果。

1. 概述

近年来关于命名实体识别(NER)的研究非常多,其中大多数都是针对的“非嵌套型”的NER(Flat NER),然而在实际场景中,“嵌套型”的NER(Nested NER)占了相当的比例。如下图所示的两个例子所示。如此一来,以往针对Flat NER的模型就不对Nested NER起效,这是因为它们大多数是序列标注模型,这就没有办法直接迁移到Nested NER上。

2020-07-07-基于MRC方法的NER论文 - 图1

另一方面,过去对Nested NER的解决方法大都是构建一个pipelined的模型结构,即先抽取所有的实体,然后再判断每个实体的实体类型。这种方法尽管比较简单,但是由于其pipeline性质,实体抽取的错误直接会导致整体正确率的降低。而且,将Flat NER与Nested NER分开考虑本身也不够简洁。

我们想要一种将二者联系起来,并且不失效果的方法。受到近来机器阅读理解问答(MRC-QA)的启发, 我们提出使用机器阅读理解框架去合并处理Flat NER与Nested NER。比如,现在想要抽取PER类型的实体,那幺我就可以问“Which person is mentioned in the text”。使用这种方法,无论是Flat NER还是Nested NER,都能很直观地抽取出来。

总的来说, 本文贡献如下 :

  1. 提出一种基于MRC的方法抽取命名实体,该方法适用于Flat和Nested两种类型的NER。相比序列标注方法,该方法简单直观,可迁移性强。
  2. 我们将会通过实验说明,基于MRC的方法能够让问题编码一些先验语义知识,从而能够在小数据集下、迁移学习下表现更好。
  3. 在8个中英数据集上取得当前最佳效果(OntoNotes4.0/5.0、ACE2004/2005、GENIA、KBP17、MSRA、CoNLL等)。

2. 模型设计

2.1 NER任务

给定一个句子2020-07-07-基于MRC方法的NER论文 - 图2,其中2020-07-07-基于MRC方法的NER论文 - 图3是句子中的字符,n是句子的长度。实体识别就是找出句子X中的所有实体,并给所有实体赋予一个标签2020-07-07-基于MRC方法的NER论文 - 图4(其中Y是预先定义好的标签类型,如:PER,LOC等)。

2.2 MRC任务

给定上下文C和问题Q,其中2020-07-07-基于MRC方法的NER论文 - 图5,MRC(片段抽取型)任务要求模型从C中抽取连续的子串2020-07-07-基于MRC方法的NER论文 - 图6 其中( 2020-07-07-基于MRC方法的NER论文 - 图7 )。

2.3 基于MRC框架的NER解决方案

将NER任务转换为MRC任务,如:抽取句子中PER(PERSON)实体的NER任务,可以转换为回答问题which person is mentioned in the textMRC任务。此种方式天然适配falt NERnested NER任务。(当需要抽取不同类别的重叠实体时,只需要回答两个独立的问即可)。

2.4 数据构建

先来回顾一下NER任务。给定一个文本序列2020-07-07-基于MRC方法的NER论文 - 图8,它的长度为n,我们要抽取出其中的每个实体,其中实体都有各自的实体类型。假设该数据集的所有实体标签集合为2020-07-07-基于MRC方法的NER论文 - 图9,那幺对其中的每个实体标签y,比如地点LOC,都有一个关于它的问题 2020-07-07-基于MRC方法的NER论文 - 图10#card=math&code=q%28y%29)。这个问题可以是一个词,也可以是一句话等等。现在,我们给模型输入 2020-07-07-基于MRC方法的NER论文 - 图112020-07-07-基于MRC方法的NER论文 - 图12#card=math&code=q%28y%29),就可以期望模型输出所有具有标签 2020-07-07-基于MRC方法的NER论文 - 图13 的所有实体。

question的构建

那幺,训练数据如何构建呢?首先来构造问题q(y)。我们使用 “标注说明” 作为每个标签的问题。所谓“标注说明”,是在构造某个数据集的时候提供给标注者的简短的标注说明。比如标注者要去标注标签为LOC的所有实体,如下图所示:

2020-07-07-基于MRC方法的NER论文 - 图14

在有了问题 2020-07-07-基于MRC方法的NER论文 - 图15#card=math&code=q%28y%29) 之后(现在假设问题的长度为m),我们就有了一个训练实例三元组 2020-07-07-基于MRC方法的NER论文 - 图16,也就是2020-07-07-基于MRC方法的NER论文 - 图17%2C%20Answer%2C%20X%EF%BC%89#card=math&code=%EF%BC%88q%28y%29%2C%20Answer%2C%20X%EF%BC%89),这里Answer就是对应的所有实体。

我们用 2020-07-07-基于MRC方法的NER论文 - 图18#card=math&code=x%28start%3Aend%29) 表示其中的实体。其中start是实体的开始位置,end是实体的结束位置。比如在句子X=“北京欢迎你”这句话中,“北京”这个实体就可以表示为x(1:2),因为“北”是句子的第1个位置,“京”是句子的第2个位置。

2.6 模型细节

2.6.1 Model Backbone

question 2020-07-07-基于MRC方法的NER论文 - 图19#card=math&code=q%28y%29) 和句子 2020-07-07-基于MRC方法的NER论文 - 图20 拼接成 $ {[CLS],q(1),……, q(m),[SEP],x(1),…… ,x(n)}$ 的形式,输入BERT进行特征提取,得到特征矩阵 2020-07-07-基于MRC方法的NER论文 - 图21,其中n为句子长度,d为BERT最后一层提取的特征矩阵的向量维度。

2.6.2 Span Selection

MRC抽取答案的方法是预测答案的开始位置结束位置,有两种方案:

  1. 设计2个n-classes分类器(n为句子长度),分别预测答案的开始位置结束位置。这种方案在给定一个context和一个question时只能得到一个答案,无法处理句子中存有多个实体的问题,更不能解决实体嵌套的问题;
  2. 设计2个2分类器,其中一个分类器负责预测每个字符是否是实体开始位置,另一个分类器负责预测每个字符是否是实体的结束位置。这种方案在给定一个context和一个question时支持多个实体开始位置多个实体结束位置,因此有能力根据 2020-07-07-基于MRC方法的NER论文 - 图22 抽取出所有相关的实体。模型采用的是本方案。

Start Index Prediction

2020-07-07-基于MRC方法的NER论文 - 图23%20%5Cin%20R%5E%7Bn%20%5Ctimes%202%7D#card=math&code=P%7Bstart%7D%3Dsoftmax%7Beach%20%5Cspace%20row%7D%28E%20%5Ccdot%20T_%7Bstart%7D%29%20%5Cin%20R%5E%7Bn%20%5Ctimes%202%7D)

其中:

  • 2020-07-07-基于MRC方法的NER论文 - 图24 是需要学习的参数;
  • 2020-07-07-基于MRC方法的NER论文 - 图25 每一行构成一个是或不是实体开始位置的概率分布;

End Index Prediction

2020-07-07-基于MRC方法的NER论文 - 图26%E2%88%88R%5E%7Bn%C3%972%7D#card=math&code=P%7Bend%7D%3Dsoftmax%7Beach%20row%7D%28E%E2%8B%85T_%7Bend%7D%29%E2%88%88R%5E%7Bn%C3%972%7D)

其中:

  • 2020-07-07-基于MRC方法的NER论文 - 图27是需要学习的参数;
  • 2020-07-07-基于MRC方法的NER论文 - 图28每一行构成一个是或不是实体结束位置的概率分布;

Start-End Matching
在句子X中,同一个类型下存在多个实体,这就意味着存在多个start-index多个end-index,因此需要一个二分类器去匹配start-indexend-index

2020-07-07-基于MRC方法的NER论文 - 图29)#card=math&code=P%7Bi%7Bstart%7D%2Cj%7Bend%7D%7D%3Dsigmoid%28m%E2%8B%85concat%28E%7Bi%7Bstart%7D%7D%2CE%7Bj_%7Bend%7D%7D%29%29)

其中:

  • 2020-07-07-基于MRC方法的NER论文 - 图30是需要学习的参数。

  • 得到的这个概率就是x(i:j)是实体类型为y的实体的概率。

2.7 训练与推理

2.7.1 Train阶段

训练阶段有三个损失函数,分别是开始位置损失、结束位置损失和实体损失,分别定义如下:

在训练的时候,我们有三个损失,分别是开始位置损失、结束位置损失和实体损失,分别定义如下:

2020-07-07-基于MRC方法的NER论文 - 图31%0A#card=math&code=%5Czeta%7Bstart%7D%3DCE%28P%7Bstart%7D%2CY_%7Bstart%7D%29%0A)

2020-07-07-基于MRC方法的NER论文 - 图32%0A#card=math&code=%5Czeta%7Bend%7D%3DCE%28P%7Bend%7D%2Cy_%7Bend%7D%29%0A)

2020-07-07-基于MRC方法的NER论文 - 图33%0A#card=math&code=%5Czeta%7Bspan%7D%3DCE%28P%7Bstart%2Cend%7D%2CY_%7Bstart%2Cend%7D%29%0A)

即,分别把预测的和真实的结果做交叉熵。然后加起来就是最后的损失。如果p(i:j)>0.5,我们就认为x(i:j)是实体,否则就不是。

Train的损失函数为:2020-07-07-基于MRC方法的NER论文 - 图34,其中2020-07-07-基于MRC方法的NER论文 - 图35是超参。

2.7.2 Test阶段

  1. 使用start index model预测实体的start-index
  2. 使用end index model预测实体的end-index
  3. 使用match modelstart-indexend-index进行匹配,当2020-07-07-基于MRC方法的NER论文 - 图36%3E0.5#card=math&code=P%7Bspan%7D%28i%7Bstart%7D%2Ci_%7Bend%7D%29%3E0.5)时,模型判定x(i:j)是实体,否则不是。

3. NER实验

3.1 Nested NER效果

我们首先在Nested NER上做实验,数据集(英文)用ACE2004,ACE2005,GENIA,KBP2017。基线模型有Hyper-Graph,Seg-Graph,ARN,KBP17,Seq2seq-BERT,Path-BERT,Merge-BERT和DYGIE,具体实验设置详见原文。实验结果如下:

2020-07-07-基于MRC方法的NER论文 - 图37在所有数据集上,MRC的方法都取得显着更优。

3.2 Flat NER效果

下面我们在Flat NER上做实验,数据集分为中文和英文。英文有CoNLL2003,OntoNotes5.0;中文有MSRA,OntoNotes4.0,基线模型有BiLSTM-CRF, ELMo, CVT, BERT-Tagger(以上为英文), Lattice-LSTM, BERT-Tagger, Glyce-BERT(以上为中文)。实验结果如下:

2020-07-07-基于MRC方法的NER论文 - 图38

可以看到,在两个OntoNotes数据集上,MRC的方法都有更多的提升,这是因为OntoNotes有更多的实体类型,一些类型数据非常稀疏。这表明MRC方法有助于缓解数据稀疏问题,因为MRC中的问题能够编码一部分先验信息。

4. 分析

下面我们从四个方面进行比对实验:

  • 提升来源(MRC还是BERT);
  • 问题构建策略;
  • Zero-Shot表现;
  • 训练集大小。

4.1 MRC or BERT ?

第一个问题是,实验的提升到底是来自BERT还是来自MRC呢?如果来自MRC,那幺把这种MRC方法加到其他非BERT模型上应该也会有显着提升。

所以,对非BERT模型,我们比较了普通的LSTM Tagger(non-MRC)和BiDAF/QAnet(MRC);对BERT模型,我们比较了BERT Tagger和BERT-MRC,实验结果如下:

2020-07-07-基于MRC方法的NER论文 - 图39

很显然,无论对non-BERT还是BERT模型,MRC都比non-MRC好,尽管有了BERT也会有大幅提升。

4.2 如何构建Question ?

Question的构建方式对结果有显著的影响,作者探索了一下几种方式:

  1. label的下标:直接使用label在标签集中的下标作为question,如:onetwotree
  2. 关键词:使用关键词作为question,如ORGquestionorganization
  3. 规则模板:用模板生成question,如ORGquestionwhich organization is mentioned in the text
  4. 维基百科:用维基百科里的定义作为question,如ORGquestion为:an organization is an entity comprising multiple people, such as an institution or an association
  5. 近义词:使用label的近义词作为question,如ORGquestion为:association
  6. 关键词+近义词:将关键词和近义词连接起来作为question
  7. 标注说明:上文提到的方法,如ORGquestionfind organizations including companies, agencies and institutions

效果如下图所示:

2020-07-07-基于MRC方法的NER论文 - 图40

使用标注说明的模型效果最好,分析如下:

  1. 标签下标没有任何有用的信息,因此效果最差;
  2. 维基百科包含较多的无用信息,造成了干扰;
  3. 标注指南描述的最为准确,效果最好;

4.3 Zero-shot

上面我们说到,MRC的问题由于编码了一些先验信息,所以可能在标签迁移上效果较好,下表是结果。可以看到,在两个数据集迁移上,tagger都远差于MRC。

2020-07-07-基于MRC方法的NER论文 - 图41

4.4 训练集大小

最后来看看不同数据集大小对MRC和Tagger效果的影响,下图可见,即使训练数据只有50%,MRC方法都能达到Tagger的最优结果。这也说明了MRC具有一定的先验知识编码能力。

2020-07-07-基于MRC方法的NER论文 - 图42

参考

ACL2020(三)| 基于机器阅读理解框架的命名实体识别方法

【NLP-Paper】基于MRC框架的命名实体识别方法