1、马尔科夫过程:算法
在已知目前状态(如今)的条件下,它将来的演变(未来)不依赖于它以往的演变 (过去 )。例如森林中动物头数的变化构成——马尔可夫过程。在现实世界中,有不少过程都是马尔可夫过程,如液体中微粒所做的布朗运动、传染病受感染的人数、车站的候车人数等,均可视为马尔可夫过程。函数
2、马尔科夫链:工具
时间和状态都是离散的马尔可夫过程称为马尔可夫链,简记为Xn=X(n),n=0,1,2…学习
3、马尔可夫模型(Markov Model):spa
是一种统计模型,普遍应用在语音识别,词性自动标注,音字转换,几率文法等各个天然语言处理等应用领域。通过长期发展,尤为是在语音识别中的成功应用,使它成为一种通用的统计工具。xml
一个马尔科夫过程包括一个初始向量和一个状态转移矩阵。关于这个假设须要注意的一点是状态转移几率不随时间变化。blog
4、隐马尔科夫模型:it
(1)概述io
在某些状况下马尔科夫过程不足以描述咱们但愿发现的模式。譬如,一个隐居的人可能不能直观的观察到天气的状况,可是有一些海藻。民间的传说告诉咱们海藻的状态在某种几率上是和天气的状况相关的。在这种状况下咱们有两个状态集合,一个能够观察到的状态集合(海藻的状态)和一个隐藏的状态(天气的情况)。咱们但愿能找到一个算法能够根据海藻的情况和马尔科夫假设来预测天气的情况。bfc
其中,隐藏状态的数目和能够观察到的状态的数目多是不同的。在语音识别中,一个简单的发言也许只须要80个语素来描述,可是一个内部的发音机制能够产生不到80或者超过80种不一样的声音。同理,在一个有三种状态的天气系统(sunny、cloudy、rainy)中,也许能够观察到四种潮湿程度的海藻(dry、dryish、damp、soggy)。在此状况下,能够观察到的状态序列和隐藏的状态序列是几率相关的。因而咱们能够将这种类型的过程建模为一个隐藏的马尔科夫过程和一个和这个马尔科夫过程几率相关的而且能够观察到的状态集合。
(2)HMM的模型表示
HMM由隐含状态S、可观测状态O、初始状态几率矩阵pi、隐含状态几率转移矩阵A、可观测值转移矩阵B(混淆矩阵)组成。
pi和A决定了状态序列,B决定了观测序列,所以,HMM能够由三元符号表示:
HMM的两个性质:
1. 齐次假设:
2.观测独立性假设:
齐次假设:本质就是时刻t的状态为qi,本来是要给定t时刻以前的全部状态和观测才能够肯定,可是其实咱们给出前一个时刻t-1的状态就可将t时刻与以前隔断,也就是说咱们假设t时刻与t-1以前的全部状态和观测是独立的。
观测独立性假设:本质就是t时刻的观测为ot,本来是要给定包括t时刻和t时刻以前全部的观测和状态才能肯定,如今咱们给定t时刻状态qi就将ot与前边隔断,也就是说咱们假设t时刻的观测ot与t时刻以前的全部状态和观测是独立的
(3)HMM的三个问题
几率计算问题:前向-后向算法----动态规划
给定模型 λ = (A, B, π)和观测序列O={o1, o2, o3 ...},计算模型λ下观测O出现的几率P(O | λ)
学习问题:Baum-Welch算法----EM算法
已知观测序列O={o1, o2, o3 ...},估计模型λ = (A, B, π)的参数,使得在该参数下该模型的观测序列P(O | λ)最大
预测问题:Viterbi算法----动态规划
解码问题:已知模型λ = (A, B, π)和观测序列O={o1, o2, o3 ...},求给定观测序列条件几率P(I | O,λ)最大的状态序列I
a)几率计算问题
对于几率计算问题,能够采用暴力计算法、前向算法和后向算法
暴力法:
问题:已知HMM的参数 λ,和观测序列O = {o1, o2, ...,oT},求P(O|λ)
思路:--------------------------------------------------------------------------
步骤:
1,最终目标是求O和I同时出现的联合几率,即:
P(O,I|λ)= P(O|I, λ)P(I|λ)
那就须要求出P(O|I, λ) 和 P(I|λ)。
2,求P(I|λ) ,即状态序列I = {i1,i2, ..., iT} 的几率:
2.1,P(I|λ) = P(i1,i2, ..., iT |λ)
=P(i1 |λ)P(i2, i3, ..., iT |λ)
=P(i1 |λ)P(i2 | i1, λ)P(i3, i4, ..., iT |λ)
=......
=P(i1 |λ)P(i2 | i1, λ)P(i3 | i2, λ)...P(iT | iT-1, λ)
而上面的P(i1 |λ) 是初始为状态i1的几率,P(i2 | i1, λ) 是从状态i1转移到i2的几率,其余同理,因而分别使用初始几率分布π 和状态转移矩阵A,就获得结果:
PS:上面的ai1i2表明A的第i1行第i2列。
3,P(O|I, λ),即对固定的状态序列I,观测序列O的几率是:
4,代入第一步求出P(O,I|λ)。
5,对全部可能的状态序列I求和获得观测序列O的几率P(O|λ):
时间复杂度:
每一个时刻有n个状态,一共有t个时刻,而根据上面的第5步能够知道每一个时刻状态ai相乘的复杂度为nT,而后乘以各个对应的b,因此时间复杂度大概为:O(TnT)阶
几率消失:
能够经过取对数,防止P的值太小。
前向几率:
前向几率的定义:当第t个时刻的状态为i时,前面的时刻分别观测到q1,q2, ..., qt的几率。
初值:
递推:
最终值:
时间复杂度:
由公式可见,括号里面的时间复杂度为N^2,迭代过程当中,又乘上T个时刻的b,所以,时间复杂度为O(TN^2)阶的。
对于暴力法和前向算法时间复杂度的理解:
对于两种算法,其实本质上都是经过状态 x 观测几率得到的几率值,只不过区别在于,前向算法将每个时刻的状态几率先进行相加而后乘以观测几率,得到最终值。
能够理解为:a1*a2*a3... 若是ai有n种取值,其复杂度为 O(n^T)
对于另外一种表达方式: α*a1 同理 α有n种取值,ai有n种取值,那么复杂度为 O(n^2)
时间复杂度计算:
后向几率和前向几率相似,此处不赘述。
b)学习问题
学习问题分两种:
对于监督学习,利用大数定律“频率的极限是几率”便可求解:
对于非监督学习,通常采用Baum-Welch算法。
对于观测数据Q、隐藏状态I、几率P(Q, I ;λ)即为暴力法的表达式,其对数似然函数为:ln(P(Q, I ;λ)),而后用EM算法求解便可。
求 π:利用约束条件:全部πi的和为1。
拉格朗日函数求解:
同理:
c)预测问题:
对于预测问题,本文主要讲Viterbi算法。Viterbi算法实际是用动态规划的思路求解HMM预测问题。求出几率最大的路径,每一个路径对应一个状态序列。
盒子和球模型λ= (A, B,π),状态集合Q={1, 2, 3},观测集合V={白,黑},已知观测序列“白黑白白黑”,求最优的隐藏状态
同理:
能够看到结果如图:
咱们从后往前查询,第5时刻最大几率的状态为3,而后往前推导,究竟第5个状态是从哪个状态的来的呢?
max{ 0.00384*0.1 0.00768*0.6 0.0144*0.3 } 能够看到,应该取状态2 -> 3才是最大的,故第4个时刻的状态为2。
最终求得最优状态为:2 3 2 2 3
5、viterbi用于词性标注
词性标注问题映射到隐马模型能够表述为:模型中状态(词性)的数目为词性符号的个数N;从每一个状态可能输出的不一样符号(单词)的数目为词汇的个数M。假设在统计意义上每一个词性的几率分布只与上一个词的词性有关(即词性的二元语法),而每一个单词的几率分布只与其词性相关。那么,咱们就能够经过对已分词并作了词性标注的训练语料进行统计,统计出HMM的参数 λ,固然这就是上述学习问题。
而后能够根据已知的词语,经过viterbi算法,求出每一个词语对应的词性,即完成词性标注。