模型背景
隐马尔可夫模型(HMM)来源于马尔科夫模型。马尔科夫模型中,整个系统是可观察的。但是现实中,系统分为可观察和不可观察两个部分。HMM模型将系统t时刻的状态分为了不可观测部分xt和可观测部分yt。HMM模型的状态变化如图所示:
两个基本假设
1、 齐次假设
t+1时刻状态
xt+1
仅于t时刻状态
xt
有关,与
x1...t−1
,
y1...t
独立。
2、观察独立假设
t时刻观察值yt仅与对应时刻状态xt有关,与
x1...t−1
,
y1...t−1
独立。
三个参数值
设序列长度为T,状态取值为S = {si},观测值取值为V = {vk}。
1、初始状态概率分布
pi
。
2、状态转移概率矩阵A。
3、符号发射概率矩阵B。
模型的三个参数合起来记为 μ=(A,B,π)
三个基本问题
1、估计问题
已知参数
μ
和观测序列y,计算序列y出现的概率。
2、序列问题
已知参数
μ
和观测序列y,估计最可能的状态变化序列X。
3、学习问题
已知观测序列Y,计算模型参数
μ
。
估计问题(动态规划!)
计算P(Y | μ ), 可以由 ∑XP(Y,X|μ) 。联合分布可以计算,然而求边缘分布时需要枚举状态序列X的所有排列,计算量随着序列的长度指数增长。因此该方法不适用。
展开表达式 ∑XP(Y,X|μ) ,有:
其中连乘项可以分布求和,就是依次进行 ∑x1 , ∑x2.... , ∑xT ,如此可以大大简化计算量。
根据该思想,就能够得到解决估计问题的方法:前向传播法。基本的思路是从t=1时刻开始,计算每个状态取值si的概率并保存起来,在计算t+1时刻状态取值sj的概率时用t时刻保存的概率计算。也就是 P(xt+1=sj)=∑iP(xt=si)ai,j
实际算法中,定义前向变量
αt(i)=
P(O1,O2,...Ot,xt=si)
,算法分为三步:
1、初始化:
2、迭代:
3、求和终结:
学习问题(EM算法!)
由于无法观察到状态X的取值,使用EM算法,基本思路是:
第一步,E-步骤:由模型 μ 和观察值O计算隐含状态X。
第二步,M-步骤:由观察值O和隐含状态X重新计算模型 μ
HMM模型应用
1、语音识别
观察值为音频输入,隐含状态为语音对应的文字内容。
2、机器翻译
观察值为源语言,隐含状态为目标语言。
3、中文分词
观察值为句子输入,隐含状态为分词结果。
理解
隐马尔可夫模型考虑了过去状态对当前状态的影响,可以说在建模过程中考虑到了上下文对当前输出的影响。但是这种“记忆力”比较短,只能保留一个时间单位。
和RNN的比较
在深度学习如此热门的情况下,发现HMM似乎仍然在很多问题中有应用,于是很好奇RNN有哪些优劣。网络中得到了以下答案:
1、RNN不存在马尔科夫假设。(RNN根本就不是个概率模型嘛)理论上RNN长时记忆力好,但是使用梯度下降方法仍然难以训练出很好的长时记忆力。因此模型中会使用n-gram 作为输入来增加模型的记忆力。
2、RNN的优势在于极好的模型拟合能力(神经网络都有)。同时RNN模型中考虑了句式和语义信息,能够得到不错的平滑性。
3、CRF是另一种可以参与比较的模型。CRF模型强大,与RNN相比有各自不同的优势。