一、学习目标
1.了解马尔科夫模型的基本内容
2.学习隐马尔科夫模型的详细内容与三个主要问题
3.了解隐马尔科夫模型的一个应用
二、马尔科夫模型
1.马尔科夫模型的描述:马尔科夫模型=马尔科夫链
以句子为例子来描述一下,就是我输入了t-1个字(字相当于马尔科夫模型中的状态),那么第t个字是什么,这件事是可以概率得出的,第t个字是什么取决于前t-1个字的内容。根据取决于前面n个字,我们又有n阶马尔科夫链:
2.有了马尔科夫模型后,我们可以画出其状态转化图:
有了马尔科夫模型后,我们要干嘛呢?显然,我们可以去计算某一个状态序列S1,S2,…,ST的概率:
其中aSt,St+1是从St转化St+1的概率。例如:
3.看完马尔可夫模型,感觉上,我们就可以用其去建模我们 的语言模型,统计语料库的各个词的相互转化的概率,从而我们就可以根据输入的前n个单词,输出接下来的词。但是这样的设计是不合理的,其一,模型局限于语料库,其二,状态转化概率矩阵太过稀疏,因为词太多了。于是美国数学家鲍姆等人提出了隐马尔可夫模型。
二、隐马尔科夫模型
1.隐马尔科夫模型:
图形展示为:
相比于马尔科夫模型,多了观测值,以及对应状态输出观测值的概率。太抽象的话可以看下面的例子:
还是不懂的话,我们可以从其应用来理解:还是用句子为例,现在我们要对这个句子分词,球或者观测值就是字词,袋子或者隐状态就是词性,例如“于”这个字,它的意思可能是介词,“在”的意思,但也有可能专有名词姓氏“于”。显然我们只能根据上下文去推测其词性和意思,一个句子就是一串球,模型一开始只能看到这些球(字词),而看不到这些袋子(词性),这样对语言进行建模,有合理性,且状态转换概率矩阵更小(词性的数量比词的数量少)
隐马尔科夫模型除了状态集合S和观测值集合O外,还有三个:状态转移概率矩阵A,状态输出概率矩阵B,初始状态概率分布π
2.有了隐马尔科夫模型后,我们该干嘛呢?主要有三个方面的问题:
(1)关于p(O|μ),我建议大家不要将其理解成O关于μ的后验概率,而是直接理解成p(O),只是p(O)的式子里有参数μ。就像贝努力分布一样:当x为1时,p(x|θ)=θ,当x=0时,p(x|θ)=1-θ。在这里,我们完全可以理解θ就是一个参数,p表示就是x的概率。
关于(1)问题的求解,我们不能简单地统计所有的状态,所有的状态对应输出的概率,因为这样的计算量太大了。如下所示:
于是前人使用动态规划的思想,设计出了前向算法和后向算法:
(1.1)前向算法:
初始化:对于N个状态,计算每个状态是初状态的概率,再乘上该状态输出O1的概率。
循环计算:针对时间从2到T,对每个时间步骤中,先统计从各种状态变换为j状态的概率和,再乘上j状态输出Ot+1的概率。
输出:因为最后一个状态也不确定是1到N的哪一个,所以我们是将所有状态进行累加。
(1.2)后向算法:
初始化:将βT(i)进行展开,会发现式子中没有O,那自然βT(i)就等于1。
循环计算:βt+1(j)表示从T到t+1的一个总的概率表示,前两项是统计在t时刻,从i状态变换为各种状态(j)的概率乘上j状态输出O的概率。
输出:β1(i)表示从2时刻到t时刻的一个总概率,后两项就是i状态为初始状态的概率和i状态输出O1的概率,统计所有i状态。
(2)关于观察到的输出序列O1O2…On,如何找到更合理的对应的状态序列S1S2…Sn的问题。我们同样有两种方法。
(2.1)方法一:对于每一个时刻的输出,我们都找那个概率最大的状态。定义与计算工程如下:
显然,这样的方法是有问题的,由于每个时刻都追求局部最优,也不考虑状态转移之间的概率,必然不合理。
(2.2)方法二:Viterbi搜索算法。采用动态规划策略,搜索全局最优状态序列。我们先看图解:
第一步:通过状态转移矩阵和输出矩阵计算概率计算总概率,然后根据剪枝策略选取其中的比较优的路径(剪枝策略分两种,一种是概率大于某阈值就保留,另一种是取前n条路径),这里我们取前3条路径。
第二步:根据上一步的路径的终点,再计算这些状态节点到别的节点的概率,再选取其中前3条路径。
重复到最后时刻,我们就能确定概率最大的一条路径作为我们的状态序列。该算法的定义和算法流程如下:(注:算法描述中直接取最大值,但实验中我们会设置剪枝策略)
(3)第三个问题是模型参数估计问题,即当前我们有了一个大数据库,我们要设计模型的初始概率矩阵π、状态转移矩阵a,状态输出矩阵b去拟合我们的数据库的统计信息。显然,如果数据库足够大,我们可以计算:
对于数据量较少的情况,一般而言我们的语料库也确实不够的。于是我们使用Baum-Welch算法(前向后向算法):
其中28~30的公式如下:
三、隐马尔科夫模型的应用
1.问题描述:我们这里有两个问题,一个是句子如何分词的问题,一个是“于”这个词的词性是什么的问题:
2.思路:对于分词,O是各种各样分词序列(HMM中的观测值序列),求解argmax p(O|μ)就是找到概率最大的分词序列。对于词性标注,Q是词性序列(HMM中的状态序列),求解argmax p(Q|O,μ)就是找到最大的词性序列。
3.参数估计要求:
4.训练过程:对于语言模型设计与修正,我们采用错误驱动的机器学习方法:
5.训练结果:
四、本章小结
1.马尔可夫模型
2.HMM的构成
3.HMM的三个问题
4.HMM在NLP中的应用