上一篇介绍了隐马尔科夫模型,隐马尔科夫模型引入了马尔科夫假设,即当前时刻的状态只与其前一时刻的状态有关。但是,在序列标注任务中,当前时刻的状态,应该同该时刻的前后的状态均相关。于是,在很多序列标注任务中,引入了条件随机场。

今天详细介绍条件随机场的理论和及其在实体识别中的应用和tensorflow中的实现。

作者&编辑 | 小Dream哥

1 条件随机场是什么?

机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测。

概率模型提供这样一种描述的框架,将学习任务归结于计算变量的概率分布。在概率模型中,利用已知变量推测未知变量的分布称为“推断”,其核心是如何基于可观测变量推测出未知变量的条件分布。具体来说,假定所关心的变量集合为Y,可观测变量集合为X,“生成式”模型直接通过训练样本基本联合概率分布P(Y,X);“判别式”模型通过先计算条件分布P(Y|X)。

我们前面讲的HMM是一种生成式概率图模型,条件随机场(CRF)与HMM不同,是一种判别式的概率图模型。CRF是在给定一组变量的情况下,求解另一组变量的条件概率的模型。

设X与Y是一组随机变量,P(Y,X)是给定随机变量X情况下,随机变量Y的条件概率。若随机变量Y构成一个无向图G(V,E),当X与Y两个随机变量的概率分布满足如下的条件:

则称在给定随机变量序列X的情况下,随机变量序列Y的条件概率P(Y,X)构成条件随机场。

简单说明一下上面的条件概率公式:

v表示G中的任一节点,例如Y1,v~V。n(v)表示与v有边连接的节点的集合。上式的含义就是,Y在i时刻的状态,仅与其有边连接的节点有关。


在NLP中,常用的是线性链的条件随机场,下面着重介绍下线性链条件随机场以加深理解。

设X={x1,x2,x3,....xn},Y={y1,y2,y3,....yn}均为线性链表示的随机变量序列,若在给定随机变量序列X的情况下,随机变量序列Y的条件概率P(Y,X)构成条件随机场,即满足如下的条件:

从上面的定义可以看出,条件随机场与HMM之间的差异在于,HMM中,Y在i时刻状态与其前一时刻,即y(i-1)相关。而在CRF中,Y在i时刻的状态与其前后时刻,即y(i-1)与y(i+1)均相关

上面大致讲了条件随机场的定义,有什么样的性质。如果读过小Dream哥上一篇HMM讲解文章的同学,此刻对CRF应该就有了大致的了解。

在介绍CRF的实际应用之前,还有一些概念需要介绍,就是条件随机场的参数化形式。

2 条件随机场的参数化表现形式

我们先列出来CRF的参数化形式。假设P(Y,X)是随机序列Y在给定随机序列X情况下的条件随机场,则在随机变量X取值为x的情况下,随机变量Y的取值y具有如下关系:

式中

t_k和s_l是特征函数,v_k和u_l是对应的权值

t_k是状态转移函数,v_k是对应的权值;s_l是发射函数,u_l是对应的权值。好的,假如所有的t_k,s_l 和v_k,u_l都已知,我们要算的P(Yi =yi|X)是不是就可以算出来啦?

在给定随机序列X的情况下,计算概率最大Y序列可以用维特比算法,维特比算法在上一章节HMM中有详细的介绍,没看的同学可以在点击链接查看

大家应该还有一大堆的疑问,t_k,s_l 和v_k,u_l如何确定和学习?在实际中我们如何使用?小Dream如果只讲到这里,就会太让大家失望了。下面我们看看在tensorflow里,CRF是怎么实现的,以及我们如何使用他,经过这一段,大家对条件随机场应该就会有一个较为完整的认识了。

3 tensorflow里的条件随机场

这一节我们以命名实体识别为例,来介绍在tensorflow里如何使用条件随机场(CRF)。

命名实体识别与分词一样,是一个序列标注的问题,因为篇幅问题,这里就不展开,不清楚的同学可以先出门百度一下,以后我们再找机会,好好讲一下命名实体识别的项目。

该命名实体识别任务特征提取的网路结构如下:

其他的我们先不看,我们只用知道,自然语言的句子经过神经网络(双向LSTM)进行特征提取之后,会得到一个特征输出。训练时,将这个特征和相应的标记(label)输入到条件随机场中,就可以计算损失了。预测时,将自然语言输入到该网络,经CRF就可以识别该句子中的实体了。

