Latice-Flat: 引入词汇让中文NER变得更强

969 阅读3分钟

本文同步发布于微信公众号:阿黎投喂舍

相关文章推荐:

What does BERT learn: 探究BERT为什么这么强

TinyBert:超细节应用模型蒸馏,有关蒸馏的疑问看他就够了

量化技术及Albert动态量化

DistillBert: Bert太贵?我便宜又好用

[论文分享] | RoBERTa:喂XLNet在吗,出来挨打了

XLNet论文导读-超越Bert的后浪

导语

相比于英文NER中文NER一直存在一个难点就是中文的字不是单独的词语。因此中文NER有两种方式:基于字的NER和基于词的NER,基于词的NER会因为分词引入错误的信息并且会出现OOV的情况,而基于词的NER则会错失了中文词语之间的信息。很多研究尝试将词语的信息加入基于字的NER中,本文为大家介绍两篇效果很不错的论文:latice和FLAT。

Latice: 为LSTM引入预训练知识

在阅读本文之前,首先为大家简单介绍一下Latice, Latice是由新加坡设计科学大学于2018年提出的一篇中文NER的论文。那个时候NER任务中比较常用的神经网络模型是BiLSTM+CRF,输入的一般是文本的字向量或者词向量。研究表明基于字向量的效果优于基于词向量的效果,但是基于字向量的模型无法充分利用显性的词和词序的信息。

为了解决这个问题,作者预训练了一个词表,并将词表中潜在词的信息整合到基于字符的LSTM-CRF中。下图中红框所代表的就是潜在词的信息,这些潜在词的信息会在遗忘门中作为输入,来决定是否需要被传递到下一个cell中。

实验效果上,作者在MSRA和weibo数据集上实验,识别效果均好于基于字和基于词的LSTM-CRF模型。可以看出,在中文NER中基于上下文的词序和预先学习到的词语搭配对模型效果的提示是很重要的。

FLAT:Latice+Transformer横扫中文NER

Latice LSTM证明了latice结构对中文NER有很好的效果,本文提出了FLAT模型,为latice结构引入了position encoding,对一个token作者使用了head position和end position进行描述。同时作者使用Transformer对模型的输入进行编码,这样输入的Token可以感知到输入的每一个Token。

模型的结构如下图所示:

1. flat-latice结构

和Latice LSTM不同,文中将词表中潜在词的信息和输入的character进行了拼接。潜在词的信息由他的开始和结束为止标记。

2. position encoding

在self-attention的输入中会将position embedding拼接在word embedding上,以明确单词在句子中的位置信息,让模型学习到位置信息。在self-attention中position embedding采用三角函数进行编码。

但是本文将潜在词和输入的句子进行了拼接,潜在词和潜在词之间有重叠,包含和分离三种关系(例如上图中 人和药店 和 人和),采用绝对位置已经无法满足,因此本文提出相对位置关系

位置i和位置j的相对位置计算方式如下:

Rij=RELU(Wr(pdij(h,h)pdij(t,h)pdij(h,t)pdij(t,t)))R_{ij}=RELU(W_r({p_{{d_{ij}}^{(h,h)}}}\oplus{p_{{d_{ij}}^{(t,h)}}}\oplus{p_{{d_{ij}}^{(h,t)}}}\oplus{p_{{d_{ij}}^{(t,t)}}}))

其中dij(h,h),dij(h,t),dij(t,h),dij(t,t){d_{ij}}^{(h,h)},{d_{ij}}^{(h,t)},{d_{ij}}^{(t,h)},{d_{ij}}^{(t,t)}分别描述了单词和单词之间的关系。

dij(h,h)=head[i]head[j]{d_{ij}}^{(h,h)}=head[i] - head[j]

dij(h,t)=head[i]tail[j]{d_{ij}}^{(h,t)}=head[i] - tail[j]

dij(t,h)=tail[i]head[j]{d_{ij}}^{(t,h)}=tail[i] - head[j]

dij(t,t)=tail[i]tail[j]{d_{ij}}^{(t,t)}=tail[i] - tail[j]

pdij(h,h){p_{{d_{ij}}^{(h,h)}}}就是对两个单词head和head之间相对关系的编码。

pd2k=sin(d/100002k/dmodel){p_{d}}^{2k}=sin(d/10000_{2k/{d_{model}}})

pd2k+1=cos(d/100002k/dmodel){p_{d}}^{2k+1}=cos(d/10000_{2k/{d_{model}}})

以上就是FLAT的结构啦。具体的效果如何,只能说

具体的实验大家可以看论文,这里不做赘述啦。

结语与思考

以上就是两篇文章的介绍,下面的思考时间:

  1. FLAT里为什么不能用原生的position embedding
  2. Latice有什么缺点

Reference

  1. Zhang Y , Yang J . Chinese NER Using Lattice LSTM[J]. 2018.
  2. Li X , Yan H , Qiu X , et al. FLAT: Chinese NER Using Flat-Lattice Transformer[C]// Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. 2020.