NER中的一些编码器与解码器

2021/11/19 23:14:05

本文主要是介绍NER中的一些编码器与解码器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 参考
  • 编码
    • LR-CNN
    • FLAT
  • 解码
    • GlobalPointer

本篇文章是命名实体识别(NER)算法的进一步介绍,主要内容是介绍一些编码器与解码器,作为上一篇内容的补充。

参考

中文NER的正确打开方式: 词汇增强方法总结 (从Lattice LSTM到FLAT)
GlobalPointer:用统一的方式处理嵌套和非嵌套NER
如何解决transformer对NER效果不佳的问题
1、Sinusoidal位置编码追根溯源

编码

关于编码部分,我想更多的介绍一些中文编码的内容,而且,虽然使用BERT效果很好,但是BERT存在推断慢的问题,因此如果我们面对低延时的要求时,可能需要考虑一下其他的模型。我们知道中文都是对字进行编码的,如果能够将词汇信息加入到其中,能够提供更为丰富的信息。比如在命名实体识别(NER)算法中我们介绍了Lattice LSTM就引入了词汇的信息。

Lattice LSTM中存在一些缺点:

  1. 计算性能低下,不能batch并行化。原因是每个字符之间的word cell数目不一致。
  2. 信息损失。只有以该字符为结尾的词汇信息,才会被融入到字符中,也就是说词汇的中间部分是无法获取词汇的表征的。比如:“南京市”,只有 “市” 才可以获取“南京市”的词汇信息,而“京”中不包含“南京市”的信息。而且,由于RNN的特性,采取BiLSTM时其前向和后向的词汇信息不能共享。

LR-CNN

CNN-Based Chinese NER with Lexicon Rethinking。
在这里插入图片描述
Lattice LSTM采取RNN结构,无法有效处理信息冲突问题,如上图所示,对于【州】和【长】都无法仅仅根据上文信息得到标签,对于这种冲突问题,我们需要利用全局信息解决。

LR-CNN的结构如下:
在这里插入图片描述
首先,有句子 C = { c 1 , c 2 , ⋯   , c M } C=\{c_1,c_2,\cdots,c_M\} C={c1​,c2​,⋯,cM​},其中的 c i c_i ci​表示第 i i i个位置上通过字符embedding得到的结果。在此之上,建立 L L L层CNN层,每一层的感受野均为2,这样对第二层而言就提取了2-gram的特征(第一层为embedding层),且能推出在第 l l l层,得到的是l-gram的特征:
在这里插入图片描述
定义 w m l = {   c m , ⋯   , c m + l − 1 } w_m^l=\{\ c_m,\cdots,c_{m+l-1}\} wml​={ cm​,⋯,cm+l−1​},且根据(1)可知, C m l C_m^l Cml​与 w m l w_m^l wml​有关,使用attention将这两者结合起来,得到一个融合的信息:
在这里插入图片描述
从而,我们可以得到最高层的表征为 X m L X_m^L XmL​,这个表征我们可以认为包含尽可能多的全局信息,然后再用这个信息“feedback”给每一层CNN,调整词汇信息的权值,得到每一层新的信息(这一步主要是为了解决信息冲突的问题):
在这里插入图片描述
最后跟一个attention层:
在这里插入图片描述
这个结果最终被喂到CRF去解码。

FLAT

Chinese NER Using Flat-Lattice Transformer
在这里插入图片描述

tips:
从上图可以看出,FLAT采用的是Transformer,而在之前的博客中提到Transformer不太适合做NER任务。参考如何解决transformer对NER效果不佳的问题 这篇文章。
这里我没太看懂,我的理解是transformer的attention部分是天然对称的,所以他提出了Sinusoidal位置编码 想要打破这种对称性,于是 f ( . . . x n , . . . . x m , . . . ) f(...x_n,....x_m,...) f(...xn​,....xm​,...)变成了: f ( . . . x n + p n , . . . . x m + p m , . . . ) f(...x_n+p_n,....x_m+p_m,...) f(...xn​+pn​,....xm​+pm​,...) 只要每个位置的编码不同,就不具备这种对称性了。
另外,如果我们做到内积部分,将query*key展开,有:
q i k j T = x i W Q W K T x j T + x i W Q W K T p j T + p i W Q W K T x j T + p i W Q W K T p j T {q}_i {k}_j^{T} = {x}_i {W}_Q {W}_K^{T}{x}_j^{T} + {x}_i {W}_Q {W}_K^{T}{p}_j^{T} + {p}_i {W}_Q {W}_K^{T}{x}_j^{T} + {p}_i {W}_Q {W}_K^{T}{p}_j^{T} qi​kjT​=xi​WQ​WKT​xjT​+xi​WQ​WKT​pjT​+pi​WQ​WKT​xjT​+pi​WQ​WKT​pjT​
中间两项并没有被证明其对称性。
这一部分,有大神垂帘我一下私信我教教我么,谢谢。

FLAT设计了一种position encoding的方式融合Lattice结构,如上图所示,输入包括三个部分:token,head (position),tail (position);token可以是字符也可以是词,对于字符而言,head=tail,对于词而言,head<tail。采用这种方式重构Lattice结构,又因为transformer的特性,FLAT可以直接建模字符与所有匹配的词汇信息间的交互,例如,字符[药]可以匹配词汇[人和药店]和[药店]。

而且FLAT改变了原生Transformer位置编码的方式(Sinusoidal 绝对位置编码),而是提出一种新的相对位置编码(一般来说,对于自然语言更依赖相对位置,相对来说,相对位置比绝对位置有更优秀的表现)。

在这里插入图片描述
这里的相对距离定义为:
在这里插入图片描述
融合:
在这里插入图片描述
其中:
在这里插入图片描述
最终attention score的计算方式如下:
在这里插入图片描述

解码

GlobalPointer

该解码器是苏神提出的一种可以处理嵌套与非嵌套NER的解码器。更多内容可以参见GlobalPointer:用统一的方式处理嵌套和非嵌套NER
在这里插入图片描述
然后,在其中加入相对位置编码,能大幅提升性能:
在这里插入图片描述
最后利用将“softmax+交叉熵”推广到多标签分类问题中提到的损失函数,得到其损失为:
在这里插入图片描述
其代码链接为: https://github.com/bojone/GlobalPointer



这篇关于NER中的一些编码器与解码器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程