详解BILSTM-CRF模型结构进行命名实体识别

命名实体识别(NER)是什么?

识别出文本中具有特定意义的实体字符串边界,并归类到预定义类别,传统识别时间、机构名、地点等,但随着应用发展为识别特殊预定义类别。

命名实体识别发展历程

早期使用基于规则和字典的方法进行命名实体识别,后来使用机器学习方法(如:HMM、CRF等),后来使用深度学习的方法(如BILSTM-CRF、Lattice-LSTM-CRF、CNN-CRF等),近期流行使用注意力学习机制、迁移学习、半监督学习进行命名实体识别任务。本节主要讲述使用BILSTM-CRF进行命名实体识别。文章基于百度研究院发布的论文《Bidirectional LSTM-CRF Models for Sequence Tagging》进行介绍。

BILSTM-CRF模型结构

这是一个BILSTM-CRF模型结构图,具体每步可理解为:
1.句子转化为字词向量序列,字词向量可以在事先训练好或随机初始化,在模型训练时还可以再训练。
2.经由BILSTM特征提取,输出是每个单词对应的预测标签。
3.经CRF层约束,会对输出的分数进行校正,输出是最优标签序列。

Step1:Word Embedding

定义:

Word Embedding是一个基于分布式假设的预训练模型。它假设两个语义相近的词在高维空间中距离更近。

方法流程:

1.将一个含有n个词的句子记作:x = (x1,x2,…xn)。
2.利用预训练的embedding矩阵将每个字映射为低维稠密的向量。

重点理解:

预训练词向量为何可以提高模型泛化能力?
因为深度学习能把我们现实事物表示的好,它本身是一种表示学习,而Word Embedding能把字词表示得很好,用到深度学习模型中就可以提高模型的泛化。举个例子理解一下,安徽在NER中被识别为地名,那么跟安徽类似的比如江苏出现在文本中,因为我们已经训练了安徽的embedding它很容易被识别成location,那么江苏的embedding跟安徽的embedding比较相近,那么经过相同的前向传播,江苏为location的概率比较大。因此,在训练集中你只见到了安徽,在测试集中就可以泛化到江苏了。因此预训练词向量可以提高模型泛化能力。

Step2:BILSTM提取文本特征

方法流程:

1.将一个句子各个字的embedding序列作为双向LSTM各个时间步的输入。
2.将正反向输出的隐状态进行拼接,得到完整的隐状态序列。

RNN

RNN不同于DNN,CNN网络之处在于它赋予了网络对于前面内容的"记忆能力",NER任务的起初,是使用RNN计算预测标签序列之间的依赖关系并完成标注任务。
如图所示:在t时刻隐藏层和输出层的如公式(1)和(2)所示:
St = f(Uxt + WSt-1) (1)
Ot = g(VSt) (2)
Ot = g(VSt) = g(V(f(Uxt + WSt-1)) = g(V f(Uxt + Wf(Uxt-1 + WSt-2)))) =…(3)
由公式(3)可知,网络越深,越容易出现梯度消失和梯度爆炸问题。展开之后,梯度更新,也就是回传的时候,可能第100个梯度就影响不到第0个了。也就是,这种累乘的结构,有着天然的缺陷。于是后面提出了LSTM,解决RNN梯度消失和梯度爆炸问题。
在这里插入图片描述

LSTM

LSTM引入了门记忆机制,使用记忆细胞来捕获长距离依赖。LSTM在每个时刻都选择性地改变记忆,从而有效解决RNN的长距离依赖。总的来说,LSTM通过训练过程可以学到记忆哪些信息和遗忘哪些信息。
在这里插入图片描述
ft是遗忘门,it是输入门,ot是输出门,他们都是来源于当前的输入xt,以及上一步的隐状态ht-1,b是偏置,他们都通过非线性的sigmoid函数得到一个-1~1之间值的向量。
ct波浪线是t时刻临时的cell,它来源于当前的输入xt,以及上一步的隐状态ht-1,b是偏置,xt和ht-1都有对应的权重,然后通过一个非线性tanch的函数,得到一个-1-1之间数值向量。
ct是当前cell要存储的信息。它是通过遗忘门和输入门来进行控制的。遗忘门ft控制之前的要遗忘掉多少,输入门cell控制当前的临时cell有多少要记到这条主线上来,经过非线性的sigmoid函数得到一个-1-1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。举个例子:比如有一个笔记本,看到一本书我们就把好的内容记进笔记本,但是笔记本容量有限,读着读着我们发现有比之前笔记本里内容更重要的内容,于是就把之前的遗忘掉,然后写入新的内容。
LSTM把累乘变成了加法表示,减缓了梯度消失和梯度爆炸问题,缓解了RNN的长距离依赖问题。

