条件随机场CRF(一)从随机场到线性链条件随机场

    条件随机场CRF(二) 前向后向算法评估标记序列概率

    条件随机场CRF(三) 模型学习与维特比算法解码

    在CRF系列的前两篇,我们总结了CRF的模型基础与第一个问题的求解方法,本文我们关注于linear-CRF的第二个问题与第三个问题的求解。第二个问题是模型参数学习的问题,第三个问题是维特比算法解码的问题。

1. linear-CRF模型参数学习思路

    在linear-CRF模型参数学习问题中,我们给定训练数据集$X$和对应的标记序列$Y$,$K$个特征函数$f_k(x,y)$,需要学习linear-CRF的模型参数$w_k$和条件概率$P_w(y|x)$,其中条件概率$P_w(y|x)$和模型参数$w_k$满足一下关系:$$P_w(y|x) = P(y|x) =  \frac{1}{Z_w(x)}exp\sum\limits_{k=1}^Kw_kf_k(x,y) =  \frac{exp\sum\limits_{k=1}^Kw_kf_k(x,y)}{\sum\limits_{y}exp\sum\limits_{k=1}^Kw_kf_k(x,y)}$$

    所以我们的目标就是求出所有的模型参数$w_k$,这样条件概率$P_w(y|x)$可以从上式计算出来。

    求解这个问题有很多思路,比如梯度下降法,牛顿法,拟牛顿法。同时,这个模型中$P_w(y|x)$的表达式和最大熵模型原理小结中的模型一样,也可以使用最大熵模型中使用的改进的迭代尺度法(improved iterative scaling, IIS)来求解。

    下面我们只简要介绍用梯度下降法的求解思路。

2. linear-CRF模型参数学习之梯度下降法求解

    在使用梯度下降法求解模型参数之前,我们需要定义我们的优化函数,一般极大化条件分布$P_w(y|x)$的对数似然函数如下:$$L(w)=  log\prod_{x,y}P_w(y|x)^{\overline{P}(x,y)} = \sum\limits_{x,y}\overline{P}(x,y)logP_w(y|x)$$

    其中$\overline{P}(x,y)$为经验分布,可以从先验知识和训练集样本中得到,这点和最大熵模型类似。为了使用梯度下降法,我们现在极小化$f(w) = -L(P_w)$如下:$$\begin{align}f(w) & = -\sum\limits_{x,y}\overline{P}(x,y)logP_w(y|x) \\ &=  \sum\limits_{x,y}\overline{P}(x,y)logZ_w(x) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \\& =  \sum\limits_{x}\overline{P}(x)logZ_w(x) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \\& =  \sum\limits_{x}\overline{P}(x)log\sum\limits_{y}exp\sum\limits_{k=1}^Kw_kf_k(x,y) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y)  \end{align}$$

    对$w$求导可以得到:$$\frac{\partial f(w)}{\partial w} = \sum\limits_{x,y}\overline{P}(x)P_w(y|x)f(x,y) -  \sum\limits_{x,y}\overline{P}(x,y)f(x,y)$$

    有了$w$的导数表达书,就可以用梯度下降法来迭代求解最优的$w$了。注意在迭代过程中,每次更新$w$后,需要同步更新$P_w(x,y)$,以用于下一次迭代的梯度计算。

    梯度下降法的过程这里就不累述了,如果不熟悉梯度下降算法过程建议阅读之前写的梯度下降(Gradient Descent)小结。以上就是linear-CRF模型参数学习之梯度下降法求解思路总结。

3. linear-CRF模型维特比算法解码思路

    现在我们来看linear-CRF的第三个问题:解码。在这个问题中,给定条件随机场的条件概率$P(y|x)$和一个观测序列$x$,要求出满足$P(y|x)$最大的序列$y$。

    这个解码算法最常用的还是和HMM解码类似的维特比算法。到目前为止,我已经在三个地方讲到了维特比算法,第一个是文本挖掘的分词原理中用于中文分词,第二个是隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列中用于HMM解码。第三个就是这一篇了。

    维特比算法本身是一个动态规划算法,利用了两个局部状态和对应的递推公式,从局部递推到整体,进而得解。对于具体不同的问题,仅仅是这两个局部状态的定义和对应的递推公式不同而已。由于在之前已详述维特比算法,这里就是做一个简略的流程描述。

    对于我们linear-CRF中的维特比算法,我们的第一个局部状态定义为$\delta_i(l)$,表示在位置$i$标记$l$各个可能取值(1,2...m)对应的非规范化概率的最大值。之所以用非规范化概率是,规范化因子$Z(x)$不影响最大值的比较。根据$\delta_i(l)$的定义,我们递推在位置$i+1$标记$l$的表达式为:$$\delta_{i+1}(l) = \max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\;, l=1,2,...m$$

    和HMM的维特比算法类似,我们需要用另一个局部状态$\Psi_{i+1}(l)$来记录使$\delta_{i+1}(l)$达到最大的位置$i$的标记取值,这个值用来最终回溯最优解,$\Psi_{i+1}(l)$的递推表达式为:$$\Psi_{i+1}(l) = arg\;\max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\; ,l=1,2,...m$$

