BilSTM 实体识别_BiLSTM-CRF
大纲:
- 1.简介
- 1.1 数据集
- 1.2 BiLSTM-CRF模型
- 1.3 如果我们没有CRF层怎么办?
- 1.4 CRF层可以从训练数据中学习约束
- 2. CRF层
- 2.1 Emission score
- 2.2 Transition score
- 2.3 CRF 损失函数
- 2.4 真实标签序列得分
- 2.4.1 Emission Score
- 2.4.2 Transition Score
- 2.5 所有可能标签序列组合的总得分
- 2.6 CRF的损失函数
- 2.6.1 emission Score和transition Score
1. 简介
1.1 数据集
假设,我们有一个数据集,其中我们有两个实体类型,Person(人名)和Organization(组织名)。因此,事实上,在我们的数据集中,我们有5个实体标签:
- B-Person
- I-Person
- B-Organization
- I-Organization
- O
此外,
1.2 BiLSTM-CRF模型
如下图所示:
![](/assets/blank.gif)
虽然没有必要知道BiLSTM层的细节,但为了更容易理解CRF层,我们必须知道BiLSTM层输出的含义。
![](/assets/blank.gif)
上图说明了BiLSTM层的输出是每个标签的分数。
例如,对于
1.3 如果我们没有CRF层怎么办?
即使没有CRF层,我们也可以训练BiLSTM命名实体识别模型,如下图所示。
![](/assets/blank.gif)
因为每个单词的BiLSTM输出是标签分数。我们可以选择每个单词得分最高的标签。例如,对于
B-Person
”得分最高(1.5),因此我们可以选择“B-Person
”作为其最佳预测标签,
I-Person
”,
O
",
B-Organization
”,
O
"。
虽然我们在这个例子中可以取得
![](/assets/blank.gif)
显然,这次输出无效,“I-Organization I-Person”和“B-Organization I-Person”。
1.4 CRF层可以从训练数据中学习约束
CRF层可以为最终预测的标签添加一些约束以确保它们有效。在训练过程中,CRF层可以自动从训练数据集中学习这些约束。约束可能是:
- 句子中第一个单词的标签应以“B-”或“O”开头,而不是“I-”
- “B-label1 I-label2 I-label3 ”,在此模式中,label1,label2,label3 …应该是相同的命名实体标签。例如,“B-Person I-Person”有效,但“B-Person I-Organization”无效。
- “O I-label”无效。一个命名实体的第一个标签应以“B-”而非“I-”开头,换句话说,有效模式应为“O B-label”
- …
利用这些有用的约束,无效预测标签序列的数量将显着减少。
2 CRF层
在CRF层的loss函数中,有两种score。一种是发射(Emission)score,一种是转移(Transition)score。
2.1 Emission score
Emission Score来自于 BiLSTM 层,如下图所示,
![](/assets/blank.gif)
为方便起见,我们将为每个标签提供一个索引号,如下表所示。
![](/assets/blank.gif)
我们使用
例如,根据图2.1,
B-Organization
”的分数是0.1。
2.2 Transition score
我们使用
例如,
为了使转移矩阵更加健壮,我们将再添加两个标签,“START”和“END”。“START”表示句子的开头,而不是第一个单词。“END”表示句末。
以下是状态转移矩阵分数(transition matrix score)的示例,包括额外添加的“START”和“END”标签。
![](/assets/blank.gif)
如上表所示,我们可以发现状态转移矩阵已经学到了一些有用的约束
- 句子中第一个单词的标签应以“B-”或“O”开头,而不是“I-” (从“START”到“I-Person或I-Organization”的转换分数非常低。)
- “B-label1 I-label2 I-label3 I- …”,在此模式中,label1,label2,label3 …应该是相同的命名实体标签。例如,“B-Person I-Person”有效,但“B-Person I-Organization”无效。(例如,从“B-Organization”到“I-Person”的得分仅为0.0003,远远低于其他人。)
- “O I-label”无效。一个命名实体的第一个标签应该以“B-”而不是“I-”开头,换句话说,有效模式应该是“O B-label” (例如,分数
非常小。
)
- …
那如何获得状态转移矩阵?
实际上,状态转移矩阵是BiLSTM-CRF模型的参数。
在训练模型之前,您可以随机初始化矩阵中的所有转移分数(transition score)。在之后的训练过程中,这些随机初始化的 score 将会被自动更新。换句话说,CRF层可以自己学习这些约束。我们不需要手动构建矩阵。随着训练迭代次数的增加,分数将逐渐变得越来越合理。
2.3 CRF 损失函数CRF 的损失函数由 真实标签序列得分 和 所有可能标签序列的总得分 两部分组成。真实标签序列得分在所有可能标签序列得分中是最高的。
假如我们的数据集中有这样一些标记:
![](/assets/blank.gif)
那么,在第一节中我们假设的句子x,所有可能的标签序列组合为:
- (1) START B-Person B-Person B-Person B-Person B-Person END
- (2) START B-Person I-Person B-Person B-Person B-Person END
- …
- (10) START B-Person I-Person O B-Organization O END
- …
- (N) O O O O O O O
假设一共有N中可能的标签序列组合,且第
按照我们之前的假设,第10个是真实的标签序列,那么,我们想要的结果是第10个标签序列得分在所有可能的标签序列得分中是最高的。
因此,我们可以定义模型的损失函数,在整个模型训练过程中,BiLSTM-CRF模型的参数不断地进行更新,使得真实标签序列得分在所有可能标签序列组合得分中的占比是最高的。因此,模型的损失函数格式如下所示:
那么,问题就来了:
- 如何定义一个标签序列的得分?
- 如何计算所有可能标签序列组合的总得分?
- 在计算总得分中,一定需要计算每一个可能的标签序列的得分吗?(提前透露一下答案:不需要!)
接下来,我们来解答每一个问题。
2.4 真实标签序列得分
前面我们定义了标签序列得分为
显然,在所有可能的标签序列组合必然存在一个序列是真实标签序列,而剩下的标签序列组合都是错误的,比如序列 "START B-Person I-Person O B-Organization O END " 是正确的,而序列 "START B-Person I-Person B-Person B-Person B-Person END" 是错误的。
在整个模型训练过程中,CRF层的损失函数只需要两个得分:
- 一个是真实标签序列得分
- 一个是所有可能标签序列组合的总得分
而我们的学习目的是让真实的标签序列得分在总得分中的占比是最高的。
对于真实标签序列的得分
我们使用之前的案例,真实的标签序列为“START B-Person I-Person O B-Organization O END ”,即:
- 句子
由5个字符组成,
- 我们在句子前后增加两个字符,记为
2.4.1 Emission Score
Emission Score计算公式如下所示:
其中:
表示第index个词被标记为label的得分
为
BiLSTM层的输出
- 一般
和
为0
2.4.2 Transition Score
Transition Score计算公式如下所示:
其中:
表示label1到label2的Transition Score。
- Transition Score主要是在CRF层进行计算的,也就是说,transition Score完全是CRF层的参数。
因此,我们通过计算
2.5 所有可能标签序列组合的总得分
前面,我们计算了单条标签序列得分,接下来,我们需要计算所有可能标签序列的总得分。由之前内容可知,总得分的计算公式为;
很显然,总得分计算方式就是每一条标签序列得分的求和,那么我们能想到的最简单的方法就是先计算每一条的标签序列得分,然后将所有的标签序列得分进行相加得到总得分。虽然计算很简单,但是效率不高,需要很长的训练时间。
接下来,我们将通过公式推导来认识总得分计算过程。
2.6 CRF的损失函数
由前面可知,CRF层的损失函数为:
我们对其对数化,即:
一般在模型训练过程中,我们希望损失函数最小化,因此,在损失函数添加一个负号,即:
因此,对于总得分,需要一个高效的方法计算
2.6.1 emission Score和transition Score
为了简化公式,我们假设句子的长度为3,即:
假设数据集中只有两个标签,即:
则emission Score矩阵可从BiLSTM层的输出获得,即:
![](/assets/blank.gif)
其中
而且,我们可以从CRF层中得到transition Score矩阵,即:
![](/assets/blank.gif)
其中
https://blog.csdn.net/zhang2010hao/article/details/85317411
https://blog.csdn.net/zhang2010hao/article/details/85289875
总结:
CRF层可以为最终预测的标签添加一些约束以确保它们有效。在训练过程中,CRF层可以自动从训练数据集中学习这些约束,利用这些有用的约束,无效预测标签序列的数量将显着减少。
在CRF层的loss函数中,有两种score。
一种是发射(Emission)score,来自BiLSTM层,是某个单词对应某个标签的分数
一种是转移(Transition)score,来自CRF层,是标签之间的转移分数,从而得到状态转移矩阵,这个就是CRF层中的参数,是学习到的
CRF 的损失函数由 真实标签序列得分 和 所有可能标签序列的总得分 两部分组成。真实标签序列得分在所有可能标签序列得分中是最高的。
参考:
BILSTM-CRF-1_zhang2010hao的博客-CSDN博客_bilstm crfblog.csdn.net
![](/assets/blank.gif)
https://blog.csdn.net/zhang2010hao/article/details/85317411
https://www.jianshu.com/p/9901c60fa8b8www.jianshu.com
BilSTM 实体识别_BiLSTM-CRF相关推荐
- BilSTM 实体识别_NLP-入门实体命名识别(NER)+Bilstm-CRF模型原理Pytorch代码详解——最全攻略
最近在系统地接触学习NER,但是发现这方面的小帖子还比较零散.所以我把学习的记录放出来给大家作参考,其中汇聚了很多其他博主的知识,在本文中也放出了他们的原链.希望能够以这篇文章为载体,帮助其他跟我一样 ...
- BilSTM 实体识别_NLP入门实体命名识别(NER)+BilstmCRF模型原理Pytorch代码详解——最全攻略...
来自 | 知乎 作者 | seven链接 | https://zhuanlan.zhihu.com/p/79552594编辑 | 机器学习算法与自然语言处理公众号本文仅作学术分享,如有侵权,请联系 ...
- BilSTM 实体识别_肿瘤新抗原(neoantigen)专题八:新抗原识别策略使难治性实体瘤的个体化免疫治疗成为可能...
最近的基因组和生物信息学技术的进步使得分析由肿瘤特异性突变编码的个性化新抗原的免疫反应成为可能.然而,及时有效地识别新抗原仍然是个性化肿瘤免疫治疗的主要障碍之一. 本篇主要谈两种不同的新抗原鉴定方案: ...
- 基于BERT+BiLSTM+CRF的中文景点命名实体识别
赵平, 孙连英, 万莹, 葛娜. 基于BERT+BiLSTM+CRF的中文景点命名实体识别. 计算机系统应用, 2020, 29(6): 169-174.http://www.c-s-a.org.cn ...
- 知识图谱 基于CRF的命名实体识别模型
基于CRF的命名实体识别模型 条件随机场 CRF 条件随机场 CRF 是在已知一组输入随机变量条件的情况下,输出另一组随机变量的条件概率分布模型:其前提是假设输出随机变量构成马尔可夫随机场:条件随 ...
- CAS-KG——实体识别
说明:CAS是国科大的简称,KG是知识图谱的缩写,这个栏目之下是我整理的国科大学习到的知识图谱的相关笔记. 课程目标 了解以知识图谱为代表的大数据知识工程的基本问题和方法 掌握基于知识图谱的语义计算关 ...
- 【项目调研+论文阅读】Lattice LSTM神经网络医学文本命名实体识别 | day7
<Lattice LSTM神经网络法中文医学文本命名实体识别模型研究>2019 文章目录 一.模型步骤 1.Lattiice-LSTM分词+表征词汇 2.LSTM-CRF 经证实,英文N ...
- 零基础入门--中文命名实体识别(BiLSTM+CRF模型,含代码)
https://github.com/mali19064/LSTM-CRF-pytorch-faster 中文分词 说到命名实体抽取,先要了解一下基于字标注的中文分词. 比如一句话 "我爱北 ...
- pytorch实现BiLSTM+CRF用于NER(命名实体识别)
pytorch实现BiLSTM+CRF用于NER(命名实体识别) 在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质 ...
最新文章
- 最小二乘GAN:比常规GAN更稳定,比WGAN收敛更迅速
- 协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议)
- phpmailer SMTP Error: Could not connect to SMTP host. 错误解决
- sklearn pipeline_Sklearn介绍
- MySQL表名不区分大小写的设置方法
- linux ubuntu 安装安卓,借助ubuntu电脑,给安卓手机安装整套ubuntu14.04
- SAP Spartacus 服务器端渲染找不到 index 视图的问题
- Android之Notification制作多媒体控制器
- 多线程的那点儿事(之原子锁)
- mysql的局限_Mysql数据分区局限性大总结
- C语言———不定参数标准库 stdarg.h
- Python笔记-OpenCV图像处理和人脸识别
- 电商平台后台管理系统--->系统详细设计(用户登录、商品管理模块)
- 快速掌握Python的捷径-Python基础前传(1) 1
- python程序内存限制
- OpenCV、Halcon博客与资源收藏整理备用
- 拳王虚拟项目公社:如何通过SEO优化分析建网站赚钱?
- 2021年机器人的工作量相当于全世界430万员工的工作
- excel分类汇总多个工作表
- matlab中0.1见方,square,square怎么读?
热门文章
- ZZULIOJ 1146: 吃糖果
- 黑苹果 服务器系统安装,macOS Mojave黑苹果超详细图文教程
- 【mxGraph】源码学习:(5)mxGraph
- 数据分析之“设立标准、判断分类”
- filmora怎么设置中文_Filmora 常见问题
- Ubuntu18.04或者20.04上用docker的方式安装微信或者qq
- opensips与对方tls sip trunk对接注意事项
- 你要的三级级联我都有
- 漫画:互联网人的十二时辰
- 高级筛选英语或计算机分数大于85,WPS表格高级筛选分析学生成绩 -电脑资料