前言
本课程来自深度之眼deepshare.net,部分截图来自课程视频。
文章标题:End-to-end Sequence Labeling via Bi-directional LSTM-CNNS-CRF
基于BiLSTM-CNN-CRF的端到端序列标注
作者:Xuezhe Ma and Eduard Hovy
单位:Carnegie Mellon University(CMU)
发表会议及时间:ACL2016
在线LaTeX公式编辑器
本文是序列标注的经典baseline。
第一课 论文导读
序列标注
序列标注,即给定一个输入序列,使用模型对这个序列的每一个位置标注一个相应的标签,是一个序列-序列的过程。 序列标注是自然语言处理中最常见也是最基础的的问题,常见的子任务包括(中文)分词、命名实体识别和词性标注等等。
命名实体识别:
命名实体识别(Named Entities Recognition, NER)的目的是识别语料中人名、地名、组织机构名等命名实体。NER是信息抽取、信息检索、机器翻译、问答系统等多种自然语言处理技术必不可少的组成部分。命名实体是命名实体识别的研究主体,一般包括3大类(实体类、时间类和数字类)和7小类(人名、地名、机构名、时间、日期、货币和百分比)。评判一个命名实体是否被正确识别包括两个方面:实体边界是否正确;实体类型是否正确。其主要错误类型包括文本正确,类型错误;反之,文本边界错误,而其包含的主要实体词和类型标记也可能正确。
条件随机场:
序列标注中一般多使用BiLSTM和CRF相结合的方法,这种方法可以充分利用以上两个模型的优点,在关注上下文信息的同时,使得输出序列符合一些基本依赖关系的约束。
序列标注简介
序列标注Sequence Labeling
序列标注,即给定一个输入序列,使用模型对这个序列的每一个位置标注一个相应的标签,是一个序列-序列的过程。
序列标注是自然语言处理中最常见也是最基础的的问题,常见的子任务包括(中文)分词、命名实体识别和词性标注等等。
例子:
序列标注研究意义
序列标注作为自然语言处理中最基础的任务,是实现自然语言理解的必经之路,对消除句子歧义有着至关重要的作用。并且,很多NLP问题都可以转化为序列标注问题。时至今日中文分词和中文命名实体识别的研究依旧处于蓬勃发展的阶段。
以命名实体识别为例
命名实体识别(Named Entities Recognition,NER)的目的是识别语料中人名、地名、组织机构名等命名实体。NER是信息抽取、信息检索、机器翻译、问答系统等多种自然语言处理技术必不可少的组成部分。
命名实体是命名实体识别的研究主体,一般包括3大类(实体类、时间类和数字类)和7小类(人名、地名、机构名、时间、日期、货币和百分比)。
评判一个命名实体是否被正确识别包括两个方面:实体边界是否正确;实体类型是否正确。其主要错误类型包括文本正确,类型错误;反之,文本边界错误,而其包含的主要实体词和类型标记也可能正确。
中文命名实体识别的挑战
1.中文不像英文那样有空格作为词语的界限标志,而且“词”在中文里本来就是一个很模糊的概念,中文也不具备英文中的字母大小写等形态指示
2.中文的用字灵活多变,有些词语在脱离上下文语境的情况下无法判断是否是命名实体,而且就算是命名实体,当其处在不同的上下文语境下也可能是不同的实体类型
3.命名实体存在大量的嵌套现象,如“北京大学第三医院”这一组织机构名中还嵌套着同样可以作为组织机构名的“北京大学”,这种现象在组织机构名中尤其严重
4.中文里广泛存在简化表达现象,如“北医三院”、“国科大”,乃至简化表达构成的命名实体,如“国科大桥”。
命名实体识别的发展历史
趋势:理解语义,准确判断
基于规则的NER
基于特征模板的NER:生成模型HMM、判别模型CRF
基于神经网络的NER:Bi-LSTM-CRF、Lattice LSTM(18年出现的)
基于规则的命名实体识别
利用手工编写的规则,将文本与规则进行匹配来识别出命名实体。
例如,对于中文来说,“说”、“老师”等词语可作为人名的下文,“大学”、“医院"等词语可作为组织机构名的结尾,还可以利用到词性、句法等一系列信息帮助我们做判断。但是,在构建规则的过程中往往需要大量的语言学知识,不同语言的识别规则不尽相同,而且需要谨慎处理规则之间的冲突问题;此外,构建规则的过程费时费力、可移植性不好。
基于特征模板(统计机器学习)的命名实体识别
统计机器学习方法将NER视作序列标注任务,利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注。常用的应用到NER任务中的模型包括生成式的HMM(隐马尔科夫模型)和判别式的CRF(条件随机场)等。
比较流行的方法是特征模板+CRF的方案:特征模板通常是人工定义的一些二值特征函数,试图挖掘命名实体内部以及上下文的构成特点。对于句子中的给定位置来说,提特征的位置是一个窗口,即上下文位置。而且,不同的特征模板之间可以进行组合来形成一个新的特征模板。CRF的优点在于其为一个位置进行标注的过程中,可以利用到此前已经标注的信息,并利用Viterbi解码来得到最优序列。对句子中的各个位置提取特征时,满足条件的特征取值为1,不满足条件的特征取值为0;然后把特征喂给CRF,进而在训练阶段建模标签的转移,并在推断(inference)阶段为测试句子的各个位置做标注。
基于神经网络的命名实体识别
近年来,随着词向量的出现,神经网络成为可以有效处理许多NLP任务的模型。基于神经网络的命名实体识别模型首先将词表示为稠密的向量表示,随后将词向量序列输入到RNN中,用神经网络自动提取特征后,来预测每个位置的标签。这种方法使得模型的训练成为一个端到端的整体过程,不再依赖特征工程,是一种数据驱动的方法。
这种方法的一个缺点是对每个词打标签的过程中是独立的分类,不能直接利用上文已经预测的标签(只能靠隐状态传递上文信息),进而导致预测出的标签序列可能是非法的,例如,标签B-PER后面是不可能紧跟I-LOC的(即人名后面不能接地名),由此也就出现了Bi-LSTM-CRF的方法。
序列标注中的条件随机场
简单介绍线性链条件随机场的相关知识,不涉及具体公式推导
条件随机场Conditional Random Fields
条件随机场是机器学习中一个非常重要的模型,目标是根据一些已观察到的证据(训练样本)来对感兴趣的未知变量(类别标记)进行估计和推测,是概率图模型中的一种。
概率模型提供这样一种描述的框架,将学习任务归结于计算变量的概率分布。在概率模型中,利用已知变量推测未知变量的分布称为“推断”,其核心是如何基于可观测变量推测出未知变量的条件分布。假定所关心的变量集合为Y(标签序列),可观测变量集合为X(各个位置的单词)
“生成式”模型先学习联合概率分布P(Y,X),再求解条件概率分布P(Y|X);
“判别式”模型直接通过训练样本计算条件概率分布P(Y|X);
CRF是一种典型的判别式模型。
线性链条件随机场
设
X
=
{
x
1
,
x
2
…
,
X
n
}
X=\{x_1,x_2…,X_n\}
X={x1,x2…,Xn},
Y
=
{
y
1
,
y
2
…
,
y
n
}
Y=\{y_1,y_2…,y_n\}
Y={y1,y2…,yn}均为线性链表示的随机变量序列,若在给定随机变量序列X的情况下,随机变量序列Y的条件概率P(YIX)构成条件随机场,则需满足如下的条件:
P
(
y
i
∣
X
,
y
1
,
y
2
…
y
i
−
1
,
y
i
+
1
.
.
.
y
n
)
=
P
(
y
i
∣
X
,
y
i
−
1
,
y
i
+
1
)
P(y_i|X,y_1,y_2…y_{i-1},y_{i+1}...y_n)=P(y_i|X,y_{i-1},y_{i+1})
P(yi∣X,y1,y2…yi−1,yi+1...yn)=P(yi∣X,yi−1,yi+1)
上式的意思是y在第i个时刻的状态
y
i
y_i
yi只和它有边相连的状态有关。
变量X取值为x时,变量Y取值为y的概率:
P
(
y
∣
x
)
=
1
Z
(
x
)
e
x
p
(
∑
i
,
k
v
k
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
+
∑
i
,
l
u
l
s
l
(
y
i
,
x
,
i
)
)
P(y|x)=\frac{1}{Z(x)}exp(\sum_{i,k}v_kt_k(y_{i-1},y_i,x,i)+\sum_{i,l}u_ls_l(y_i,x,i))
P(y∣x)=Z(x)1exp(i,k∑vktk(yi−1,yi,x,i)+i,l∑ulsl(yi,x,i))
这里
Z
(
x
)
Z(x)
Z(x)其实是归一化因子,是对所有可能的y进行累加
Z
(
x
)
=
∑
y
e
x
p
(
∑
i
,
k
v
k
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
+
∑
i
,
l
u
l
s
l
(
y
i
,
x
,
i
)
)
Z(x)=\sum_yexp(\sum_{i,k}v_kt_k(y_{i-1},y_i,x,i)+\sum_{i,l}u_ls_l(y_i,x,i))
Z(x)=y∑exp(i,k∑vktk(yi−1,yi,x,i)+i,l∑ulsl(yi,x,i))
t
k
t_k
tk是状态转移函数,表示y从i-1转移到i状态的得分或概率;
s
l
s_l
sl是状态特征函数,度量y在i时刻的状态的特性;
v
k
v_k
vk和
u
l
u_l
ul是对应的权值。
在给定x的情况下,计算概率最大y序列可以用维特比算法。
P
(
Y
v
∣
X
,
Y
V
/
{
v
}
)
=
P
(
Y
v
∣
X
,
Y
n
(
v
)
)
P(Y_v|X,Y_{V/\{v\}})=P(Y_v|X,Y_{n(v)})
P(Yv∣X,YV/{v})=P(Yv∣X,Yn(v))
Y在i时刻的状态仅与其有边连接的节点有关
CRF和LSTM在序列标注上的优劣
LSTM:RNN系列的在序列建模上能够捕获长远的上下文信息,还具备神经网络拟合非线性的能力,这些都是CRF无法超越的地方。但是如果输出层之间存在较强的依赖关系的话(例如,形容词后面一般接名词),LSTM无法对这些约束进行建模,性能将受到限制。
CRF:CRF不能够考虑长远的上下文信息,但是能建模状态之间的转移概率(依赖关系)从总体的角度来看,CRF更多考虑的是整个句子的局部特征的线性加权组合,其优化的是一个序列,而不是某个时刻的状态,在这一点上CRF要优于LSTM。
LSTM+CRF:充分利用以上两个模型的优点,在关注上下文信息的同时,使得输出序列符合一些基本依赖关系的约束。
序列标注中的条件随机场
Bi-LSTM层的输出维度是标签个数,假设其输出矩阵为P,其中
P
i
,
j
P_{i,j}
Pi,j代表词
w
i
w_i
wi映射到标签
t
a
g
i
tag_i
tagi的非归一化概率。对于CRF层来说,我们假定其中存在一个转移矩阵A,则
A
i
,
j
A_{i,j}
Ai,j代表标签从
t
a
g
i
tag_i
tagi转移到
t
a
g
j
tag_j
tagj的转移概率。
对于输入序列X对应的输出标签序列y,定义打分函数为:
s
(
X
,
y
)
=
∑
i
=
0
n
A
y
i
,
y
i
+
1
+
∑
i
=
0
n
P
i
,
y
i
s(X,y)=\sum_{i=0}^nA_{y_i,y_{i+1}}+\sum_{i=0}^nP_{i,y_i}
s(X,y)=i=0∑nAyi,yi+1+i=0∑nPi,yi
目标:选择出分数最大的一个序列作为最终的输出。
前期知识储备
序列标注:了解序列标注的概念和其对应的子任务
命名实体识别:了解任务目标和当前主流的发展方向,了解中文命名实体识别的挑战
CRF:掌握条件随机场的基本原理,有兴趣的同学可以课下去推导CRF的相关公式
CNN/LSTM:掌握卷积神经网络和长短时记忆网络的基本原理。
第二节 论文精读
论文整体框架
0.摘要
1.引言
2.3.网络架构与训练
4.实验
5.相关工作(本文写的最好的部分。)
6.结论
传统方法
单词级别的BiLSTM-CRF模型
单词级别的命名实体识别模型,通常使用BIESO-Type的两段式标注规范。
对于第一段,Begin、Inside、End分别代表实体的开始、中间、结束位置,Single代表单字实体、Other代表非实体。
对于第二段,Type包括PER、LOC、ORG的分别对应则人名、地名、机构名。(除了三大类还有七小类)
输入层:以句子为单位,将一个含有n个单词的句子记作
x
=
(
x
1
,
x
2
…
,
x
n
)
x=(x_1,x_2…,x_n)
x=(x1,x2…,xn),利用预训练或随机初始化的向量矩阵将句子中的每个词映射为低维稠密的词向量。
编码层:模型的第二层是BiLSTM层,用于自动提取句子特征。将一个句子的各个单词依次作为BiLSTM各个时间步的输入,将正向LSTM和反向LSTM拼接,得到每个位置的隐层状态
c
i
c_i
ci表示:
c
i
=
[
l
i
→
;
r
i
←
]
c_i=[\overrightarrow{l_i};\overleftarrow{r_i}]
ci=[li;ri]
l
i
→
=
L
S
T
M
→
(
x
i
)
,
r
i
←
=
L
S
T
M
←
(
x
i
)
\overrightarrow{l_i}=\overrightarrow{LSTM}(x_i),\overleftarrow{r_i}=\overleftarrow{LSTM}(x_i)
li=LSTM(xi),ri=LSTM(xi)
把BiLSTM的结果接入一个线性层,将隐状态向量
c
i
c_i
ci映射到k维得到
p
i
p_i
pi,k是标注集的标签数,这样我们就得到了自动提取的句子特征,记作矩阵:
P
=
(
p
1
,
p
2
…
,
p
n
)
P=(p1,p2…,p_n)
P=(p1,p2…,pn)
可以把
p
i
p_i
pi的每一维
p
i
j
p_{ij}
pij,视为将
x
i
x_i
xi分类到第j个标签的打分值,按照传统方法,可以直接接softmax进行分类,但是这样对各个位置进行标注时无法利用已经标注过的信息,所以接下来将接入一个CRF层来进行标注。
CRF层:CRF层的参数是一个(k+2)×(k+2)的矩阵A,
A
i
j
A_{ij}
Aij表示从第i个标签到第个标签的转移得分,进而在为一个位置进行标注的时候可以利用此前已经标注过的标签。k加2是因为要给句子添加一个起始状态和一个终止状态。如果记一个长度等于n的句子标签序列
y
=
(
y
1
,
y
2
…
,
y
n
)
y=(y_1,y_2…,y_n)
y=(y1,y2…,yn),那么模型对于句子x的标签序列为y的打分为:
s
c
o
r
e
(
x
,
y
)
=
∑
i
=
1
n
P
i
,
y
i
+
∑
i
=
1
n
+
1
A
y
i
−
1
,
y
i
score(x,y)=\sum_{i=1}^nP_{i,y_{i}}+\sum_{i=1}^{n+1}A_{y_{i-1},y_i}
score(x,y)=i=1∑nPi,yi+i=1∑n+1Ayi−1,yi
上式中:整个标签序列的得分等于各个位置的得分之和,而每个位置的得分包括两部分,一部分直接由LSTM的输出决定§,另一部分由CRF的转移矩阵决定(A),最后我们利用softmax来得到归一化概率:
P
(
y
∣
x
)
=
e
x
p
(
s
c
o
r
e
(
x
,
y
)
)
∑
y
′
e
x
p
(
s
c
o
r
e
(
x
,
y
′
)
)
P(y|x)=\frac{exp(score(x,y))}{\sum_{y'}exp(score(x,y'))}
P(y∣x)=∑y′exp(score(x,y′))exp(score(x,y))
模型训练最大化对数似然函数
l
o
g
P
(
y
∣
x
)
logP(y|x)
logP(y∣x)模型预测使用Viterbi算法来求解最优路径。
论文提出的模型
论文动机
LSTM-LSTM/CNN:不能够有效建模标签之间的依赖关系。
BiLSTM-CRF:有的方法没有使用CNN来编码字符级别的特征,对于英语来说,单词的形态特征也是非常重要的。有的方法在处理字符级别的特征时,依旧依赖于一些人工特征或者预处理步骤,不是一个真正的端到端模型。
解决方案:
模型结构
CNN层用于捕获单词的形态学信息(就是下图中词向量转Char Representation那部分)
BiLSTM层用于捕获句子的上下文信息
CRF层用于捕获标签之间的依赖关系
CNN层用于捕获单词的形态学信息
以字符为单位,经过卷积和最大池化,建模单词内部的固有信息,得到单词的字符表示。形态学特征(单词的前缀、后缀等)在很大程度上可以表达出单词的词项等信息,并且对于一些组合单词,模型可以初步理解语义。
BiLSTM层用于捕获句子的上下文信息
把单词的字符表示和词表示拼接起来,得到单词的最终表示,BiLSTM以单词为单位,建模词与词之间的联系,最终为每个位置的单词得到融合了上下文语义的向量表示。
这种char embedding和word embedding相结合的方法在很多NLP任务中都有着不错的表现性能。
CRF层用于捕获标签之间的依赖关系
把输入记作
z
=
{
z
1
,
z
2
…
,
z
n
}
z=\{z_1,z_2…,z_n\}
z={z1,z2…,zn},预测的标签序列记作
y
=
{
y
1
y
2
…
,
y
n
}
y=\{y_1y_2…,y_n\}
y={y1y2…,yn},计算条件概率:
p
(
y
∣
z
;
W
,
b
)
=
∏
i
=
1
n
ψ
i
(
y
i
−
1
,
y
i
,
z
)
∑
y
′
∈
y
(
z
)
∏
i
=
1
n
ψ
i
(
y
i
−
1
′
,
y
i
′
,
z
)
p(y|z;W,b)=\frac{\prod_{i=1}^n\psi_i(y_{i-1},y_i,z)}{\sum_{y'\in y(z)}\prod_{i=1}^n\psi_i(y'_{i-1},y'_i,z)}
p(y∣z;W,b)=∑y′∈y(z)∏i=1nψi(yi−1′,yi′,z)∏i=1nψi(yi−1,yi,z)
根据最大对数似然来训练模型,预测时使用维特比算法。这里的
ψ
\psi
ψ(念佛赛)是势函数,与我们前文讲到的score在本质上是相同的。下面给出解释:
指数连乘可以拆分成累加的形式:
e
a
+
b
=
e
a
⋅
e
b
e^{a+b}=e^a \cdot e^b
ea+b=ea⋅eb
实验和结果
实验设置
词向量:
Glove:100维,维基百科
Senna:50维,维基百科
Word2Vec:300维,谷歌新闻
Random:100维,随机生成
字向量:
Random:30维,随机生成
一般来说,词向量和字向量相结合的时候,字向量维度一般都会小于词向量维度
优化算法:
SGD
AdaDelta
Adam
RMSProp
Early Stopping
Fine Tuning
Dropout
数据集
POS Tagging
WSJ:共包含45种词性标签(按照宾州树库的标注和分类)
NER
CoNLL 2003:共包含四类(人名、地名、机构名、其他)实体
主实验
对比1-2行,BRNN不如BLSTM,一般来说,LSTM是要优于RNN的。
对比2-4行,仅BLSTM效果不好,BLSTM-CNN效果只是略有提升,说明捕获单词的内部信息是有用的。
第4行(这里应该是BLSTM-CNN-CRF,原文有笔误),本文推荐的模型组合在两个任务上都取得了最好的效果,说明进一步捕获标签之间的联系是至关重要的。
这里的实验设计有点意思,按模块增加一级级的来设计的实验。
和传统方法的对比
结论和上面相似。
但是本文提出的模型不需要人工特征和数据预处理,是一个真正的端到端模型。
探索性实验-词向量。
1.Glove词向量效果最好
2.NER任务比POS任务更依赖于预训练的词向量
3.Word2vec在NER任务上效果相对较差,原因是word2vec的训练区分大小写,并且不包括许多常见的标点和数字。
探索性实验-Dropout
在训练时使用Dropout效果会有提升,一个可能的解释是这种方法可以防止过拟合。
错误分析
OOTV:Out-of-training
OOEV:Out-of-embedding
OOBV:Out-of-both
CRF可以有效缓解OOV(out-of-vocabulary)单词所带来的负面效应(结构化的联合解码,可以补充一部分语义缺失造成的影响)。
讨论和总结
论文主要贡献
A.提出了一种端到端的神经网络框架来实现序列标注任务
B.在两个基础的NLP任务(NER、POS Tagging)的公开数据集上进行了实验评测
C.达到了当前的SOTA,并且实现了一个真正的端到端模型
总结
整体:文章其实是对现有工作的融合,为了凸显贡献,全文都在强调端到端的重要性,不需要人工特征、数据预处理和后处理,并且不需要一些面向任务的资源。
相关工作:简述论文背景,定义问题,发现当前解决问题方法弊端,提出改进方案,强调差异。
实验:充分考虑各种可能性,探讨不同情况下模型的性能,并且对结果展开一系列的可解释性分析。
相关论文
- Lample, Guillaume. Neural architectures for named entity recognition.
In NAACL.2015. - Zhiheng Huang. Bidirectional LSTM-CRF models for sequence tagging. arXiv.2015.百度出品