条件随机场(Conditional Random Field)简介
来源:互联网 发布:c语言小游戏源代码 编辑:程序博客网 时间:2024/06/04 18:38
条件随机场(CRF)由Lafferty等人于2001年提出,是一种判别式概率模型,在许多自然语言处理任务中比如分词,命名实体识别等表现尤为出色。本篇与lafferty原始论文相同,将着重介绍条件随机场的一种特殊形式——线性链条件随机场(Linear Chain CRF)。
为什么需要CRF
作为Motivation,我们考虑如下词性标注任务:
对于一段输入文字“The dog barks”,我们希望获得他的词性标注“The/D(冠词) dog/N(名词) barks/V(动词)”。也就是对于一段输入序列
x⃗ =[x1,x2,....,xn] ,我们希望获得相应的特定任务的输出序列s⃗ =[s1,s2,...,sn] 。比如刚刚举的词性标注例子,此时xn 将对应字典集V 里面的词,sn 则是词性集S 里面的元素
一个解决方案——MEMM
为了解决上述问题,一个解决思路是建立一个条件概率模型:
McCallum等人为了解决HMM模型表达能力的局限性,于2000年提出了MEMM(Maximum Entropy Markov Model),该模型如下:
MEMM做了一个假设,就是状态的转移仅仅依赖于上一状态(这里我将标注标签称为一种状态)。在这样的假设下,转移概率被定义为:
其中
Label Bias Problem
MEMM虽然可以很优雅地解决上述问题,然而却存在一个重大缺点,也就是所谓的“标注偏好”问题。什么是标注偏好呢?那就是模型在为输入序列
从图中可以观察,局部状态转移时,
而对于
说明什么问题呢?因为
假设我们有一个辨别单词的状态机,对于单词rib和rob,从字母r出发分出两条边,经过i和o,最后到达b。对于MEMM,它对于一个单词
判断为rob的概率为:
注意到
CRF
为了解决Label Bias Problem,CRF便诞生了。首先我们必须明确MEMM产生Label Bias的根源是什么,这是因为MEMM的状态转移概率的计算方式,为了获得转移概率,它每一步的状态转移都会进行归一化,从而导致问题的产生。CRF认清了问题的根源,只要不要在每一步状态转移进行归一化,而在全局进行归一化即可:
CRF相对于MEMM做了几个改动,首先在特征函数上面做了变动:
它将输入序列
有得必有失,注意到模型的分母需要罗列所有的状态序列,对于序列长度为
Linear Chain CRF
此处揭晓我们的主角——线性链CRF。熟悉概率图模型的同学可以一睹它的容貌:
对于这样的无向图,通过定义特征函数
对于第
通过这样巧妙的定义:全局特征等于局部特征的和,一切阻碍都迎刃而解!
参数估计
接下来我们介绍对于Linear Chain CRF如何进行参数参数估计的。假设我们有训练集
对
问题出现在上面减号的右半部分,我们单独讨论(为了记号方便,我们省去上标
现在问题在于对于任意
Forward-Backward 算法
首先对于如下概率图模型:
根据定义,我们可得:
因此有:
对于熟悉概率图模型的同学,如果我们定义:
那么
如果定义
则容易得到如下动态规划方程:
因此有:
该动态规划方程便是forward阶段,其初始值定义为:
若用程序实现,伪代码如下:
# n为序列x的长度for s in S: alpha(1,s) = psi(*,s)for(m = 2; m <= n; m++): for s in S: for s' in S: alpha(m, s) += psi(s', s) * alpha(m-1, s')for s in S: alpha(n+1, STOP) += psi(s, STOP) * alpha(n, s)
类似的有:
如果定义
则容易得到如下动态规划方程:
因此有:
该动态规划方程便是backward阶段,其初始值定义为:
伪代码实现如下:
#n为序列x的长度for s in S: beta(n, s) = psi(s, STOP)for(m = n-1; m >= 1; m--): for s in S: for s' in S: beta(m, s) += psi(s, s') * beta(m+1, s')for s in S: beta(0, *) = psi(*, s) * beta(1, s)
有上述的动态规划方程,我们可以很方便求解
对于
也既是:
同理可得:
由于能高效求出
只要能快速求解梯度,接下来我们就可以利用SGD或者L-BFGS对CRF进行快速参数估计。
序列推断(Inference)
现在模型参数估计已经知道如何求解了,接下来就是对于一个新的输入序列
首先考虑:
Viterbi算法
同样可以利用动态规划快速求解,我们首先定义一个动态规划表格
如果我们为每个训练数据加上人造初始状态
其为代码如下:
for s in S: pi(1, s) = w.dot(phi(*, s, x))for(m = 2; m <= n; m++): for s in S: maxVal = -Infinity best = null for s' in S: val = pi(m-1, s') + w.dot(phi(s', s, x)) if val > maxVal: maxVal = val best = s' pi(m, s) = maxVal bPtr(m, s) = bestmaxVal = -Infinityfor s in S: val = pi(n, s) + w.dot(phi(s, STOP, x)) if val > maxVal: bPtr(m+1,STOP) = s
因此我们可以非常迅速求解CRF的推断问题,而这样的动态规划解也被成为viterbi算法。
参考引用
Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data
Log-Linear Models, MEMMs, and CRFs
The Forward-Backward Algorithm
Conditional random field PPT
Log-linear models and conditional random fields
PRML第8章《Graphical Models》
PRML第13章《Sequential Date》
- 条件随机场(Conditional Random Field)简介
- 条件随机场(Conditional Random Field)简介
- CRF(Conditional Random Field) 条件随机场
- 条件随机场conditional random field
- 条件随机场(conditional random field,CRF)
- 条件随机场CRF简介Introduction to Conditional Random Fields
- 条件随机场:conditional random fields
- 条件随机场(Conditional random fields)
- 条件随机场(Conditional random fields)
- 条件随机场:Conditionl Random Field
- 条件随机场(Conditinal random field)
- 条件随机场 conditional random fields 及代码实现
- 条件随机场 conditional random fields 及代码实现
- 条件随机场(CRF -- Conditional Random Fields)的开源库收集
- 条件随机场(conditional random fields) 及代码实现
- 条件随机场 (conditional random fields )模型
- 条件随机场 conditional random fields 及代码实现
- 条件随机场 conditional random fields 及代码实现
- 条件转移指令应用(1104)
- ITOO整体部署图
- 2016 第七届 蓝桥杯第7题 剪邮票(bfs+dfs)
- 预加载和懒加载(延迟加载)
- NOI2011阿狸的打字机
- 条件随机场(Conditional Random Field)简介
- SQL的一些技巧和优化
- imbalanced data处理的方法
- gradle 之compileSdkVersion,buildToolsVersion等
- pat乙级1031
- java虚拟机中的常用jdk命令
- Winfrom操作EXCEL
- CCF NOI1000 加密算法
- Windows 使用 vsftp 访问 Linux(树莓派) 及配置