从LSTM到BILSTM

综上所知,LSTM通过记忆元件来解决长距离依赖问题,但LSTM是一种前向传播算法,因此对命名实体识别而言,需要综合反向的LSTM进行学习,即BILSTM。
1.一个LSTM网络计算前向的隐特征(从左到右)。
2.另一个LSTM网络计算后向的隐特征(从右到左)。
3.我们把这两个LSTM输出的结果进行拼接,就得到双向LSTM网络,用于特征提取。
双向LSTM的好处是什么呢?
它可以高效的表示出这个单词在上下文中的含义,在标准Bi-LSTM中,输出通过接入SoftMax输出层预测结点间的分类标签。如下图所示,前向的LSTM依次输入"我",“爱”,“中国”,得到三个向量(hL0,hL1,hL2),后向的LSTM依次输入"中国",“爱”,“我”,得到三个向量(hR0,hR1,hR2),最后将前向和后向的隐向量进行拼接得到{[hL0,hR0],[hL1,hR1],[hL2,hR0]},即(h0,h1,h2)。
在这里插入图片描述

Step3:得到P矩阵

方法流程:

1.将完整的隐状态序列接入线性层,从n维映射到k维,其中k是标注集的标签数。
2.从而得到自动提取的句子特征,记作矩阵P=(p1,p2,…pn),注意该矩阵是非归一化矩阵。其中pi表示该单词对应各个类别的分数。
如图所示,双向BILSTM输出矩阵1.5(B-Person),0.9(L-Person),0.1(B-Organization),0.08(I-Organization),这些分数将是CRF层的输入(图中黄色部分即为P矩阵)。

发射分数

发射分数,来自BILSTM的输出。用xi,yj代表发射分数,i是单词的位置索引,yj是类别的索引。如计算xi=1,yj=2 = xw1,B-Organization = 0.1。是不是通过P矩阵找到每一个词对应的发射分数最大的值,我们就可以得到当前词所对应的标签。即,w0的标签为B-Person,w1的标签为I-Person…,这样就可以得到标签了。

为何还要加CRF来做NER呢?

因为我们怕BILSTM学到的发射分数会与实际有偏差,于是我们需要引入CRF对其进行优化。
在这里插入图片描述
左图可以看出,在BIO模式下,每一步对应的标签是B-Person,I-Person,O,B-Organization,O。这个P矩阵是完美的,这是模型表现好的时候。假设我们学到的发射分数P矩阵不是很完美,如右图所示,模型学到的第一步的标签是I-Organization,后面跟着I-Person,很明显,这在BIO模式下是不合理的,因为I-Person前面应该跟着B开头的标签,而不是I-Organization。正好CRF可以对标签之间进行约束的,标签之间是有依赖的,使用CRF可以可以减少出错的情况。

Step4:CRF的引入

引入原因:

NER是一类特殊的任务,因为表征标签的可解释性序列"语法"强加了几个硬约束,可能的约束比如:NER的开头应该是B-而不是I-。而CRF层能够学习到句子的前后依赖,从而加入了一些约束来保证最终预测结果有效。

转移分数

转移分数是来自CRF层可以学到的转移矩阵。
转移矩阵是BILSTM-CRF模型的一个参数,可随机初始化转移矩阵的分数,然后在训练中更新。
在这里插入图片描述

读图可知,由B-Person转移到I-Person的概率为0.9,但转移到I-Organization的概率为0.0006。

Step5:最终结果的计算

CRF考虑前后标记依赖约束,综合使用标记状态转移概率作为评分:

上式意为对整个序列x,整个序列标注的打分等于各个位置的打分之和,打分为2各部分:
1.前者由LSTM输出的pi决定。
2.后者由CRF转移矩阵A决定,其中Ayi-1,yi表示从第yi-1个标签到第yi个标签的转移得分。

路径分数

Si = EmissionScore(发射分数) + TransitionScore(转移分数)

EmissionScore

EmissionScore = x0,start + x1,B-Person + x2,I-Person + x3,o + x4,B-Organization + x5,o + x6,END
xindex,label表示第index个单词被标记为label的score。
x1,B-Person ,x2,I-Person等均为BILSTM的输出。
x0,start 和 x6,END 可以看作为0。

TransitionScore

TransitionScore = tSTART->B-Person + tB-Person->I-Person + tI-Person->B-Organization + tB-Organization->o + to->END
tlabel1->label2表示从label1到babel2的转移概率分数,这些转移分数来自CRF层。

我们从所有可能的路径中选一个作为最优路径。如何选呢?
通过损失函数和维特比解码,我将在下一篇博客为大家讲解。

  • 23
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值