4. linear-CRF模型维特比算法流程

    现在我们总结下 linear-CRF模型维特比算法流程:

    输入:模型的$K$个特征函数,和对应的K个权重。观测序列$x=(x_1,x_2,...x_n)$,可能的标记个数$m$

    输出:最优标记序列$y^* =(y_1^*,y_2^*,...y_n^*)$

    1) 初始化:$$\delta_{1}(l) = \sum\limits_{k=1}^Kw_kf_k(y_{0} =start,y_{1} = l,x,i)\}\;, l=1,2,...m $$$$\Psi_{1}(l) = start\;, l=1,2,...m $$

    2) 对于$i=1,2...n-1$,进行递推:$$\delta_{i+1}(l) = \max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\;, l=1,2,...m$$$$\Psi_{i+1}(l) = arg\;\max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\; ,l=1,2,...m$$    

    3) 终止:$$y_n^* = arg\;\max_{1 \leq j \leq m}\delta_n(j)$$

    4)回溯:$$y_i^* = \Psi_{i+1}(y_{i+1}^*)\;, i=n-1,n-2,...1$$

    最终得到最优标记序列$y^* =(y_1^*,y_2^*,...y_n^*)$

5. linear-CRF模型维特比算法实例

    下面用一个具体的例子来描述 linear-CRF模型维特比算法,例子的模型和CRF系列第一篇中一样,都来源于《统计学习方法》。

    假设输入的都是三个词的句子,即$X=(X_1,X_2,X_3)$,输出的词性标记为$Y=(Y_1,Y_2,Y_3)$,其中$Y \in \{1(名词),2(动词)\}$

    这里只标记出取值为1的特征函数如下:$$t_1 =t_1(y_{i-1} = 1, y_i =2,x,i), i =2,3,\;\;\lambda_1=1 $$

$$t_2 =t_2(y_1=1,y_2=1,x,2)\;\;\lambda_2=0.6$$

$$t_3 =t_3(y_2=2,y_3=1,x,3)\;\;\lambda_3=1$$

$$t_4 =t_4(y_1=2,y_2=1,x,2)\;\;\lambda_4=1$$

$$t_5 =t_5(y_2=2,y_3=2,x,3)\;\;\lambda_5=0.2$$

$$s_1 =s_1(y_1=1,x,1)\;\;\mu_1 =1$$

$$s_2 =s_2( y_i =2,x,i), i =1,2,\;\;\mu_2=0.5$$

$$s_3 =s_3( y_i =1,x,i), i =2,3,\;\;\mu_3=0.8$$

$$s_4 =s_4(y_3=2,x,3)\;\;\mu_4 =0.5$$

    求标记(1,2,2)的最可能的标记序列。

    首先初始化:$$\delta_1(1) = \mu_1s_1 = 1\;\;\;\delta_1(2) = \mu_2s_2 = 0.5\;\;\;\Psi_{1}(1) =\Psi_{1}(2) = start $$

    接下来开始递推,先看位置2的:

$$\delta_2(1) = max\{\delta_1(1) + t_2\lambda_2+\mu_3s_3, \delta_1(2) + t_4\lambda_4+\mu_3s_3 \} = max\{1+0.6+0.8,0.5+1+0.8\} =2.4\;\;\;\Psi_{2}(1) =1$$

$$\delta_2(2) = max\{\delta_1(1) + t_1\lambda_1+\mu_2s_2, \delta_1(2) + \mu_2s_2\} = max\{1+1+0.5,0.5+0.5\} =2.5\;\;\;\Psi_{2}(2) =1$$

    再看位置3的:

$$\delta_3(1) = max\{\delta_2(1) +\mu_3s_3, \delta_2(2) + t_3\lambda_3+\mu_3s_3\} = max\{2.4+0.8,2.5+1+0.8\} =4.3$$$$\Psi_{3}(1) =2$$

$$\delta_3(2) = max\{\delta_2(1) +t_1\lambda_1 + \mu_4s_4, \delta_2(2) + t_5\lambda_5+\mu_4s_4\} = max\{2.4+1+0.5,2.5+0.2+0.5\} =3.9$$$$\Psi_{3}(2) =1$$

    最终得到$y_3^* =\arg\;max\{\delta_3(1), \delta_3(2)\}$,递推回去,得到:$$y_2^* = \Psi_3(1) =2\;\;y_1^* = \Psi_2(2) =1 $$

    即最终的结果为$(1,2,1)$,即标记为(名词,动词,名词)。

