命名实体识别(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层。

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

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

  1. 基于BERT+BiLSTM+CRF的中文景点命名实体识别

    赵平, 孙连英, 万莹, 葛娜. 基于BERT+BiLSTM+CRF的中文景点命名实体识别. 计算机系统应用, 2020, 29(6): 169-174.http://www.c-s-a.org.cn ...

  2. 用隐马尔可夫模型(HMM)做命名实体识别——NER系列(二)

    上一篇文章里<用规则做命名实体识别--NER系列(一)>,介绍了最简单的做命名实体识别的方法–规则.这一篇,我们循序渐进,继续介绍下一个模型--隐马尔可夫模型. 隐马尔可夫模型,看上去,和 ...

  3. 用隐马尔可夫模型(HMM)做命名实体识别——NER系列(一)

    原博python2写的,文末是我改的python3代码 隐马尔可夫模型,看上去,和序列标注问题是天然适配的,所以自然而然的,早期很多做命名实体识别和词性标注的算法,都采用了这个模型. 这篇文章我将基于 ...

  4. 隐马尔可夫模型(HMM)实现命名实体识别(NER)

    隐马尔可夫模型(HMM)实现命名实体识别(NER) 一.命名实体识别(Named Entity Recognition,NER) 识别文本中具有特定意义的实体,包括人名.地名.机构名.专有名词等等 在 ...

  5. 命名实体识别入门教程(必看)

    关于开发自己的命名实体识别先期思路: 虽然网上有很多相关代码,但实际如何入门材料较少,故整理下: CRF:先期可以用人民日报语料库去做,步骤如下: https://blog.csdn.net/hude ...

  6. BiLSTM+CRF的损失由发射矩阵和转移矩阵计算而得 BiLSTM+CRF命名实体识别:达观杯败走记(下篇

    如果是训练,那么直接用发射矩阵和真实标签去计算Loss,用于更新梯度. 这需要用到CRF中的forward函数. 如果是预测,那么就用发射矩阵去进行维特比解码,得到最优路径(预测的标签). 这需要用到 ...

  7. 逐行讲解CRF实现命名实体识别(NER)

    文章标题 本文概述 NER介绍 代码详解 任务 导入库 加载数据集 构造特征字典 数据处理 模型训练 模型验证 模型参数 备注 随机搜索RandomizedSearchCV 本文概述 使用sklear ...

  8. NLP入门(八)使用CRF++实现命名实体识别(NER)

    CRF与NER简介   CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机 ...

  9. 用CRF做命名实体识别——NER系列(三)

    在上一篇文章<用隐马尔可夫模型(HMM)做命名实体识别--NER系列(二)>中,我们使用HMM模型来做命名实体识别,将问题转化为统计概率问题,进行求解.显然,它的效果是非常有限的. 在深度 ...

  10. 中文命名实体识别NER

    命名实体识别(英语:Named Entity Recognition),简称NER,是指识别文本中具有特定意义的实体,主要包括人名.地名.机构名.专有名词等,以及时间.数量.货币.比例数值等文字.目前 ...

最新文章

  1. 独家 | AutoFlip:智能化视频剪裁的开源框架(附链接)
  2. java反射field和method的顺序问题
  3. 【推荐】用这些 App 提高你的睡眠质量
  4. Jena增删改查java API
  5. 穷举 迭代 while
  6. 算法:删除顺序表中重复的元素
  7. Windows JDK开发环境搭建及环境变量配置
  8. Javascript的数组操作(笔记)
  9. 线下产品风控门道真不少
  10. linux网卡备份还原,CentOS6.x双网卡采用主-备份策略绑定(bond)
  11. centos6.5-64安装zabbix2.4
  12. activity 变成后台进程后被杀死_Android开发后台服务
  13. [转] 由Request Method:OPTIONS初窥CORS
  14. VFP用Foxjson玩转JSON,超简单的教程
  15. Java伽马什么意思_伽马什么意思 读音
  16. SAXParseException 前言中不允许有内容
  17. 多维特征输入,多层神经网络学习
  18. 游戏出海欧洲有哪些可以接入的支付渠道
  19. DELETE_FAILED_INTERNAL_ERROR 小米之殇
  20. “background-image:url(data:image”data类型的Url格式简介

热门文章

  1. windows 10 彻底卸载windows 易升
  2. 算法竞赛入门经典 1 实验
  3. ubuntu离线安装包下载方法
  4. 第一章 UCI数据集wine.data主成分分析PCA
  5. 计算机熵的定义是,信息熵
  6. java内嵌html5浏览器_Jcef内嵌浏览器windows版本的编译及使用
  7. C语言练习:hackerrank十五关
  8. 调试Python代码
  9. queryDsl引入Mysql内置函数示例
  10. Lottie 动画AE+Bodymovin导出的JSON文件解读