TENER: Adapting Transformer Encoder for Named Entity Recognition

论文地址:https://arxiv.org/abs/1911.04474

Abstract

BiLSTMs结构在NLP的任务中广泛应用,最近,全连接模型Transformer大火,它的 self-attention 机制和强大的并行计算能力使其在众多模型中脱颖而出,但是,原始版本的 Transformer 在命名体识别(NER)中表现却不像在其他领域中那么好,本文将介绍一种叫 TENER 的模型,是在 Transformer 的基础上为 NER 任务改进的,既可以应用在 word-level,也可以应用在 character-level。通过使用位置感知的编码方式和被削减的attention,我们让 Transformer 在 NER 中达到了在其他任务中那样好的效果。

Introduction

命名体识别是指,在一个句子中找到一个命名体的开始与结束位置,并且标注其特性,比如人名、地名、机构名等。NER 在问答、关系抽取和共指消解(coreference resolution)中都发挥了重要的作用。

NER 通常被视为序列标注任务,其网络结构一般包含三层:word-embedding层、编码层和解码层。NER 各种模型的不同之处主要在这些网络层中。

循环神经网络(RNNs)高度契合语言特性,所以在NLP的任务中使用广泛,其中,BiLSTM因为其对上下文的强大观察能力在NER中广泛使用。

最近,Transformer 模型也在NLP 任务中大放异彩,机器翻译、预训练模型中都可以看到它。Transformer 的编码器实现了一个大范围基于自注意力机制的全连接神经网络,这恰好是RNNs的局限,并且在并行计算上也远超过RNNs。然而,在NER任务中,Transformer 的表现并不好,本文将会探讨为什么有这样的结果,并提出一种改进方法。

  • 原始版本的 Transformer 中,由于自注意力机制的影响,模型是不会计算位置信息的,所以原始论文为了加入位置距离信息,在word-embedding时加入了基于余弦函数的位置编码,但是,对于NER任务来说,距离信息和相对位置信息同样重要。比如,‘in’ 后面的词通常是地点或时间,‘Inc.’前面通常是机构名,而机构名也常常是一组词,所以距离也很重要。为了同时保留对距离和相对位置的感知能力,我们舍弃原本的绝对位置编码而采用相对位置编码,使用参数更少,在NER中效果更好。
  • 原始的 Transformer 的注意力矩阵非常大,我们将其换成稀疏矩阵。因为在一个句子中,给出少量的单词就足以判断命名体,数值规模大的注意力矩阵反而会引入噪声,所以,我们在这里缩小注意力的参数规模。
  • 除了用 Transformer 训练词级别的文本,还用它来做字母级别的编码任务。在以前的工作中,我们已经知道字符编码对于 NER 捕捉字符特征和解决超出字典问题(OOV)不可或缺,以前常用CNN,但我们认为CNN不够好,因为它考虑的上下文是有限的,尽管我们可以通过改变卷积核的大小来处理,但是它依然无法解决不连续的特征,比如’un…ily’。基于 Transformer 的编码器不仅可以利用GPU加速运算,而且能够处理相邻连续的字符甚至非相邻字符,因此我在本文中的 character encoder 也是用Transformer encoder 实现的。

总的来说,为了提高 Transformer 在NER 中的表现,我们使用了相对位置的位置编码,减少了注意力参数,将其变得相对稀疏。经过这些处理之后,模型表现甚至好过基于 BiLSTM 的模型,在六个NER数据集中,改模型在不考虑预训练的模型中达到了前所未有的效果。

Neural Architecture for NER

BiLSTM-CRF常用在序列标注问题中,尽管其取得了巨大成功,每个单词还是要按顺序算,为了利用上 GPU 并行计算的能力,CNN也常常使用,为了解决CNN感知范围不足的问题,该领域使用了ID-CNN。BiLSTM和CNN都广泛应用在字符编码中。

NER中大部分也使用了与训练的word-embedding,使用ELMO等 contextual word embedding 后,模型有了更大程度的提高。

Transformer

Transformer 是基于self-attention的sequence模型,由若干个编码器和解码器组成,每个编码器为全连接的self-attention 层接 Add & Layer Normalization,解码器与编码器基本相同,前面还有一个对已经得到的输出序列作 masked attention。相关内容可以看我在这里写的笔记。

Proposed Model

本文中,我们使用Transformer的编码器来应对复杂的NER任务,其结构如下图所示。

Embedding Layer