6.linear-CRF vs HMM

    linear-CRF模型和HMM模型有很多相似之处,尤其是其三个典型问题非常类似,除了模型参数学习的问题求解方法不同以外,概率估计问题和解码问题使用的算法思想基本也是相同的。同时,两者都可以用于序列模型,因此都广泛用于自然语言处理的各个方面。

    现在来看看两者的不同点。最大的不同点是linear-CRF模型是判别模型,而HMM是生成模型,即linear-CRF模型要优化求解的是条件概率$P(y|x)$,则HMM要求解的是联合分布$P(x,y)$。第二,linear-CRF是利用最大熵模型的思路去建立条件概率模型,对于观测序列并没有做马尔科夫假设。而HMM是在对观测序列做了马尔科夫假设的前提下建立联合分布的模型。

    最后想说的是,只有linear-CRF模型和HMM模型才是可以比较讨论的。但是linear-CRF是CRF的一个特例,CRF本身是一个可以适用于很复杂条件概率的模型,因此理论上CRF的使用范围要比HMM广泛的多。

    以上就是CRF系列的所有内容。

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)

条件随机场CRF(三) 模型学习与维特比算法解码的更多相关文章

  1. 条件随机场CRF(一)从随机场到线性链条件随机场

    条件随机场CRF(一)从随机场到线性链条件随机场 条件随机场CRF(二) 前向后向算法评估观察序列概率(TODO) 条件随机场CRF(三) 模型学习与维特比算法解码(TODO) 条件随机场(Condi ...

  2. 条件随机场CRF(二) 前向后向算法评估标记序列概率

    条件随机场CRF(一)从随机场到线性链条件随机场 条件随机场CRF(二) 前向后向算法评估标记序列概率 条件随机场CRF(三) 模型学习与维特比算法解码 在条件随机场CRF(一)中我们总结了CRF的模 ...

  3. 条件随机场 (CRF) 分词序列谈之一(转)

    http://langiner.blog.51cto.com/1989264/379166 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...

  4. 条件随机场(CRF) - 2 - 定义和形式(转载)

    转载自:http://www.68idc.cn/help/jiabenmake/qita/20160530618218.html 参考书本: <2012.李航.统计学习方法.pdf> 书上 ...

  5. 条件随机场CRF

    条件随机场(CRF)是给定一组输入随机变量X的条件下另一组输出随机变量Y的条件概率分布模型,其特点是假设输出随机变量构成马尔科夫随机场.实际上是定义在时序数据上的对数线性模型.条件随机场属于判别模型. ...

  6. 条件随机场(CRF) - 1 - 简介

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  7. 条件随机场(CRF) - 2 - 定义和形式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xueyingxue001/article/details/51498968声明: 1,本篇为个人对& ...

  8. 条件随机场(CRF) - 1 - 简介(转载)

    转载自:http://www.68idc.cn/help/jiabenmake/qita/20160530618222.html 首先我们先弄懂什么是"条件随机场",然后再探索其详 ...

  9. 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...

随机推荐

  1. Oracle中job的实例

    一.Oracle定时器(Job)各时间段写法汇总 对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等 ...

  2. 极光推送iOS SDK教程

    iOS SDK 调试指南 iOS 调试思维导图 2 确认证书 请到"应用详情页面"确认证书可用性: 3 开发环境测试 在对  JPush iOS 开发环境进行测试前,请确保 3 个 ...

  3. AndroidBinder进程间通信系统-android学习之旅(86)

    目录 前言及知识准备 Service组件结构 Clinet组件结构 与Binder驱动程序交互 总结 Binder进程间通信实例 问题 本次主要介绍Android平台下Binder进程间通信库.所谓通 ...

  4. Unable To Import Or Enter Sale Order - ORA-20001: APP-FND-01564: ORACLE error - 1422 in get_seq_info

    In this Document   Symptoms   Cause   Solution APPLIES TO: Oracle Order Management - Version 12.0.4 ...

  5. ssh命令大全

    常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh -h查看. 举例 不指定用户: ssh 192.168.0.11 指定用户: ...

  6. Oracle统一访问代理层方案

    目标 提供一个oracle数据库统一访问代理层,统一管理所有oracle数据库用户名的连接池,让多个应用系统相同的数据库用户公用连接池以节省oracle服务器的总连接数,并且提供统一管理oracle能 ...

  7. ORACLE中用rownum分页并排序的SQL语句

    ORACLE中用rownum分页并排序的SQL语句 以前分页习惯用这样的SQL语句: select * from (selectt.*,rownum row_num frommytable t ord ...

  8. Android ViewPager和Slidingmenu手势冲突问题

    尊重原创:  http://blog.csdn.net/sk719887916/article/details/40043961 skay 想必大家都遇到过手势和焦点的问题   对于安卓初学者或者初次 ...

  9. linux设备驱动模块引用和依赖

    /modules/04 # lsmod test 787 0 - Live 0xbf010000 (PO) func 633 1 test, Live 0xbf00c000 (PO) test -&g ...

  10. obj-c编程07:异常处理

    好了,到了相对轻松的话题,也是所有语言无可避免的话题:异常的处理. 我们知道对于一些常见的语言,"异常"是逃不开避不掉的主题:C中相对原始的signal或依赖系统异常支持(比如wi ...