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

栏目: 数据库 · 发布时间: 6年前

内容简介:今天详细介绍条件随机场的理论和及其在实体识别中的应用和tensorflow中的实现。作者&编辑 | 小Dream哥机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测。

今天详细介绍条件随机场的理论和及其在实体识别中的应用和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两个随机变量的概率分布满足如下的条件:

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

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

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

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

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

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

设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具有如下关系:

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

式中

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

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)。

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

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

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

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

我们来看看具体的代码:

【NLP】用于序列标注问题的条件随机场(Conditional Random Field, 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是怎幺实现的:

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

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

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

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

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

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

从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.

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

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

它表示输入句子中,第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。 因此,这是一个必须要深入理解和吃透的模型。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Computers and Intractability

Computers and Intractability

M R Garey、D S Johnson / W. H. Freeman / 1979-4-26 / GBP 53.99

This book's introduction features a humorous story of a man with a line of people behind him, who explains to his boss, "I can't find an efficient algorithm, but neither can all these famous people." ......一起来看看 《Computers and Intractability》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具