导语:HMM和CRF模型中利用大量的动态规划算法进行快速运算,本文主要是从比较实用和易于理解的角度,对HMM和CRF模型的前向算法和后向算法进行进行了推导,其中的推导过程,补充了大量细节,面对网络上全文搬运统计学习课本上的大量无用内容,本文可以作为一个很好的补充,唯一不足的是CRF边缘概率计算的推导还未完成,想了各种易理解的方式,但是都不够友好,暂时先放弃了这块内容。
HMM简要介绍
HMM的概率计算问题
前向算法
后向算法
前向后向算法
CRF中的概率计算问题
前向算法
后向算法
总结
HMM简要介绍
在自然语言处理中,存在很多序列到序列的任务,比如机器翻译,词性标注,命名实体识别,都是需要对给定的输入句子,输出一个带标签的序列,如果按照PGM中对应的概念,我们会把输入的句子中的字作为观测序列, 把我们比较关注的任务如词性,实体类别等作为隐含状态序列。
对于HMM模型而言,模型为观测序列和隐含标签状态序列的联合概率分布,并且做了如下限制:
- 当前时刻的隐含状态只跟上一时刻的隐含状态有关,与其他时刻无关;
- 当前时刻的观测只与当前时刻的隐含状态有关
因此,HMM模型可以表示为:
在上式中,有两部分概率连乘得到,即转移概率和发射概率,在实际的HMM中,除了上述两个转移概率和发射概率,还有一个状态初始概率分布。
对于HMM模型,一般会涉及到3个问题:
- 概率计算问题:即在给定模型参数的情况下,计算观测序列出现的概率,即;
- 学习问题:在给定观测序列的情况下,估计模型参数;
- 预测问题:给定模型参数和观测序列,计算使得条件概率最大的隐含状态序列;
对于概率计算问题,会涉及到前向算法,后向算法等2种算法来极大的加快运算效率,这2种算法本质是利用了动态规划的思想;对于学习问题,对于无监督的学习,需要利用EM算法,对于同时给定了观测序列以及对应的隐含状态的情况,直接进行统计即可;对于预测问题,需要利用维特比算法,本质也是一种动态规划算法。
HMM的概率计算问题
下面会现在针对概率计算问题进行叙述,掌握这部分内容,需要回忆一下基本的贝叶斯公式,全概率公式。由于概率计算问题是在给定好了模型参数情况下,计算观测序列出现的概率计算问题,假设隐含状态的个数为,即任意时刻的隐含状态的取值只能是种状态中的一种(利用1到K表示状态),那么给定一个观测序列的概率计算公式,结合全概率计算公式:
从上述最原始的概率计算公式可以发现,计算的时间复杂度为,该计算方式需要枚举出所有可能的隐含状态序列的取值,因此不可取,需要利用快速的计算方法。
前向算法,后向算法,前向后向算法,就是利用动态规划的算法,将时间复杂度降低到,与序列长度呈平方关系,而不是指数关系。
首先,先定义前向算法和后向算法的公式,他们分别为:
- 前向算法:给定一个联合概率:, 表示在时刻,给定了隐含状态的取值为,观测序列为的联合概率;
- 后向算法:给定一个条件概率:
为什么说前向算法可以用于计算呢?根据前向算法的定义,
- 当时,,那么根据全概率公式:
如果前后算法能够在线性时间内完成计算,那么亦可以在线性时间内完成计算。同理,如果利用后向算法来计算观测序列的概率:
- 当t=0时,,那么:
下面将对前向算法,后向算法进行介绍,主要是推导出动态规划中的状态转移方程。
前向算法
由于我们的目标是推导出动态规划中的状态转移方程,即找到当前时刻与的关系,所以我们需要凑出这个两者之间的关系,根据前向算法中定义的联合概率公式:
下面针对上述推导公式的每一步进行说明:
- 第一步,是一个全概率公式,我们在原始的公式中,新增了一个隐变量,为了与原始概率等价,需要将其积分掉,或者说利用全概率公式,令其取值遍历整个状态的取值;
- 第二步,贝叶斯公式,但是我们需要注意的是,由于我们的目标是找到与的关系,因此将贝叶斯公式转换成了如上的形式,根据前向算法的公式定义:;
- 第三步, 公式中直接推导出了发射概率和转移概率的形式,下面对其进行推导,又是一通贝叶斯公式:由于HMM中的输出只与有关,因此,
- 第四步,由于发射概率与无关,所有可以移到外面,最终得到整个状态转移方程
通过图表的形式,可以展示出前向算法的流程如下图所示,在前向算法中运算次数是次,因此整个时间复杂度为。
后向算法
对于后向算法,顾名思义,就是从时间开始计算,依次计算, , ,对于后向算法,也需要根据定义推导出和的关系,即等式右边要提前算出,这样计算前一个时刻时才不会重复计算
通过图表的形式,可以展示出前向算法的流程如下图所示,在前向算法中由于是从右到左依次填充各列的
前向后向算法
上述前向算法和后向算法都可以用于计算观测序列出现的概率,那么当给定观测序列, 计算在时刻,的条件概率,即:
即通过前向算法和后向算法,可以计算得到在任务时刻隐含状态的概率(条件概率)
CRF中的概率计算问题
在上一篇文章中,我们从Log-Linear模型的角度,推导出了CRF模型的形式,参数学习方法,CRF模型可以表示为:
同时,根据指数函数的运算法则,可以对上述形式做如下变换:
有了上述形式,定义在序列的第个位置,由状态转移到的非规范化概率为:
所以上述等式,可以再次等价为:
前向算法
首先,先给出CRF模型中的前向算法中要计算的东西是什么,其定义与HMM是一致的,都是要计算出在时刻上对应的隐含状态的概率,在CRF中是条件概率,在HMM中是联合概率,对比如下:
HMM中前向算法计算的概率为
:CRF中前向算法计算的概率为
:,根据定义,上一时刻可以表示为:,和都是具体的隐含状态取值,为了区分不同时刻的不同状态,故这样写。
下面对CRF前向算法进行推导,得到 和 的状态转移方程,假定隐含状态的取值有K个状态,
下面针对上述推导公式的每一步进行说明:
第一步:全概率公式,增加了上一个隐含时刻的具体取值;
第二步:贝叶斯公式;
第三步:贝叶斯公式,改变条件概率的形式,主要是需要凑出和条件转移概率;
第四步:还是贝叶斯公式,主要是对进行展开;
第五步:消去
第六步:替换,得到 和 的状态转移方程;同时第6步中根据CRF中概率转移的特点,可以发现与是独立的,只与有关;
第七步:在上述公式中出现了一个概率转移公式(第6行):,其表示的意思为,对于隐含状态的第时刻,在给定观测序列和上一时刻隐含状态为时,转移到(即从状态转移到)的概率,根据CRF模型整体的条件概率公式,见上一小节,公式中的,表示的就是在第个时刻,从转移到的非规范概率,为了简洁起见,我们利用下面的符号来代替(这里面没有值定状态的具体取值,实际计算时需要指定):
至此,我们完成了前向算法的推导过程,在有些参考资料中,还会引入矩阵的形式
,在上式中表示的是的一个状态的概率取值,如果利用表示所有的状态向量(维列向量):
同理:
同时利用来表示在时刻上,从状态转移到的非规范化概率矩阵,相比于HMM模型,CRF模型在各个位置上(时间点上)都有特定的概率转移矩阵, 即
最终:
举例,当时刻的的隐含状态为1时概率计算:
后向算法
CRF中后向算法的计算的条件概率为:
CRF中后向算法计算的概率为
:, 因此下一时刻的表达式为,,和都是具体的隐含状态取值,为了区分不同时刻的不同状态,故这样写。
与前向算法的推导类似,需要构造出和的关系,下面开始推导,部分内容不进行解释,如果疑问,可以参考前向算法:
总结
动态规划思想是一种很好的解决问题的思想,在HMM和CRF中,通过设计前向,后向算法加快了概率计算。相比于大部分内容都是原文摘抄统计学习的介绍性文章,本文的推导过程,易于理解,让有需要的同学理解动态规划之美,同时本文也有遗憾,对于CRF的概率计算部分,未完成,至今还没有解决第二篇文章留下的天坑。