文章目录
Hierarchical Contextualized Representation for Named Entity Recognition (层次上下文表示的命名实体识别)
Abstract
命名实体识别模型NER通常是基于双向LSTM(BI-LSTM)结构的。BiLSTM由于其序列连续性和单一输入特性,使得模型无法更好的利用全局句子级和文档级信息。本文的主要贡献:
- 引入了分层上下文表征,即分别提取了句子级和文档级信息,融入embedding提高了对非近邻信息(non-local information)的利用能力。
- 分别使用label embedding attention mechanism考虑了不同单词的贡献度来提取句子级信息
- 使用键-值记忆网络记录文档中对上下文相似度敏感的单词信息来提取文档级信息
Introduction
- 近年来NER主要使用BILSTM进行enconder来提取序列信息。但是BILSTM存在的无法很好的利用全局信息的限制
- 首先,在每一个时间步(time step),它都是使用当前的word embedding和以前一个cell 的状态和作为输入,因此较难捕获句子级信息。 Zhang,Liu等人同时对每个词状态和整个句子状态建模子状态来抓取句子级别信息,Liu等人使用全局语义编码器和平均池化策略来抓取句子级别特征。即使这些工具抓取了句子级别特征,但是他们忽略了在同一个句子单词不同的重要性。
- 尽管BILSTM对所有实例进行迭代更新参数,但是BiLSTM在训练和预测时仅仅使用一条训练数据,这使得模型无法有效的抓取文档(数据集)级信息。比如单个token对于预测相关的token是有指示性帮助的。Akbik等人在不同语义Embedding中使用池化操作来生成全局词表示,但是他们只考虑单个词Embedding的变化。
- 在本文中提出了一种分层次语义表示结构来提升命名实体识别模型。
- 句子层次:本文将标签嵌入进与词Embedding相同空间,标签embedding是由和word embedding计算的注意力机制获得的。理论上,认为每个词Embedding应该与它们对应的标签Embedding更近,与其他标签Embedding更远。将词Embedding和它最近标签的Embedding的相似度作为词的置信度,这个置信度表示词在句子中的重要性。本文认为高置信度的词对于句子级表示的贡献更大,即:使用word的置信度对句子中的所有word进行加权。最后,句子级别表示会被分配到每个token,并且会被加入BILSTM进行encoder训练。
- 文档层次:使用键值记忆网络来记忆所有训练数据的词Embedding及对应的隐层状态。接着用注意力机制来计算记忆模块的输出,将文档表示与原文隐层状态融合并输入解码器。本文的训练数据不仅用于训练,同时还用于预测。
相关工作
- NER
- sentence-level representation
- document-level representation
Model
本模型主要包含了一个decoder(CRF),一个sequence labeling 层,一个sentence level encoder层,一个document level encoder层。
Figure 2: The main architecture of our NER model. The sequence labeling encoder (upper right) generates representations for the decoder and updates the memory component. The sentence-level encoder (bottom right part) generates the sentence-level representation, and the memory network (left part) computes the document-level contextualized information, in which the same color represents the memory slots for the unique word.整体模型结构如下图A,模型由解码器(上)、序列标注编码器(右上)、句子级编码器(右下)、文档级编码器(左)四个模块组成。
- Baseline Model
- 使用18年提出的InNet-LSTM-NER模型作为baseline model,主要包含:representation module、sequence labeling encoder 和 decoder module
- 模型结构
- Token Representation
- 对于长度为N的序列: X = { x 1 , x 2 , . . . , x N } X=\{x_1,x_2,...,x_N\} X={x1,x2,...,xN},对于其中的每个词 x i x_i xi,我们将其词向量(word-level embedding)和字符向量(character-level)连接在一起作为其联合表征,即: x i = [ w i ; c i ] x_i = [w_i;c_i] xi=[wi;ci],其中 w i w_i wi是预训练的词向量。character-level embedding c i c_i ci是使用IntNet学习出来的,是一种根据单词的内部的字符信息训练出来一种单词向量,IntNet是一种用来学习单词内部结构表示的宽漏斗型的卷积神经网络。
- Sequence Labeling Encoder
- 由上面的表征
x
i
=
[
w
i
;
c
i
]
x_i =[w_i;c_i]
xi=[wi;ci]再拼接上Sentence-level Encoder 的输出
s
s
s,即:
[
w
i
;
c
i
;
s
]
[w_i;c_i;s]
[wi;ci;s] 作为BILSTM的输入,BILSTM的计算如下
- h i = [ h i ← ; h i → ] h_i = [{h_i}^\leftarrow;{h_i}^\rightarrow] hi=[hi←;hi→]
- h i ← = L S T M ( x i , h i − 1 ← ; θ ← ) {h_i}^\leftarrow = LSTM(x_i,{h_{i-1}}^\leftarrow;{\theta}^\leftarrow) hi←=LSTM(xi,hi−1←;θ←)
- h i → = L S T M ( x i , h i − 1 → ; θ → ) {h_i}^\rightarrow = LSTM(x_i,{h_{i-1}}^\rightarrow;{\theta}^\rightarrow) hi→=LSTM(xi,hi−1→;θ→)
- 其中 θ ← {\theta}^\leftarrow θ←和 θ → {\theta}^\rightarrow θ→为训练的参数
- 由上面的表征
x
i
=
[
w
i
;
c
i
]
x_i =[w_i;c_i]
xi=[wi;ci]再拼接上Sentence-level Encoder 的输出
s
s
s,即:
[
w
i
;
c
i
;
s
]
[w_i;c_i;s]
[wi;ci;s] 作为BILSTM的输入,BILSTM的计算如下
- Decoder
- 解码器使用条件随机场CRF。在训练时,CRF能够考虑输出标签之间的联系,在解码时使用维特比(Viterbi)算法求得最佳标注序列。
- 对于和x长度相同的预测序列标签
y
=
{
y
1
,
.
.
.
,
y
N
}
y = \{y_1,...,y_N\}
y={y1,...,yN},我们定义其得分score为
s c ( x , y ) = ∑ i = 0 N − 1 T r y i , y i − 1 + ∑ i = 1 N P i , y i s_c(x,y) = \sum_{i=0}^{N-1}Tr_{y_i,y_{i-1}}+\sum_{i=1}^{N}P_{i,y_i} sc(x,y)=i=0∑N−1Tryi,yi−1+i=1∑NPi,yi- 其中 T r y i , y i − 1 Tr_{y_i,y_{i-1}} Tryi,yi−1表示 y i y_i yi到 y i − 1 y_{i-1} yi−1的转移得分,用于衡量当前词 x i x_i xi的标签 y i y_i yi受周围词标签 y i − 1 y_{i-1} yi−1影响的程度;
- P i , y i P_{i,y_i} Pi,yi为 i t h i^{th} ith单词相应与 j t h j^{th} jth标签的在encoder时的状态预测得分,用于衡量当前词的标签 y i y_i yi受当前词 x i x_i xi 影响的程度;
- CRF定义了目标函数,对于所有可能的序列标签y的条件概率函数
p
(
y
∣
x
)
p(y|x)
p(y∣x)
p ( y ∣ x ) = e x p s c ( x , y ) ∑ y ~ ϵ y e x p s c ( x , y ~ ) p(y|x) = \frac{exp^{sc(x,y)}}{\sum_{\widetilde{y} \epsilon {y}}exp^{sc(x,\widetilde{y})}} p(y∣x)=∑y ϵyexpsc(x,y )expsc(x,y) - 在训练时尽可能最大化log概率,在decoder时使用最大得分的标签序列
y ∗ = a r g m a x y ~ ϵ y s c ( x , y ~ ) y^* = argmax_{\widetilde{y} \epsilon {y}}sc(x,\widetilde{y}) y∗=argmaxy ϵysc(x,y )
- Sentence-level Representation
- 本文使用了一个独立的BILSTM模型来学习语义特征。模型使用词表征
x
i
=
[
w
i
,
c
i
]
x_i = [w_i,c_i]
xi=[wi,ci]作为输入,将该模型的隐藏状态(hidden state)表示为
v
ϵ
R
N
×
d
s
v\epsilon{R^{N×d_s}}
vϵRN×ds,其中N为序列长度,
d
s
d_s
ds为隐藏层的大小。
由于单词对句子层次的表示具有不同的贡献度,本文采用了label embedding attention来计算整个句子的attention score,然后将隐藏状态 v ϵ R N × d s v\epsilon{R^{N×d_s}} vϵRN×ds转换为一个固定大小的句子级表示 s ϵ R d s s\epsilon{R^{d_s}} sϵRds。 - 将所有的标签类型(label type)嵌入到与word embedding相同的空间中。将label embedding表示为
l
=
[
l
1
,
l
2
,
.
.
,
l
P
]
l = [l_1,l_2,..,l_P]
l=[l1,l2,..,lP],
l
ϵ
R
P
×
d
w
l\epsilon{R^{P×d_w}}
lϵRP×dw,其中P是label的个数,
d
w
d_w
dw是word embedding 的维度数。 在训练数据上进行训练来保证每个word embedding和相应的label embedding 更加接近,与其他的label embedding相距更远,使用余弦相似度
e
(
x
i
,
l
j
)
e(x_i,l_j)
e(xi,lj)来计算
x
i
x_i
xi与
l
j
l_j
lj相近的得分,
e ( x i , l j ) = x i T l j ∣ ∣ x i ∣ ∣ ∣ ∣ l j ∣ ∣ e(x_i,l_j) = \frac{x_i^Tl_j}{||x_i||||l_j||} e(xi,lj)=∣∣xi∣∣∣∣lj∣∣xiTlj‘ - 使用CNN来捕获句子中连续连续词间相对的空间信息,通过池化层获取
i
t
h
i^{th}
ith个单词与所有标签的最大confident score:
m
i
ϵ
R
P
m_i \epsilon{R^P}
miϵRP
m i = m a x ( W T [ e ( i − k − 1 2 . . . e ( i + k − 1 2 ) ] + b ) m_i = max(W^T\begin{bmatrix}e(i-\frac{k-1}{2}\\...\\e(i+\frac{k-1}{2})\end{bmatrix}+b) mi=max(WT⎣⎡e(i−2k−1...e(i+2k−1)⎦⎤+b) - 其中 W ϵ R k W\epsilon{R^k} WϵRk, b ϵ R P b\epsilon{R^P} bϵRP,是可训练的参数,k是kernel size (核大小),max代表最大池化层max pooling。
- 整个句子的attention score(confidence得分)
β
ϵ
R
N
\beta \epsilon{R^N}
βϵRN
β = s o f t m a x ( m ) \beta = softmax(m) β=softmax(m) - 句子层次的表征
s
ϵ
R
d
s
s\epsilon{R^{d_s}}
sϵRds可以通过乘以隐藏层状态
v
ϵ
R
N
×
d
s
v\epsilon{R^{N×d_s}}
vϵRN×ds所得,weighted的attention score为:
s = ∑ i = 1 N β i v i s = \sum_{i=1}^N\beta_iv_i s=i=1∑Nβivi - 句子层级表征 s ϵ R d s s\epsilon{R^{d_s}} sϵRds和词表征拼接在一起: x i ′ = [ x i ; s ] x_i' = [x_i;s] xi′=[xi;s] 喂入sequence labeling encoder 层。训练和测试过程是相同的。
- 我们使用的标签embedding: l ϵ R P × d s l\epsilon{R^{P×d_s}} lϵRP×ds是所有标签,而不是正确标签(ground-truth label embedding)。直觉上,使使用label embedding attention是因为在句子感知表征中每个词在句子中的贡献度是不同的。每个词和它最近的标签embedding相似性可以使用word-label pair的confidence score表示。拥有更高的confidence score 的单词在句子层面的语义表示贡献贡多。
- 本文使用了一个独立的BILSTM模型来学习语义特征。模型使用词表征
x
i
=
[
w
i
,
c
i
]
x_i = [w_i,c_i]
xi=[wi,ci]作为输入,将该模型的隐藏状态(hidden state)表示为
v
ϵ
R
N
×
d
s
v\epsilon{R^{N×d_s}}
vϵRN×ds,其中N为序列长度,
d
s
d_s
ds为隐藏层的大小。
- Document-level Representation
根据 memory network,我们对每个独特的单词document-aware representation作为额外的知识库来帮助预测-
我们使用key-value memory组件M来存储document-level contextualized representation(文档级语境表征)。记忆槽为向量对 ( k 1 , v 1 ) . . . ( k m , v m ) (k_1,v_1)...(k_m,v_m) (k1,v1)...(km,vm)。在每个槽中,key表示的是word embedding w i w_i wi,value是每次sequence labeling encoder训练实例中相应的隐藏层状态 h i h_i hi。由于在同一个词在不同的训练实例下有不同的上下文,不同的语句中embedding和representation的变化,相同的单词会出现在许多不同的槽中。
-
Memory Update
- 单词嵌入在训练过程中会被微调并被更新到记忆槽的key部分。序列标注模型(sequence labeling encoder)产生的隐藏状态会更新到value部分。假如 i t h i^{th} ith的token状态在计算后改变,相应的记忆M中 i t h i^{th} ith的槽会重写。每个epoch每个记忆槽被更新一次。
-
Memory Query
- 对于句子中的 i t h i^{th} ith单词,提取出它在Memory中的所有上下文表征。通过inverted index找到大小为T的子集合(subset): ( k s u b 1 , v s u b 1 ) , . . . , ( k s u b T , v s u b T ) (k_{sub_1},v_{sub_1}),...,(k_{sub_T},v_{sub_T}) (ksub1,vsub1),...,(ksubT,vsubT),其中inverted index记录了在memory M中每个独特的单词的位置,T表示的是这个单词在训练实例中出现的次数。
- attention 操作用来计算文档级别的表示的权重。对于每个unique word,memory key
k
j
ϵ
[
k
s
u
b
1
;
.
.
.
;
k
s
u
b
T
]
k_j\epsilon[k_{sub_1};...;k_{sub_T}]
kjϵ[ksub1;...;ksubT]被用作attention key,memory value
v
j
ϵ
[
v
s
u
b
1
;
.
.
.
;
v
s
u
b
T
]
v_j \epsilon[v_{sub1};...;v_{sub^T}]
vjϵ[vsub1;...;vsubT]作为attention value,查询单词的词嵌入
w
q
i
w_{q_i}
wqi作为attention查询
q
i
q_i
qi.考虑了三种相容的计算公式
u
i
j
=
o
(
q
i
,
k
j
)
u_{ij} = o(q_i,k_j)
uij=o(qi,kj):
- 点积attention
o 1 ( q i , k j ) = q i k j T o_1(q_i,k_j) = q_ik_j^T o1(qi,kj)=qikjT - 标度点积
o 2 ( q i , k j ) = q i k j T d w o_2(q_i,k_j) = \frac{q_ik_j^T}{\sqrt{d_w}} o2(qi,kj)=dwqikjT - 余弦相似度
o 3 ( q i , k j ) = q i k j T ∣ ∣ q i ∣ ∣ ∣ ∣ k j ∣ ∣ o_3(q_i,k_j) = \frac{q_ik_j^T}{||q_i||||k_j||} o3(qi,kj)=∣∣qi∣∣∣∣kj∣∣qikjT
其 d w d_w dw表示的是word embedding的维度
- 点积attention
-
Memory Response
- document-level representation的计算公式:
α i j = e x p ( u i j ) ∑ z = 1 T e x p ( u i z ) \alpha_{ij} = \frac{exp(u_{ij})}{\sum_{z=1}^Texp(u_{iz})} αij=∑z=1Texp(uiz)exp(uij)
r i = ∑ j = 1 T α i j v j r_i = \sum_{j=1}^T\alpha_{ij}v_j ri=j=1∑Tαijvj - 由原始的隐藏层表示和文档层次的表示的融合表示
g
i
ϵ
R
d
h
g_i\epsilon{R^{d_h}}
giϵRdh被输入到CRF层进行解码,其中
d
h
d_h
dh为序列标注的隐藏层的大小
g i = λ h i + ( 1 − λ ) r i g_i = \lambda h_i + (1-\lambda)r_i gi=λhi+(1−λ)ri
其中 λ \lambda λ为超参数,表示多少文档级别的信息被使用,0表示只使用文本级别的信息,1表示抛弃所有文档级别的信息。
- document-level representation的计算公式:
-
- Token Representation
Experiment
- Dataset
本数据在三个NER数据集上进行了评估:CoNLL-2003、OntoNotes 5.0 英文命名实体识别数据集、CoNLL-2002 西班牙命名实体数据集- CoNLL-2003 English NER
22137个语句,分别被分成14987,3466和3684个语句用于训练、测试、验证。一共包含4种实体:PER、LOC、ORG、MISC。 - CoNLL-2002 Spanish NER
11752条语句,分别被分成8322,1914和1516条语句用于训练、测试、验证。一共包含4种实体:PER、LOC、ORG、MISC。 - OntoNotes 5.0
包含来自(杂志、电话交流、新闻等)76714条语句,使用了部分表示命名标注的部分,主要包括8种实体类型:PERSON、CARDINAL、LOC、PRODUCT等) - Metrics
- 本文使用了BIOES标注,标签列表如下:B,即Begin,表示开始;I,即Intermediate,表示中间;E,即End,表示结尾;S,即Single,表示单个字符;O,即Other,表示其他,用于标记无关字符**。将预测结果转变为BIO标注,计算F1得分。
- CoNLL-2003 English NER
- Setup
- Pre-trained Word Embeddings
对于CoNLL-2003和OntoNotes 5.0,使用的Golve标准预训练的100维的数据。CoNLL-2002西班牙数据集使用的是Golve获取的64维的数据。 - Character Embeddings
使用IntNet训练character embeddings,其中字符嵌入的大小为32,初始的卷积层的大小为32,其余的为16。将所有核的fiters设置大小为[3;5],卷积层的层数为7。 - Parameters
batch size的大小为10,初始化的学习率为0.015,每个epoch递减5%。sequence labeling encoder 和sentence labeling encoder的隐藏层的大小分别为256和128。对于embedding和hidden state的dropout的大小为0.5。连接document-level 和初始hidden state的 λ \lambda λ为0.3。对于每种NEs,随机选择的几百个NEs,计算word embedding 平均值作为其label embbedding。
- Pre-trained Word Embeddings
- Result and Comparisons
- 以上为在3个数据集上的训练结果:
- 在CoNLL-2003数据集上和之前的最出色的模型进行了比较,包括使用了全局信息的模型(Yang, Zhang, and Dong 2017; Zhang, Liu, and Song 2018;Qian et al. 2019; Liu et al. 2019b),模型也结合使用预训练语言模型BERT来和那些使用了额外知识的模型进行比较;
- 在CoNLL-2002 spanish数据集上的F1得分87.08,比之前最好的模型提升了0.4%;
- 前面两个的数据集都比较小,因此在数据量更大,存在更多实体类型的OntoNotes 5.0数据集上进行了更多相关实验。与之前在这个数据集上的模型结果进行了比较,在不适用BERT时,f1得分为87.98,提升了0.31。使用BERT的f1得分90.30,提升了0.59。此外,我们的模型的在没有使用BERT的情况下比使用了维基词典的模型(Ghaddar and Langlais 2018)更好。
- 以上为在3个数据集上的训练结果:
- Ablation Study
在实验中,主要加入了sentence-level representation和document-level representation,使用这两个都会对baseline 模型提升,同时加入这两种表示,会得到更大提升(0.36/0.43/0.40)
对于这两个层次的表示,采取了更多不同的策略来分析这两种层次的表示。 (Liu et al. 2019b)对所有的tokens进行平均池化来产生句子级别表征。对文档级别的表征,进行了更多的实现来验证三种融合函数。
相比与mean pooling ,label-embedding的f1得分高0.25。在三种融合函数,余弦相似度函数的表现最好,点积的表现最差。余弦相似度函数的计算了词向量的隐藏状态与单元长度,更可以解决嵌入与相似度量的不一致性。 - Memory Size And Consuming
对记忆查询时选取的每个unique word的最大记忆槽个数T与模型性能f1和运行时间做的两个实验。分析:当单词出现次数超过T词时(这些词极极有可能为停用词当T很大时)。为了公平,将所有的实验使用相同的IntNet layer,sequence labeling layer和CRF是相同。即使T为500时,该模型消耗的时间只比baseline高了19%在数据集CoNLL-2003。因此,该模型只带来了较小的时间消耗。
可以看到当T小于500时,文档级别表示会提供有用的信息,当T大于500时,该词有可能是停用词,导致模型性能下降。 - Improvement Discussion
IV:in-both-vocabulary words;OOTV:out-of-training-vocabulary words;OOEV:out-of-embedding-vocabulary words ;OOBV:out-of-both-vocabulary words
验证了模型在三个数据集上IV部分NEs的准确率,验证了句子级别表示能够提升模型在IV,OOTV,OOEV,OOBV下的性能,因此模型整体性能均得到提升。
Colunsion
本文采用层次化的上下文表示来提高命名实体识别(NER)的性能。该模型通过结合句子级表示和文档级表示充分利用了训练实例和嵌入空间的空间信息。我们考虑了词在句子中的重要性,并用嵌入注意的标签来衡量词在句子中的贡献。对于训练实例中显示的单词,我们记住这些实例的表示,并在测试过程中对这些表示进行推理。三个基准数据集的实验结果(CoNLL-2003)和Ontonotes 5.0英语数据集,CoNLL-2002西班牙语数据集)表明,我们的模型优于以前的最先进有或没有预先训练的语言模型系统。