论文原文 | End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF |
---|---|
论文信息 | ACL2016 |
论文解读 | Zhang & Hytn Chen |
更新时间 | 2020-03-22 |
命名实体识别简介
命名实体识别的目的是识别语料中人名、地名、组织机构名等命名实体。而命名实体是命名实体识别的研究主体,一般包括三大类(实体类、时间类和数字类)和七小类(人名、地名、机构名、时间、日期、货币和百分比)。一般来说时间和数字类可通过正则表达式匹配出来,其他较为复杂。
评判一个命名实体是否被正确识别包括两个方面:实体边界是否正确;实体类型是否正确。其中主要错误类型包括文本正确,类型错误;和文本边界错误,类型可能正确。
说到命名实体识别,尤其难的是中文命名实体识别。其面临以下几个主要的挑战:
1、中文不像英文那样有空格作为词语的界限标志,词在中文里本就是很模糊的概念,中文也不具备英文中字母大小写等形态指示。因此及其容易发生边界错误
2、中文有些词语在脱离上下文语境的情况下无法判断是否是命名实体,就算是,那在不同上下文语境下可能是不同类型的实体。
3、命名实体存在大量嵌套现象,如“复旦大学附属华山医院”这一组织机构名中还嵌套着同样可作为组织机构名的“复旦大学”以及“华山医院”,这种现象在组织机构名中尤其严重。
4、中文里广泛存在简化表达的现象,如“中科大”,“华建”(华东建筑集团)乃至简化表达构成的命名实体,如“中建八局”。
NER发展历史
基于规则的命名实体识别,利用手工编写的规则,将文本与规则进行匹配来识别出命名实体。例如书名号里面的词,说前面的词,大学前面的词。
基于特征模板的命名实体识别,统计机器学习方法将NER视作序列标注任务,利用大规模语料来学习出标注模型,从而对句子各个位置进行标注。NER任务中常用的模型包括生成式的隐马尔可夫模型HMM和判别式的条件随机场模型CRF。
比较流行的方法是特征模板+条件随机场的方案。
基于神经网络的命名实体识别,让模型的训练成为一个端到端的整体过程,不再依赖特征工程,是一种数据驱动的方法。最经典的就是RNN读取输入自动提取特征来预测每个位置的标签。这种方法的缺点就是对每个词打标签的过程中是独立的分类,不能利用上文已经预测好的标签,只能靠隐层传递上文信息,那这样得出的标签序列就有可能出现非法情况。例如B-PER后面跟I-LOC,针对这个问题和局限,就出现了BiLSTM-CRF的方法。
序列标注中的条件随机场
条件随机场目标就是根据一些已观察到的证据(训练样本)来对感兴趣的未知变量进行估计和推测,是概率图模型的一种。利用已知变量推测未知变量的分布称为推断,生成式模型先学习联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y)再求解条件概率分布
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X),而判别式模型直接通过训练样本计算条件概率分布
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)。CRF就是一种典型的判别式模型。
假设有两个线性链表示的随机变量X和Y,如果在给定X的情况下,Y当前时刻的状态仅与前后状态有关,即
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\left(\mathrm{y}_{\mathrm{i}} | X, y_{1}, y_{2}, \cdots y_{i-1}, y_{i+1}, \cdots y_{n}\right)=P\left(y_{i} | X, y_{i-1}, y_{i+1}\right)
P(yi∣X,y1,y2,⋯yi−1,yi+1,⋯yn)=P(yi∣X,yi−1,yi+1)
当X取值为x时,Y取值为y的概率为:
P
(
y
∣
x
)
=
1
Z
(
x
)
exp
(
∑
i
,
k
v
k
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
+
∑
i
/
u
i
s
i
(
y
i
,
x
,
i
)
)
Z
(
x
)
=
∑
y
exp
(
∑
i
k
v
k
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
+
∑
i
,
j
u
i
s
i
(
y
i
,
x
,
i
)
)
\begin{array}{l} P(\mathrm{y} | x)=\frac{1}{Z(x)} \exp \left(\sum_{i, k} v_{k} t_{k}\left(y_{i-1}, y_{i}, x, i\right)+\sum_{i /} u_{i} s_{i}\left(y_{i}, x, i\right)\right) \\ Z(x)=\sum_{y} \exp \left(\sum_{i k} v_{k} t_{k}\left(y_{i-1}, y_{i}, x, i\right)+\sum_{i, j} u_{i} s_{i}\left(y_{i}, x, i\right)\right) \end{array}
P(y∣x)=Z(x)1exp(∑i,kvktk(yi−1,yi,x,i)+∑i/uisi(yi,x,i))Z(x)=∑yexp(∑ikvktk(yi−1,yi,x,i)+∑i,juisi(yi,x,i))
这里的
t
k
t_k
tk是状态转移函数,
s
l
s_l
sl是状态特征函数,
v
k
v_k
vk和
u
l
u_l
ul是对应的权值,在给定x的情况下,计算概率最大y序列可以用维特比算法。
CRF和LSTM用于序列标注工作
LSTM:RNN系列的神经网络在序列建模上能够捕获长远的上下文信息,还具备神经网络非线性的能力,这些都是CRF做不到的。但如果输出层还存在较强的依赖关系的话,LSTM就没法对输出层进行约束和建模了
CRF:正好弥补了这个缺点,让输出序列符合一些基本依赖关系的约束。CRF不能考虑长远的上下文信息,但是能建模状态之间的转移概率(也就是依赖关系),从总体角度来看,CRF更多考虑的是整个句子局部特征的线性加权组合,优化的是一个序列而不是某个时刻的状态。
LSTM输出的维度是标签个数,假设输出矩阵为P,其中
P
i
,
j
P_{i,j}
Pi,j代表词 i 映射到标签 j 的非归一化概率。对CRF层来说,假定存在一个转移矩阵A,则
A
i
,
j
A_{i,j}
Ai,j代表了标签从 i 转移到 j 的转移概率,通过这个转移矩阵,CRF就可以使用到之前标签的信息了。
对输入序列X对应的输出标签序列y,定义打分函数score为:
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}^{n} A_{y_{i}, y_{i+1}}+\sum_{i=0}^{n} P_{i, y_{i}}
s(X,y)=i=0∑nAyi,yi+1+i=0∑nPi,yi
整个标签序列的得分等于各个位置的得分之和,每个位置的得分包括两个部分,一部分直接由LSTM的输出决定,另一部分由CRF的转移矩阵决定,最终目标就是选择出分数最大的一个序列作为最终的输出。
论文提出的模型
之前的模型例如LSTM/CNN不能有效建模标签之间的依赖关系。而BiLSTM-CRF没有使用CNN来编码字符级别的特征。对英语来说单词的形态特征也很重要,有方法在处理字符级别的特征是依旧依赖人工特征或者预处理步骤,不是一个端到端的模型。
于是文章提出的模型Bi-directional LSTM-CNNs-CRF,模型的整体结构图如下
各部分功能如下。
CNN用于捕获单词的形态学信息
以字符为单位,经过卷积和最大池化,建模单词内部的固有信息,得到单词的字符表示。
形态学特征(前后缀)在很大程度上可以表达出单词的词项等信息,并且对于一些组合单词,模型可以初步理解语义。该部分图解如下:
BiLSTM用于捕获句子的上下文信息
把单词的字符表示和词表示拼接起来,得到单词的最终表示,BiLSTM以单词为单位,建模词与词之间的联系,最终为每个位置的单词得到了融合上下文语义的向量表示。
值得一提的是,char embedding和word embedding相结合的方法在很多NLP任务中都有着不错的表现性能。
CRF用于捕获标签之间的依赖关系
如果记输入为z,预测的标签序列为y,那么条件概率:
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(\boldsymbol{y} | \mathbf{z} ; \mathbf{W}, \mathbf{b})=\frac{\prod_{i=1}^{n} \psi_{i}\left(y_{i-1}, y_{i}, \mathbf{z}\right)}{\sum_{y^{\prime} \in \mathcal{Y}(\mathbf{z})} \prod_{i=1}^{n} \psi_{i}\left(y_{i-1}^{\prime}, y_{i}^{\prime}, \mathbf{z}\right)}
p(y∣z;W,b)=∑y′∈Y(z)∏i=1nψi(yi−1′,yi′,z)∏i=1nψi(yi−1,yi,z)
根据最大对数似然来训练模型,这里的
ψ
\psi
ψ是势函数,与前面讲到的打分函数score在本质上相同。为什么呢,首先势函数表达式如下
ψ
i
(
y
′
,
y
,
z
)
=
exp
(
W
y
′
,
y
T
z
i
+
b
y
′
,
y
)
\psi_{i}\left(y^{\prime}, y, \mathbf{z}\right)=\exp \left(\mathbf{W}_{y^{\prime}, y}^{T} \mathbf{z}_{i}+\mathbf{b}_{y^{\prime}, y}\right)
ψi(y′,y,z)=exp(Wy′,yTzi+by′,y)
上式指数中的第一项就是score中的P项,第二项就是score中的A项。条件概率本质上其实就对应着下式
P
(
y
∣
x
)
=
exp
(
socre
(
x
,
y
)
)
∑
y
,
exp
(
socre
(
x
,
y
′
)
)
P(y | x)=\frac{\exp (\text {socre}(x, y))}{\sum_{y}, \exp \left(\operatorname{socre}\left(x, y^{\prime}\right)\right)}
P(y∣x)=∑y,exp(socre(x,y′))exp(socre(x,y))
总结
实验部分文章中进行了详细列举,就不多阐述了,值得一提的是文章的探索性实验,首先证明了CRF对于效果提升有着必须性。之后探索了词向量,证明:
- Glove词向量在该任务中效果最好
- NER任务比序列标注任务更加依赖于预训练的词向量
- word2vec在NER任务上效果相对较差,原因是word2vec的训练区分大小写,并且不包括许多常见的标点和数字。
分析了OOV单词对结果的影响。证明CRF可以有效缓解OOV单词所带来的负面效应,因为结构化的联合解码可以补充一部分语义缺失造成的影响。
这里的OOTV表示训练集没有的单词,OOEV表示embedding里面没有的单词,OOBV表示两个都没有的单词。