论文标题:
Parallel Instance Query Network for Named Entity Recognition
论文链接:
https://arxiv.org/abs/2203.10545
作者:
月霰
论文动机
最近,一些工作将阅读理解模型拓展到信息抽取任务上,比如关系抽取、事件抽取等,并且取得了优异的性能。BERT-MRC率先将NER任务建模成机器阅读任务。它将句子视为上下文,从标注手册或维基百科中构造基于类型的查询,从上下文中抽取实体。
然而,这类方法存在一些问题。第一,由于实体查询是基于类型的,每次推理只能抽取出查询对应的一种类型的实体,导致模型的效率低。第二,基于类型的查询决定了模型的推理过程是类型独立的,忽略了不同类型实体之间的交互,而同句子中不同实体之间是密切相关的。第三,查询需要人工构建,面对更多实体类型的实际场景,这类方法很难应用。
为了应对这些问题,作者提出实例查询网络,抛弃了基于类型的查询,提出实例查询,把命名实体识别任务理解为集合生成任务。最开始实例查询是随机初始化的向量,不需要外部知识去人工构建他们,不具备任何语义信息。随着模型训练,实例查询能够学到各自的查询语义,例如位置或类型相关的语义。具体地说,作者将句子和设置的实例查询拼接成同一序列输入到编码器中编码,得到句子编码和实例查询编码。对于每一个实例查询,使用查询指定的实体预测器去预测表示实体的三元组,包括左右边界和实体类型。需要注意的是,由于实例查询的语义是隐式的,无法为他们预先指定真实地面标签。因此,在训练过程中需要根据模型当前的预测状态,动态地为实例查询指定标签。作者将此视为一对多的线性分配问题,根据当前模型的损失构造标签分配的代价矩阵,并采用匈牙利算法得到求解,得到最终的标签分配矩阵。
论文方法
编码器
模型的输入由两部分组成,句子的单词序列和实例查询序列。异构序列的三类嵌入计算如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8783ae170552040f3a0f4de084178cb0.jpeg)
传统的自注意力会同时让句子和所有实例查询交互,这会破坏了句子的语义。为了保持句子语义不受实例查询的影响,我们设计单向的自注意力机制,句子和实例查询之间的注意力是单向的,即阻断句子对实例查询的注意力。我们需要让句子的编码独立于实例查询,因此我们将注意力权重中句子编码关注实例查询的部分置为负无穷(即将注意力得分置为负无穷)。单向自注意力中注意力权重计算公式为:
![](https://i-blog.csdnimg.cn/blog_migrate/44d50d90a9532605c8df53f7f99d798e.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/4501dc73894d6e5cc0bd227af1edd7c4.jpeg)
M是一个遮罩矩阵,其中1表示序列中横坐标位置的元素不会关注纵坐标位置的元素。在我们公式中,M的右上角为大小为N x M的全是一矩阵。为了使查询和句子在单词级别上交互,我们进一步使用双向LSTM网络和单词级别的transformer layer对序列进行编码。最后我们拆分A,可以得到句子的编码和实例查询的编码。
实体预测
我们使用左、右实体边界指针器和实体分类器分别基于每个实例查询预测对应其实体左右边界和类别。对于第i个实例查询,我们计算它在句子第j个位置为左右边界的概率:
![](https://i-blog.csdnimg.cn/blog_migrate/0d3a9f4cb6b8fbca92a55edc961b0d43.png)
实体边界词对实体类别的预测是有用的,我们将左右边界预测的概率加权单词,再与实例查询拼接,以预测实体的类别。第i个实例查询对应的实体的属于不同类型的概率为:
![](https://i-blog.csdnimg.cn/blog_migrate/86742188c786226850faef280362892b.jpeg)
因此第i个实例查询查询出的实体为:
![](https://i-blog.csdnimg.cn/blog_migrate/24515b3d5b4bbefdd3158c00d061491c.png)
,其中
![](https://i-blog.csdnimg.cn/blog_migrate/a420a0b24349e06f6f876c1f2ebc6b04.png)
,
![](https://i-blog.csdnimg.cn/blog_migrate/e9c099e41a89140c27af4251ab8d415d.png)
和
![](https://i-blog.csdnimg.cn/blog_migrate/74dacd226df4388080838ecf10c71ccf.png)
。对于M个实例查询,我们可以抽取出M个实体。
动态标签分配
由于实力查询是隐式的(以向量呈现,而不是自然语言),我们不能预先给这些查询指定真实实体作为标签。为了训练模型,自动为这些实例查询学习对应的查询语义,我们将标签分配视成线性指派问题。我们将识别一个实体视为任务,实例查询视为代理,任何代理都可以被指派执行任何任务,产生一些成本,这些成本可能因(代理,任务)分配而不同。该问题需要求解在最小的成本下的最优指派。传统的LAP中,一个任务只能分配给一个代理(一对一),不同于此,我们的每个任务可同时分配给多个代理,即一个真实实体可有多个实例查询同时识别(一对多)。首先我们定义将第j个实体分配给第i个实例查询的代价为:
![](https://i-blog.csdnimg.cn/blog_migrate/dc473d9cf5ce5d3af5504d4a3931bc1d.jpeg)
因此,该一对多的LAP任务的优化目标定义为:
![](https://i-blog.csdnimg.cn/blog_migrate/aa33747c1d4e98447e8a297ec02dac30.jpeg)
其中,A为二项的分配矩阵,表示将第j个实体分配给第i个实例查询。B为可供应的投标向量,每个元素代表对应位置的真实实体可被分配给的实例查询的数目。每一个实体均匀分摊可分配的实例查询总数K,即。我们使用匈牙利算法求解该问题,得到最优的标签分配矩阵A。由于实例查询的数目是超过总的投标数目,因此存在实例查询没有匹配到真实实体。我们添加一类None实体作为未匹配到实体的实例查询的标签。我们用向量a为A拓展一列得到A,该向量为:
![](https://i-blog.csdnimg.cn/blog_migrate/986b8db238c9391911e9b675e05ee5b0.jpeg)
基于A,我们可以得到M个实例查询对应的标签为:
![](https://i-blog.csdnimg.cn/blog_migrate/351034045936569c06a26b9b5e5d3f61.jpeg)
。pi是最优标签分配下,实例查询对应标签的索引为
![](https://i-blog.csdnimg.cn/blog_migrate/2a76f6d920d4be963e8b22ceb2d9a156.jpeg)
。
训练目标
当实例查询被指派标签后,基于实例查询的预测和标签,我们使用BCE作为实体定位(左右边界识别)损失:
![](https://i-blog.csdnimg.cn/blog_migrate/b86e163449bfd4feb53a31b7e14d0873.jpeg)
使用CE作为实体分类的损失:
![](https://i-blog.csdnimg.cn/blog_migrate/86adebea0baa8fceab7c3d8e400c5111.jpeg)
因此,模型在训练集合D上的总损失为:
![](https://i-blog.csdnimg.cn/blog_migrate/b582cf9ea052c29b51fcdb15082f0d52.jpeg)
实验结果
论文中的方法在nested实体数据集ACE04、ACE05、KBP17、GENIA、NNE,flat实体数据集FewNERD、CoNLL03、OntoNotes以及中文数据集MSRA性能均达到SOTA。四个消融实验也均验证了单向注意力机制、动态分配等各模块的有效性。
![](https://i-blog.csdnimg.cn/blog_migrate/186f3da4e04814bb4141a0275c17ecb7.png)
结论
当前的NER任务被转换为阅读理解任务,但是存在着一个问题只能抽取到一种类型的实体从而效率低下,忽略实体之间的依赖性,模板需要手工构造等问题。这篇论文设定全局和可学习的实例查询语句,把NER任务理解为集合生成任务,同时可并行从句子抽取各类实体。在训练过程中需要根据模型当前的预测状态,动态地为实例查询指定标签。作者将此视为一对多的线性分配问题,根据当前模型的损失构造标签分配的代价矩阵,并采用匈牙利算法进行求解。实验结果表明除了传统的flat场景之外,对于长文本和嵌套的复杂实体也都有着不错的识别效果。
如对相关技术比较感兴趣,欢迎关注我们的「AdaSeq序列理解技术」专栏,或加入钉钉 group (4170025534) 进行技术交流。