为了解决数据稀疏和OOV,我们需要一个 character encoder,以前常用的是CNN和BiLSTM,现在我们选择使用Transformer的encoder结构来代替,这样既可以有效利用GPU,又能考虑上下文,甚至非连续的字符。

最终的word embedding 是将字符编码和预训练的词嵌入拼接在一起的。

Encoding Layer with Adapted Transformer

下面提出对编码层做修改。

Directional-and Distance-Aware Attention

相比于Transformer,BiLSTM可以轻松知道两个词的左右顺序关系,但是Transformer 却不容易判断。下面我们证明 sinusoidal position embedding 的两条性质,从而说明这种编码方式缺乏对方向的认识。

  1. 对于偏置(k)和位置(t)(PE_{t+k}^TPE_t)只取决于(k),这说明两个位置向量的点积可以反映单词间距离。

    证明:

    [PE_t = egin{bmatrix} sin (c_0 t)\ cos (c_0 t)\ vdots\ sin (c_{frac{d}{2} - 1}t)\ cos (d_{frac{d}{2} - 1}t) end{bmatrix} ]

    其中(d)是位置编码的维度,(c_i = frac{1}{1000^{frac{2i}{d}}})。因此

    [PE_t^TPE_{t+k}^T = sum_{j=0}^{frac{d}{2} - 1} [sin(c_j t) sin(c_j (t +k))+ cos(c_j t) cos (c_j (t + k))]\ = sum_{j=0}^{frac{d}{2} - 1} cos(c_j (t - (t+k)))\ = sum_{j=0}^{frac{d}{2} - 1} cos (c_j k) ]

  2. 对于偏置(k)和位置(t)(PE_t^T PE_{t-k}=PE_t^T PE_{t+k}),这说明原本的位置编码是不能分别方向的。

    证明:

    (j=t-k),由性质1,我们有

    [PE_t^T PE_{t+k} = PE_j^T P E _{j+k}\= PE_{t-k}^T PE_t ]

然而,当引入(Q,K)矩阵之后原本的距离感知也被削弱了,因为这时位置编码变成了(PE_t^T W_q^TW_kPE_{t+k}=PE_t^T W PE_{t+k}),这使得他们的距离不像原来那么明确。

因此,为了提高对距离和方向的认知能力,我们用下面的公式给注意力打分。

[Q,k,V = HW_q,HW_k,HW_v\R_{t-j} = [cdots sin(frac{t-j}{10000^{frac{2i}{d_k}}}) cos (frac{t-j}{10000^{frac{2i}{d_k}}}) cdots]^T\A_{t,j}^{rel} = Q_t K_j ^T + Q_t R_{t-j}^T + u K_j^T + v R_{t-j}^T\Attn(Q,K,V) = softmax(A^{rel})V ]

式中(u,v)为可学习的参数。通过计算我们有

[R_t,R_{-t} = egin{bmatrix}sin c_0 t\cos c_0 t\vdots\sin (c_{frac{d}{2}-1} t)\cos (c_{frac{d}{2}-1} t)end{bmatrix},egin{bmatrix}- sin (c_0 t)\cos(c_0 t)\vdots \-sin (c_{frac{d}{2}-1} t)\cos (c_{frac{d}{2}-1} t)end{bmatrix} ]

通过观察可以看出,(R_t)(R_{-t})是不一样的。这样我们就能够表现距离和相对位置关系了。

Un-scaled Dot-Product Attention

在原始的模型中,(K)(Q)的点积有一个(sqrt{d_k})作为分母,在NER任务中我们发现没有这个系数效果会更好。猜测原因是不加这部分会让注意力矩阵更加锐化,对于NER来说减小了噪声干扰,提高了准确率。

CRF Layer

为了充分利用不同 tag 间的依赖关系,我们的模型中使用了条件随机场(CRF)。给定一个序列(S=[s_1,s_2,cdots s_T]),对应的标签序列是(y=[y_1,y_2,cdots,y_T])(Y(s))表示所有合法的标签序列。则序列为(y)的概率可以这样计算

[P(y|s) = frac{sum_{t=1}^T e^{f(y_{t-1}, t_t, s)} }{sum_{y'}^Y(s) sum_{t=1}^T e^{f(y_{t-1}^{'}, t_t^{'}, s)}} ]

其中(f(y_{t-1}, y_t,s))计算转移概率。目标是最大化(P(y|s)),解码时可以使用 Viterbi Algorithm。

一个人没有梦想,和咸鱼有什么区别!
原文地址:https://www.cnblogs.com/TABball/p/12790362.html