Bidirectional LSTM-CRF Models for Sequence Tagging

参考链接

参考论文:https://arxiv.org/pdf/1508.01991v1.pdf
代码:https://github.com/GlassyWing/bi-lstm-crf

概述

  • 这篇论文主要讲的是:基于LSTM的序列标注模型(sequence tagging model)
  • 主要介绍:BI-LSTM-CRF模型
  • BI-LSTM-CRF模型的优点:
    • A. 可以有效的使用输入前后的特征信息,因为它使用双向的LSTM模型
    • B. 可以使用句子级别标记信息,因为使用了CRF层。
    • C. 该模型也具有强壮的健壮性,对词向量没有太大的依赖性。

模型架构

  • 主要描述模型:LSTM, BI-LSTM, CRF, LSTM-CRF 和BI-LSTM-CRF.四个模型

LSTM Networks

  • RNN在命名实体识别的应用如下图所示:
    其中 x x x为输入层, h h h是隐藏层, y y y是输出标签;在命名实体识别的任务中输入的每一个词都有一个标签,标签的类型有: O = o t h e r O=other O=other P E R = P e r s o n PER=Person PER=Person L O C = L o c a t i o n LOC=Location LOC=Location O R G = O r g a n i z a t i o n ORG= Organization ORG=Organization M I S C = M i s c e l l a n e o u s MISC=Miscellaneous MISC=Miscellaneous B − B- B表示表示开始位置 I − I- I表示中间位置。
  • RNN的内部运算公式: h ( t ) = f ( U x ( t ) + W h ( t − 1 ) ) h(t)=f(Ux(t)+Wh(t-1)) h(t)=f(Ux(t)+Wh(t1)) y ( t ) = g ( V h ( t ) ) y(t)=g(Vh(t)) y(t)=g(Vh(t)) U , W U,W U,W V V V为模型参数。 f f f s i g m o i d sigmoid sigmoid激活函数, g g g s o f t m a x softmax softmax激活函数: f ( z ) = 1 1 − e − z f(z)=\frac{1}{1-e^{-z} } f(z)=1ez1 g ( z m ) = e z m ∑ k e z k g(z_m )=\frac{e^{z_m }}{∑_ke^{z_k } } g(zm)=kezkezm
  • 在这篇论文中我们使用LSTM(Long Short-Term Memory)来进行序列标注。LSTM单元图如下:
  • LSTM的计算公式如下: i t = σ ( W x i x t + W h i h t − 1 + W c i c t − 1 + b i ) = σ ( W i [ x t , h t − 1 , c t − 1 ] + b i ) i_t=σ(W_{xi} x_t+W_{hi} h_{t-1}+W_{ci} c_{t-1}+b_i )=σ(W_i [x_t,h_{t-1},c_{t-1}]+b_i ) it=σ(Wxixt+Whiht1+Wcict1+bi)=σ(Wi[xt,ht1,ct1]+bi) f t = σ ( W x f x t + W h f h t − 1 + W c f c t − 1 + b f ) = σ ( W f [ x t , h t − 1 , c t − 1 ] + b f ) f_t=σ(W_{xf} x_t+W_{hf} h_{t-1}+W_{cf} c_{t-1}+b_f )=σ(W_f [x_t,h_{t-1},c_{t-1}]+b_f ) ft=σ(Wxfxt+Whfht1+Wcfct1+bf)=σ(Wf[xt,ht1,ct1]+bf) o t = σ ( W x o x t + W h o h t − 1 + W c 0 c t − 1 + b 0 ) = σ ( W 0 [ x t , h t − 1 , c t − 1 ] + b 0 ) o_t=σ(W_{xo} x_t+W_{ho} h_{t-1}+W_{c0} c_{t-1}+b_0 )=σ(W_0 [x_t,h_{t-1},c_{t-1}]+b_0 ) ot=σ(Wxoxt+Whoht1+Wc0ct1+b0)=σ(W0[xt,ht1,ct1]+b0) c t = f t c t − 1 + i t t a n h ⁡ ( W x c x t + W h c h t − 1 + b c ) = f t c t − 1 + i t t a n h ⁡ ( W c [ x t , h t − 1 ] + b c ) c_t=f_t c_{t-1}+i_t tan h⁡(W_{xc} x_t+W_{hc} h_{t-1}+b_c )=f_t c_{t-1}+i_t tanh⁡(W_c [x_t,h_{t-1}]+b_c) ct=ftct1+ittanh(Wxcxt+Whcht1+bc)=ftct1+ittanh(Wc[xt,ht1]+bc) h t = o t t a n h ⁡ ( c t ) h_t=o_t tanh⁡(c_t) ht=ottanh(ct) σ σ σ为logistic sigmoid函数, i , f , o i, f, o i,f,o c c c分别是:输入门、遗忘门、输出门和单元向量(cell vectors)他们的大小等于隐藏层状态向量h的大小。下图表示的是LSTM应用于标注模型:

Bidirectional LSTM Networks

  • 论文在序列标注中使用双向的LSTM网络:

CRF networks

  • 在预测当前标签时,有两种不同的方法可以利用邻近标签信息。
    • 第一种:预测每个时刻的标签分布,然后使用类似波束的(beam-like)解码来找到最佳标签序列。
    • 第二种:关注句子级别而不是单个位置,这就是条件随机场(CRF)模型。如下图所示:

LSTM-CRF networks

  • 我们将LSTM network 和CRF network 结合起来形成了LSTM-CRF模型。如下图所示:
  • 该网络可以通过LSTM层有效地使用过去的输入特征,并通过CRF层有效地使用句子级标签信息。通过CRF层,我们可以有效地使用过去和将来的标签来预测当前标签。
  • CRF层其实质就是一个状态转移矩阵
  • 整个模型的计算过程:
    • 我们用 [ x ] 1 T [x]_1^T [x]1T表示输出句子,长度为 T T T
    • 我们假设标签数为 L L L
    • f θ ( [ x ] 1 T ) ∈ R L × T f_θ ([x]_1^T )∈R^{L×T} fθ([x]1T)RL×T表示 L S T M LSTM LSTM网络输出矩阵,其第 i i i列表示的就是句子中第 i i i个最后的标签概率分布。
    • [ f θ ] i , t [f_θ]_{i,t} [fθ]i,t表示 f θ ( [ x ] 1 T ) ∈ R L × T f_θ ([x]_1^T )∈R^{L×T} fθ([x]1T)RL×T ( i , t ) (i,t) (i,t)位置的元素,表示第 t t t个词经过 L S T M LSTM LSTM输出第 i i i个标签的概率。
    • CRF层我们用 A ∈ R L × L A∈R^{L×L} ARL×L表示。 [ A ] i , j [A]_{i,j} [A]i,j表示的是第 i i i标签到第 j j j个标签的转移分数(概率)。
    • 这样对每个句子 [ x ] 1 T [x]_1^T [x]1T我们得到了一个类似全连接神经网络的分数网络:网络的层数= T T T(句子长度);每层的神经元个数= L L L(标签个数);相邻两层神经网的链接权重都是矩阵 A A A。这样句子的每个标签序列都都对应这个网络的一条路径,路径上的权重和就是这个标签序列的分数。模型的预测就是分数最高的路径所对应的标签序列。
    • 求最分数最高路径可以通过动态规划轻松的求得。下图形象的描述了整个过程:

BI-LSTM-CRF networks

  • 我们将双向的LSTM network 和CRF network 结合起来形成了BI-LSTM-CRF模型。如下图所示:
    模型运算过程与LSTM-CRF模型一致。不同的是:BILSTM-CRF除了能够使用过去输入特征和句子级别标记信息之外,还可以使用将来输入特征。

总结: 序列标注(深度学习+ 条件随机场)

参考博客:https://spaces.ac.cn/archives/5542

softmax层:

  • 序列标注可以简单理解为是给序列中的每一词都进行分类,既然是分类,很自然想到将这个序列用CNN或者RNN进行编码后,接一个全连接层用softmax激活,如下图所示:

条件随机场CRF:

  • CRF主要用于序列标注问题,在序列标注中当我们设计标签时,比如用s、b、m、e的4个标签来做字标注法的分词,目标输出序列本身会带有一些上下文关联,比如s后面就不能接m和e,等等。逐标签softmax并没有考虑这种输出层面的上下文关联。而CRF就是用来将目标序列本身的一下关联引入模型的方式。如果我们希望CNN或RNN模型能自己学到这些关联,有时候会“强模型所难”,而CRF则更直接一点,它将输出层面的关联分离了出来,这使得模型在学习上更为“从容”:

条件随机场CRF:

  • 在序列标注中,假如一个输入有n帧,每一帧的标签有k种可能性,那么理论上就有 k n k^n kn中不同的输出。我们可以将它用如下的网络图进行简单的可视化。在下图中,每个点代表一个标签的可能性,点之间的连线表示标签之间的关联,而每一种标注结果,都对应着图上的一条完整的路径。

  • 而在序列标注任务中,我们的正确答案是一般是唯一的。比如“今天天气不错”,如果对应的分词结果是“今天/天气/不/错”,那么目标输出序列就是bebess,除此之外别的路径都不符合要求。换言之,在序列标注任务中,我们的研究的基本单位应该是路径,我们要做的事情,是从 k n k^n kn条路径选出正确的一条,那就意味着,如果将它视为一个分类问题,那么将是 k n k^n kn类中选一类的分类问题!

  • 具体来讲,在CRF的序列标注问题中,我们要计算的是条件概率: P ( y 1 , y 2 , … , y n │ x 1 , x 2 , … , x n ) = P ( y 1 , y 2 , … , y n │ X ) P(y_1,y_2,…,y_n│x_1,x_2,…,x_n )=P(y_1,y_2,…,y_n│X) P(y1,y2,,ynx1,x2,,xn)=P(y1,y2,,ynX)

  • 为了得到这个概率的估计,CRF做了两个假设:

    • 假设一 :该分布是指数族分布 :
      这个假设意味着存在函数 f ( y 1 , y 2 , … , y n , X ) f(y_1,y_2,…,y_n,X) f(y1,y2,,yn,X),使得: P ( y 1 , y 2 , … , y n │ X ) = 1 Z ( X ) e x p ⁡ ( f ( y 1 , y 2 , … , y n , X ) ) P(y_1,y_2,…,y_n│X)=\frac{1}{Z(X)}exp⁡(f(y_1,y_2,…,y_n,X)) P(y1,y2,,ynX)=Z(X)1exp(f(y1,y2,,yn,X))其中 Z ( x ) Z(x) Z(x)是归一化因子,因为这个是条件分布,所以归一化因子跟 x x x有关。这个 f f f函数可以视为一个打分函数,打分函数取指数并归一化后就得到概率分布。 Z ( X ) = ∑ y 1 , y 2 , … , y n e x p ⁡ ( f ( y 1 , y 2 , … , y n , X ) ) Z(X)=∑_{y_1,y_2,…,y_n}exp⁡(f(y_1,y_2,…,y_n,X)) Z(X)=y1,y2,,ynexp(f(y1,y2,,yn,X))
    • 假设二:输出之间的关联仅发生在相邻位置
      这个假设意味着 f ( y 1 , y 2 , … , y n , X ) f(y_1,y_2,…,y_n,X) f(y1,y2,,yn,X)可以更进一步简化为: f ( y 1 , y 2 , … , y n , X ) = h ( y 1 , X ) + g ( y 1 , y 2 , X ) + … + g ( y n − 1 , y n , X ) + h ( y n , X ) f(y_1,y_2,…,y_n,X)=h(y_1,X)+g(y_1,y_2,X)+…+g(y_{n-1},y_n,X)+h(y_n,X) f(y1,y2,,yn,X)=h(y1,X)+g(y1,y2,X)++g(yn1,yn,X)+h(yn,X)这也就是说,现在我们只需要对每一个标签和每一个相邻标签对分别打分,然后将所有打分结果求和得到总分。

  • 尽管已经做了大量简化,但一般来说还是过于复杂,难以求解。于是考虑到当前深度学习模型中,RNN或者层叠CNN等模型已经能够比较充分捕捉各个 y y y与输出 x x x的联系,因此我们可以用神经网络来实现 f f f。这样麻烦的问题只有 g g g了,于是我们继续简化 g g g,不妨考虑函数 g g g x x x无关,那么: f ( y 1 , y 2 , … , y n , X ) = h ( y 1 , X ) + g ( y 1 , y 2 ) + … + g ( y n − 1 , y n ) + h ( y n , X ) f(y_1,y_2,…,y_n,X)=h(y_1,X)+g(y_1,y_2 )+…+g(y_{n-1},y_n )+h(y_n,X) f(y1,y2,,yn,X)=h(y1,X)+g(y1,y2)++g(yn1,yn)+h(yn,X)

  • 到这里我们就可以可以将深度学习模型和CRF进行分工了, h ( y t , X ) h(y_t,X) h(yt,X)是输入序列生成 y t y_t yt的打分函数这个可以通过RNN或CNN加上softmax层产生。 g ( y t , y t + 1 ) g(y_t,y_{t+1}) g(yt,yt+1)是一个给相邻目标序列打分的函数它就是CRF,我们一般用以可以训练的 k × k k×k k×k的矩阵 G G G来实现, k k k是标签数。因此概率分布变为: P ( y 1 , y 2 , … , y n │ X ) = 1 Z ( X ) e x p ⁡ { h ( y 1 , X ) + ∑ j = 1 n + 1 [ g ( y j , y j + 1 ) + h ( y j + 1 , X ) ] } P(y_1,y_2,…,y_n│X)=\frac{1}{Z(X)}exp⁡\{ h(y_1,X)+\sum_{j=1}^{n+1}[g(y_j,y_{j+1} )+h(y_{j+1},X)]\} P(y1,y2,,ynX)=Z(X)1exp{h(y1,X)+j=1n+1[g(yj,yj+1)+h(yj+1,X)]} Z ( X ) = ∑ y 1 , y 2 , … , y n e x p ⁡ { h ( y 1 , X ) + ∑ j = 1 n + 1 [ g ( y j , y j + 1 ) + h ( y j + 1 , X ) ] } Z(X)=∑_{y_1,y_2,…,y_n}exp⁡\{ h(y_1,X)+\sum_{j=1}^{n+1}[g(y_j,y_{j+1} )+h(y_{j+1},X)]\} Z(X)=y1,y2,,ynexp{h(y1,X)+j=1n+1[g(yj,yj+1)+h(yj+1,X)]}其中 h h h由神经网络最后输出, g g g则直接通过查找矩阵 G G G得到。

  • 损失函数:对数概率函数 − l o g P ( y 1 , … , y n ∣ x ) −logP(y_1,…,y_n|x) logP(y1,,ynx) − { h ( y 1 ; x ) + ∑ k = 1 n − 1 [ g ( y k , y k + 1 ) + h ( y k + 1 ; x ) ] } + l o g Z ( x ) −\{h(y1;x)+∑_{k=1}^{n−1}[g(y_k,y_{k+1})+h(y_{k+1};x)]\}+logZ(x) {h(y1;x)+k=1n1[g(yk,yk+1)+h(yk+1;x)]}+logZ(x)其中第一项是原来概率式的分子的对数,它是给标签序列打分,虽然它看上去挺迂回的,但是并不难计算。真正的难度在于分母的对数 l o g Z ( x ) logZ(x) logZ(x)这一项;在这里它需要我们对所有可能的路径的打分进行指数求和,而我们前面已经说到,这样的路径数是指数量级的 k n k^n kn,因此直接来算几乎是不可能的。

  • 事实上,归一化因子难算,几乎是所有概率图模型的公共难题。幸运的是,在CRF模型中,由于我们只考虑了临近标签的联系(马尔可夫假设),因此我们可以递归地算出归一化因子,这使得原来是指数级的计算量降低为线性级别。具体的说来我们只要出下图所有路径的总和:

    其可以在 O ( K × ( K + L ) ) O(K×(K+L)) O(K×(K+L))的时间复杂度求出来,K为标签个数,L为句子长度。

  • 求最大得分是路径的方法使用动态规划

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值