我们来看看具体的代码:

这是我定义的损失层,project_logits是神经网络最后一层的输出,该矩阵的shape为[batch_size, num_steps, num_tags],第一个是batch size,第二个是输入的句子的长度,第三个标记的个数,即命名实体识别总标记的类别数。targets是输入句子的label,即每个字的label,它的维度为[batch_size, num_steps]。损失层定义了一个self.trans矩阵,大小是[num_tags+1, num_tags+1], 加1是因为还有一个类别是未定义。

将project_logit,targets以及self.trans交给tensorflow的系统函数crf_log_likelihood即可求得损失了。

下面我们进一步来看看crf_log_likelihood是怎么实现的:

crf_log_likelihood函数中分为两步,最终得到scores:

(1) 调用crf_sequence_score函数计算sequence_scores。

(2) 将sequence_scores进行归一化处理。

CRF参数的学习及score计算过程主要在crf_sequence_score中进行,我们好好看看这个函数。

从crf_sequence_score函数的实现中,我们看出,tf中的损失值包括一元损失和二元损失。其中unary_scores表示的是输入序列之间转化的损失,unary_scores表示的转化矩阵的损失值。那这两项到底是什么呢?都是两项,是不是和CRF的参数化形式感觉有点像?我们看看相关论文是怎么说的。

LampleG, Ballesteros M, Subramanian S, et al. Neural architectures for named entity recognition[J]. arXiv preprint arXiv:1603.01360, 2016.

我们看一下,得分分为两项,第一项:

表示输入句子中,第i个词,取某个标记的概率

举个例子,假如输入的句子是“Mark Watney visit Mars”, 相应的label是[B-PER,E-PER,O,S-LOC],则P(1,“B-PER”)表示的是第一个词的标记是B-PER的概率。所以第一项会是P(1,“B-PER”)+P(2,“E-PER”)+P(3,“O”)+P(4,“S-LOC”)。

前面提到过,project_logits是神经网络最后一层的输出,该矩阵的shape为[batch_size, num_steps, num_tags]。所以在tensorflow的实现中,该矩阵的值会取到project_logits矩阵中相应的值,这一点交叉熵有点像,同学们体会一下。

第二项:

它代表的是整个序列从一个标记转化到下一个标记的损失值。它用每一项值从self.trans矩阵中取得。它最开始是按照我们初始化的方式初始化的,然后会随着训练的过程优化。

好了,tensorflow中crf就是这么实现的,是不是有种豁然开朗的感觉??

我们来做一个总结,CRF是一个在给定某一个随机序列的情况下,求另一个随机序列的概率分布的概率图模型,在序列标注的问题中有广泛的应用。

在tensorflow中,实现了crf_log_likelihood函数。在本文讲的命名实体识别项目中,自然语言是已知的序列,自然语言经过特征提取过后的logits,是发射矩阵,对应着t_k函数;随机初始化的self.trans矩阵是状态转移矩阵,对应着参数s_l,随着训练的过程不断的优化。

CRF相关的理论及其在tensorflow中的实现,就差不多讲完了。但是有一个很关键的点,需要读者们思考一下。在这个实体识别的任务中,经过LSTM完成特征提取之后,为什么要接一层CRF再得到scores和损失值?

关于这个问题,读者们可以留言,或者加入我们的NLP群进行讨论。感兴趣的同学可以微信搜索jen104,备注"加入有三AI NLP群"。

总结

条件随机场(CRF)在现今NLP中序列标记任务中是不可或缺的存在。太多的实现基于此,例如LSTM+CRF,CNN+CRF,BERT+CRF。因此,这是一个必须要深入理解和吃透的模型。

下期预告:朴素贝叶斯原理及应用

有三AI知识星球推荐

为了更加自由的进行内容输出,也让大家可以跟各行各业的大佬们交流,有三AI开设了星球,内容与公众号完全不重合,相互补充,下面是知识星球的内容介绍,大家可以关注。

有三AI知识星球官宣,BAT等大咖等你来撩

转载文章请后台联系

侵权必究

往期精选

  • 【NLP】自然语言处理专栏上线,带你一步一步走进“人工智能技术皇冠上的明珠”。

  • 【NLP】用于语音识别、分词的隐马尔科夫模型HMM

  • 【知识星球】每日干货看图猜技术,你都会吗?

  • 【知识星球】千奇百怪的网络结构板块更新到哪里了?

