博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BiLSTM-CRF中CRF层解析-2
阅读量:4146 次
发布时间:2019-05-25

本文共 2426 字,大约阅读时间需要 8 分钟。

回顾

上篇博文中,我们知道CRF层可以从训练数据中学习到一些约束条件,从而确保最终的预测标签序列是有效的。

约束条件可能是:

  • 一句话中第一个单词的标签应该是“B-“ or “O”,而不能是"I-";
  • “B-label1 I-label2 I-label3 I-…”中,label1, label2, label3 …应该是相同的命名实体标签。如“B-Person I-Person”是有效的,而“B-Person I-Organization” 是无效的;
  • “O I-label” 是无效的。一个命名实体的第一个标签应该以 “B-“ 开头,而不能以“I-“开头,换句话说, 应该是“O B-label”这种模式;
  • 读完本篇博文后,你将会了解为什么CRF层能够学习这些约束条件。

CRF层

在CRF层的损失函数中,有两种类型的得分,这两种类型的得分是CRF层的关键概念。

2.1 发射得分

第一个得分为发射得分,该得分可以从BiLSTM层获得。如图2.1所示, w 0 w_0 w0标记为B-Person的得分是1.5。

图2.1
为了后续叙述方便,我们将给每个标签一个索引,如下表所示:
Label Index
B-Person 0
I-Person 1
B-Organization 2
I-Organization 3
O 4

我们采用 x i y j x_{iy_j} xiyj来表达发射矩阵,其中 i i i表示第 i i i单词, y j y_j yj表示标签索引。例如,根据图2.1, x i = 1 , y j = 2 = x w 1 , B − O r g a n i z a t i o n = 0.1 x_{i=1,y_j=2}=x_{w1,B-Organization}=0.1 xi=1,yj=2=xw1,BOrganization=0.1,该表达式的意思是将 w 1 w_1 w1标记为 B-Organization的概率为0.1。

2.2 转移得分

我们采用 t y i y j t_{y_iy_j} tyiyj表示转移得分,例如, t B − P e r s o n , I − P e r s o n = 0.9 t_{B-Person,I-Person}=0.9 tBPerson,IPerson=0.9表示标签B-Person转移到I-Person的得分为0.9,因此,我们将获得一个转移得分矩阵,该矩阵存储着所有标签相互转移之间的得分。

为了使转移得分矩阵的鲁棒性更好,我们将额外再加两个标签:START和END,START表示一句话的开始,注意这不是指该句话的第一个单词,START后才是第一个单词,同样的,END代表着这句话的结束。

下表就是一个转移得分矩阵的示例,该示例包含了START和END标签。

START B-Person I-Person B-Organization I-Organization O END
START 0 0.8 0.007 0.7 0.0008 0.9 0.08
B-Person 0 0.6 0.9 0.2 0.0006 0.6 0.009
I-Person -1 0.5 0.53 0.55 0.0003 0.85 0.008
B-Organization 0.9 0.5 0.0003 0.25 0.8 0.77 0.006
I-Organization -0.9 0.45 0.007 0.7 0.65 0.76 0.2
O 0 0.65 0.0007 0.7 0.0008 0.9 0.08
END 0 0 0 0 0 0 0

如上表所示,我们能够发现转移矩阵已经学习到了某些有用的约束条件。

  • 句子中第一个单词的标签应该是以“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” (该性质在转移得分矩阵中的表现是,得分 t O , I − P e r s o n t_{O,I-Person} tO,IPerson是很低的。)

现在,你可能比较关心的问题是:怎么得到该转移矩阵?

其实,该矩阵是BiLSTM-CRF模型的一个参数,在训练模型之前,可以随机初始化该转移得分矩阵,在训练过程中,这个矩阵中的所有随机得分将得到更新,换而言之,CRF层可以自己学习这些约束条件,而无需人为构建该矩阵。随着不断的训练,这些得分会越来越合理。

下篇博文

2.3 CRF损失函数

该节会介绍CRF损失函数,该算是函数将会包含真是路径得分和所有可能路径得分。

2.4 真实路径得分

该节介绍一句话真实标签的得分。

2.5 所有可能路径的得分

该节将给定一个简单的示例,教你一步一步地计算出所有可能路径的总得分。

参考文献

[1] Lample, G., Ballesteros, M., Subramanian, S., Kawakami, K. and Dyer, C., 2016. Neural architectures for named entity recognition. arXiv preprint arXiv:1603.01360.

转载地址:http://egjti.baihongyu.com/

你可能感兴趣的文章
go语言如何从终端逐行读取数据?------用bufio包
查看>>
go的值类型和引用类型------重要的概念
查看>>
求二叉树中结点的最大值(所有结点的值都是正整数)
查看>>
用go的flag包来解析命令行参数
查看>>
来玩下go的http get
查看>>
队列和栈的本质区别
查看>>
matlab中inline的用法
查看>>
如何用matlab求函数的最值?
查看>>
Git从入门到放弃
查看>>
java8采用stream对集合的常用操作
查看>>
EasySwift/YXJOnePixelLine 极其方便的画出真正的一个像素的线
查看>>
Ubuntu系统上安装Nginx服务器的简单方法
查看>>
Ubuntu Linux系统下apt-get命令详解
查看>>
ubuntu 16.04 下重置 MySQL 5.7 的密码(忘记密码)
查看>>
Ubuntu Navicat for MySQL安装以及破解方案
查看>>
HTTPS那些事 用java实现HTTPS工作原理
查看>>
oracle函数trunc的使用
查看>>
MySQL 存储过程或者函数中传参数实现where id in(1,2,3,...)IN条件拼接
查看>>
java反编译
查看>>
Class.forName( )你搞懂了吗?——转
查看>>