常常用于分词、词性标注、命名实体识别等问题序列标注问题。
一、什么是隐马尔科夫模型
隐马尔科夫模型是关于时序的概率模型,描述一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个状态观测而产生观测随机序列的过程。
隐藏的马尔科夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测随机序列称为观测序列。
序列的每一个位置又可以看作成一个时刻。
设Q是所有可能状态的集合,V是所有可能的观测的集合。
其中,N是可能的状态数,M是可能的观测数。
状态q是不可见的,状态v是可见的。
应用到词性标注问题时,v代表词语,是可以观测到的。q代表我们将要预测的词性(一个词可能有多个词性)是隐含的状态。
应用到分词问题,v代表词语,是可以观察的。q代表我们的标签(B,E这些标签代表一个词的开始于或者中间)。
应用到命名实体识别中,v代表词语,是可以观察的。q代表我们的标签(标签代表地点词,时间词这些)。
I是长度为T的状态序列,O是对应的观测序列。
我们可以看做是给定了一个词(O)和词性(I)的训练集,或者一个词(O)和分词标签(I)的训练集,有了训练数据,再通过训练算法就可以得到解决问题。
我们继续定义A为状态转移概率矩阵:
其中
是在时刻t处于状态qi的条件下在状态t+1转移到qj的概率。B是观测概率矩阵
其中,
是在时刻t处于状态qj的情况下生成观测vk的概率(也就是所谓的“发射概率”与“生成概率”其实是一个概念)
假设π是厨师概率向量:
其中,
隐马尔科夫模型由厨师状态概率向量π、状态转移概率矩阵A和概率预测矩阵B决定。π和A决定状态序列,B决定观测序列。因此,隐马尔科夫模型可以用三元符号表示,如下
,也成为隐马尔科夫模型三要素。
加上状态集合Q与观测序列V,构成了HMM所有需要的条件。
二、隐马尔科夫链的三个基本问题:
1.概率计算问题。
给定模型和观测序列O,计算在模型下观测序列O出现的概率。举个栗子(例子来源于网络):
用python描述这个模型,如下:
在这段代码中,start_probability(π)代表了医生对患者首次访问时HMM所处的状态的信念(他知道患者往往是健康的,所以健康比不健康大)。
transition_probability表示基础Markov链中健康状况的变化。在这个例子中,今天只有30%的机会,如果他今天健康,病人会发烧。发射概率表示患者每天感受的可能性。如果他健康,那么有50%的机会感觉正常;如果他有发烧,那么有60%的机会感到头昏眼花。
第一个问题是求,给定模型的情况下,求某种观测序列出现的概率。
比如,给定的HMM模型参数已知,求出三天观察是(Dizzy,Cold,Normal)的概率是多少?
对应的HMM模型参数已知的意思,就是说的A,B,pi矩阵是已经知道的。
2.学习问题
已知观测序列O=(o1,o2,o3,......,or),估计模型λ参数,使得在该模型下观测序列概率最大,即最大,用极大似然估计法估计参数。
我们已经知道了观测序列是(Dizzy,Cold,Normal),需要求出HMM的参数问题(使得我们的观测序列出现概率最大)。也就是我们上面说的A,B,PI三个矩阵参数。
3.预测问题
我们知道了观测序列是(Dizzy,Cold,Normal),也知道了HMM的参数,让我们求出造成这个观测序列最有可能对应的状态序列。比如说是(Healthy,Healthy,Fever)还是(Healthy,Healthy,Healthy),等等,这里有3的3次方27种可能~