马尔可夫模型是由Andrei A. Markov于1913年提出的
S是一个由有限个状态组成的集合
qt∈S,若有:
则随机序列 X构成一个一阶马尔科夫链。(Markov Chain)
i,j有下面的关系成立:
的概率。
同有限状态自动机类似,状态转移关系也可以用状态转换图来表示。
马尔科可模型举例
天气的变化,三种状态{1(阴天), 2(多云), 3(晴天)}
今天的天气情况仅和昨天的天气状况有关
根据对历史数据的观察得到下列状态转移关系
对于马尔科夫模型,给定了观察序列,同时也就确定了状态转换序列。例如有关天气状况的观察序列
(晴 晴 晴 阴 阴 晴 云 晴)
则状态转换序列为
(3, 3, 3, 1, 1, 3, 2, 3 )
如果把晴天称为状态3的输出,阴天称为状态1的输出,多云称为状态2的输出。根据观察到的输出序列就可以决定模型中的状态转换序列。(状态和输出是一对一的关系)
坛子与小球
M种不同颜色的小球
一个精灵在房间中首先随机地选择一个坛子,再从这个坛子中随机选择一个小球,并把小球的颜色报告给房间外面的人员记录下来作为观察值
精灵然后把球放回到坛子中,以当前的坛子为条件再随机选择一个坛子,从中随机选择一个小球,并报告小球的颜色,然后放回小球,如此继续…,随着时间的推移,房间外的人会得到由这个过程产生的一个小球颜色的序列
如果令每一个坛子对应与一个状态,可以用一个一阶马尔科夫过程来描述坛子的选择过程
在马尔科夫过程中,每个状态只有一个输出,但在坛子和小球的问题中。可以从每个坛子中拿出不同颜色的小球。也就是每个状态能按照特定的概率分布产生多个输出
在坛子与小球问题中,如果给定一个观察序列(不同颜色的小球序列),不能直接确定状态转换序列(坛子的序列),因为状态转移过程被隐藏起来了。所以这类随机过程被称为隐马尔科夫过程
隐马尔可夫模型
(S,V,A,B,π)
是一组状态的集合
n)
V是一组输出符号组成的集合(取Visible之意?)
v1对应红色小球)
N列
A=[aij],aij=P(qt+1=j|qt=i),1≤i,j≤N
B是输出符号的概率分布
vk的概率
bj(k)=P(vk|j),1≤k≤M,1≤j≤N
π={πi}
πi=P(q1=i)表示时刻1选择某个状态的概率
隐马尔可夫过程是一个双重随机过程,其中一重随机过程不能直接观察到,通过状态转移概率矩阵描述。另一重随机过程输出可以观察到的观察符号,这由输出概率来定义
利用隐马尔可夫模型生成观察序列
可以把隐马尔可夫模型看做符号序列的生成装置,按照一定的步骤,隐马尔可夫模型可以生成下面的符号序列:
O=(o1,o2,⋯,oT)
q1=i
ot=vk
qt+1=j
t=t+1,并且转移到算法第2步继续执行,否则结束
抛掷硬币
λ
S={1,2,3}V={H,T}
如下表所示
π={1/3,1/3,1/3}
O=(HHHHTHTTTT)
∙ 问题二: 给定上述模型,若观察到上述抛掷结果,最可能的硬币选择序列(状态转换序列)是什么?
均未知,如何根据观察序列得到它们?
隐马尔可夫模型的三个问题
P(O|λ)? (估算问题) (另一种语言模型)
q=(q1q2q3⋯qT),使得该状态转换序列最有可能产生上述观察序列? (解码问题)
P(O|λ)最大? (学习问题 或 训练问题)
估算观察序列概率
对隐马尔可夫模型而言,状态转换序列是隐藏的,一个观察序列可能由任何一种状态转换序列产生。因此要计算一个观察序列的概率值,就必须考虑所有可能的状态转换序列。
O=(o1o2o3⋯oT)的所有可能的状态转换序列。
P(O,q|λ)=P(O|q,λ)P(q|λ)
考虑所有的状态转换序列,则
O的概率
(2×100−1)×5100≈1072
需要寻找更为有效的计算方法
向前算法
αt(i)=P(o1o2o3⋯ot,qt=i|λ)
o1o2o3⋯ot的概率。
α1(i)=πibi(o1)(1≤i≤N)
αt+1(i)?
αt+1(j)=[∑i=1Nαt(i)aij]bj(Ot+1)1≤t≤T−1,1≤j≤N
向前算法计算步骤
α1(i)=πibi(o1)(1≤i≤N)
αt+1(j)=[∑i=1Nαt(i)aij]bj(Ot+1)1≤t≤T−1,1≤j≤N
P(O|λ)=∑i=1NαT(i)
向后算法
βt(i)=P(ot+1ot+2⋯oT|qt=i,λ)
ot+1ot+2⋯oT的概率
βT(i)=1(1≤i≤N)
βt(i)=∑j=1Naijbj(ot+1)βt+1(j)1≤t≤T−1,1≤j≤N
向后算法计算步骤
βT(i)=1(1≤i≤N)
βt(i)=∑j=1Naijbj(ot+1)βt+1(j)1≤t≤T−1,1≤j≤N
P(O|λ)=∑i=1Nπibi(o1)β1(i)
求解最佳状态转换序列
隐马尔可夫模型的第二个问题是计算出一个能最好解释观察序列的状态转换序列
q∗就是能最好解释观察序列的状态转换序列,即:
同样,这不是一个有效的计算方法,需要寻找更好的计算方法
维特比算法
δt(i)=maxq1,q2,\cots,qt−1P(q1q2⋯qt−1,qt=i,o1o2⋯ot|λ)
q1q2⋯qt的概率。
δ1(i)=πibi(o1),1≤i≤N
\delta_{t+1}(j) = \left[{\mathop {\max}\limits_i \;\delta_t(i)a_{ij}\right]b_j(o_{t+1})
t−1时刻的最佳状态
维特比算法步骤
\1. 初始化
δ1(i)=πibi(o1),1≤i≤N
ψ1(i)=0
\2. 迭代计算
δt(j)=max1≤i≤N[δt−1(i)aij]bj(ot)ψt(j)=argmax1≤i≤N[δt−1aij]
\3. 终止
P^* = \mathop {\max}\limits_{1\le i \le N}}\ \left[delta_T(i)\right] \;\;\;q_T^* = \mathop {\arg \max}\limits_{1 \le i \le N}}\ \left[delta_T(i)\right]
\4. 求解最佳路径
qt∗=ψt+1(qt+1∗),t=T−1,T−2,\codts,1
参数学习
P(O|λ)最大?
隐马尔科夫模型的前两个问题均假设模型参数已知,第三个问题是模型参数未知,求最佳模型的问题,是三个问题中最为困难的问题
有指导的参数学习
λ未知的情况下,如果给定观察序列的同时,也给定了状态转换序列,此时可以通过有指导的学习方法学习模型参数。例如给定下面的训练数据,可以通过最大似然估计法估计模型参数:
H/1H/1T/1T/2H/3T/5…
T/2H/1T/2H/3H/3H/1…
参数学习非常简单,在训练数据足够大的前提下,效果不错
缺点,状态信息未知时无法使用。或者要由人工标注状态信息,代价高
在NLP中,在无指导学习效果不佳时,需要采用有指导学习
无指导的参数学习
λ未知的情况下,如果仅仅给定了观察序列,此时学习模型的方法被称做无指导的学习方法
对于隐马尔科夫模型而言,采用无指导学习方法,没有解析方法。通常要首先给定一组不准确的参数,再通过反复迭代逐步求精的方式调整模型参数,最终使参数稳定在一个可以接受的精度
利用无指导的学习方法估计隐马尔科夫模型参数时,并不能一定保证求得最优模型,一般能得到一个局部最优模型
直观的想法
(ABπ)
由于没有给定状态转换序列,无法计算状态转移的频率、状态输出的频率以及初始状态频率
假定任何一种状态转换序列都可能
对每种状态转换序列中的频次加权处理,计算状态转移、状态输出、以及初始状态的期望频次
(ABπ)
P(q|O,λ)
理论上可行,现实不可行,要考虑所有的状态转移路径需要多次迭代,问题更为严重
需要更为有效的算法,即Baum-Welch算法
Baum-Welch Algorithm
ξt(i,j)=P(qt=i,qt+1=j|O,λ)
j的期望概率
ξt(i,j)可以进一步写成:
i的概率,则有:
i出发的转换的期望概率
j的转换的期望概率
π,A,B,一种合理的估计方法如下
利用上述结论,即可进行模型估算
选择模型参数初始值,初始值应满足隐马尔科夫模型的要求,即:
π¯,A¯,B¯
再将新的参数代入,再次计算更新的参数
如此反复,直到参数收敛
Baum-Welch算法是一种EM算法
γt(i)
λ¯
|log(P(O|λi+1))−log(P(O|λi))|<ε
O
参数最终的收敛点并不一定是一个全局最优值,但一定是一个局部最优值
L.R.Rabiner, A Tutorial on Hidden Markov Models and Selected Applications in Speech recognition, Proc. IEEE, 77(2): 257-286, 1989
隐马尔科夫模型的实现
浮点溢出问题
- 对于韦特比算法,采用取对数的方式
- 对于Baum-Welch算法,采用放大因子
- 对于向前算法采用放大因子以及取对数的方式。