【NLP】用于序列标注问题的条件随机场(Conditional Random Field, CRF)相关推荐

  1. 「NLP」用于序列标注问题的条件随机场

    https://www.toutiao.com/a6714045004102238734/ 上一篇介绍了隐马尔科夫模型,隐马尔科夫模型引入了马尔科夫假设,即当前时刻的状态只与其前一时刻的状态有关.但是 ...

  2. 条件随机场(conditional random fields) 及代码实现

    条件随机场模型是由Lafferty在2001年提出的一种典型的判别式模型.它在观测序列的基础上对目标序列进行建模,重点解决序列化标注的问题条件随机场模型既具有判别式模型的优点,又具有产生式模型考虑到上 ...

  3. 条件随机场(Conditional random field,CRF)

    转载于:https://www.cnblogs.com/huangshiyu13/p/6140967.html

  4. 随机场(Random field)

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...

  5. 深入理解机器学习——概率图模型(Probabilistic Graphical Model):条件随机场(Conditional Random Field,CRF)

    分类目录:<深入理解机器学习>总目录 条件随机场(Conditional Random Field,CRF)是一种判别式无向图模型,在<概率图模型(Probabilistic Gra ...

  6. 【机器学习基础】一文读懂用于序列标注的条件随机场(CRF)模型

    模型前的铺垫 我们先引入一个假设,假设一个句子的产生只需要两步: 第一步:基于语法产生一个合乎文法的词性序列 第二步:对第一步产生的序列中的每个词性找到符合这个词性的一个词汇,从而产生一个词汇序列,便 ...

  7. 使用RNN解决NLP中序列标注问题的通用优化思路

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 (想更系统地学习深度学习知识?请参考:深度学习枕边书) 序列标注问题应该说是自然语言处理中最常见的问题 ...

  8. 马尔科夫随机场Markov Random Field

    马尔可夫随机场,描述了具有某种特性的集合.拿种地打比方,如果任何一块地里种的庄稼的种类仅仅与它邻近的地里种的庄稼的种类有关,与其它地方的庄稼的种类无关,那么这些地里种的庄稼的集合,就是一个马尔可夫随机 ...

  9. 条件随机场(CRF)相关理论知识

    文章目录 无向概率图模型 条件随机场 CRF 实例 线性链条件随机场的简化形式 线性链条件随机场的矩阵形式 linear-CRF的三个基本问题 1,概率计算问题 前向后向概率概述 前向后向概率计算 l ...

最新文章

  1. a标签居中 img vue_Vue中img的src属性绑定与static文件夹实例
  2. mailscanner参数
  3. 逻辑智力题【更新中】
  4. DataSet的数据并发异常处理
  5. SAP Cloud for Customer(C4C)里如何定义跨BO间的association
  6. jersey 入门示例_Jersey Web Service Hello World Java示例
  7. 包含天,时,分,秒的倒计时
  8. Hello Quartz (第二部分)
  9. Fedora14下 wordPress 配置
  10. RGB与YUV格式(四)
  11. c语言用程序判断是否素数,用C语言编写判断一个数是否是素数的程序
  12. B站视频下载:如何下载B站视频到电脑上
  13. PLC无线通讯方案详解GRM110
  14. 邮箱如何群发邮件,公司邮件群发教程
  15. 【光剑藏书轩2021】5分钟读懂《贫穷的本质》:“穷人通常缺少信息来源”
  16. happens-before的法则
  17. 千古以來:卍佛一心)悟道真机(转载)
  18. 什么是虚拟主机?虚拟主机的作用有哪些?
  19. python操作CAD转存dwg文件
  20. 切克闹!Java8新特性之方法引用

热门文章

  1. 使用tensorflow训练数据时遇到的问题总结
  2. 通过XML设置屏幕方向(android:screenOrientation)详解
  3. 【深入Java虚拟机JVM 08】JVM四种引用-强引用、软引用、弱引用、虚引用
  4. JPA保存数据异常:org.hibernate.AnnotationException: @COLUMN(s) NOT allowed ON a @ManyToOne property
  5. 位运算的那些奇技淫巧 | 掌(装)握(逼)必备,妙解两道算法题
  6. Java里的线程控制
  7. 禁用win10触摸屏手势_我才发现win10居然有这么多好用的功能
  8. Android MVVM封装,MVVMFramework
  9. arch linux 同步时间,ArchLinux 设置系统时间
  10. hurricane中文_hurricane是什么意思