隐马尔可夫模型(Hidden Markov Model, HMM)是关于时序的概率模型,在自然语言处理如语音识别、机器翻译等领域有着广泛的应用。模型的核心是马尔科夫链+独立输出假设。
1 模型描述
给定状态集合
{
q
1
,
q
2
,
.
.
.
,
q
N
}
\left\{ q_1,q_2,...,q_N \right\}
{q1,q2,...,qN}和观测集合
{
v
1
,
v
2
,
.
.
.
,
v
M
}
\left\{ v_1,v_2,...,v_M \right\}
{v1,v2,...,vM},已知一个状态能够随机地生成一个观测,在不同时刻,状态之间能够发生转移,现随机地选择一个状态作为初始状态,于是系统在运行一段时间后,该过程构成了状态和观测的两个序列。比如,在第1时刻状态处在
s
1
s_1
s1,它生成了观测
o
1
o_1
o1,第2时刻状态转移至
s
2
s_2
s2,它生成了观测
o
2
o_2
o2,…,第T时刻状态转移至
s
T
s_T
sT,它生成了观测
o
T
o_T
oT,那么形成的状态序列为
S
=
(
s
1
,
s
2
,
.
.
.
,
s
T
)
S=(s_1,s_2,...,s_T)
S=(s1,s2,...,sT),观测序列为
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
O=(o_1,o_2,...,o_T)
O=(o1,o2,...,oT),如下图。
现假设上述系统中(1)某时刻的状态只与其前一时刻的状态有关,而与其他的状态和观测无关(2)任一时刻的观测只与该时刻的状态有关,而与其他的状态和观测无关,于是对形如这样一个状态转移和生成观测过程的描述,叫做隐马尔可夫模型。其中,状态转移的过程叫做马尔可夫过程或马尔科夫链。
注意到,初始状态是随机的,状态转移是随机的,观测生成是随机的,因此隐马尔可夫模型可以由一个三元组
(
π
,
A
,
B
)
\left( \pi,A,B \right)
(π,A,B)来描述,其中
π
\pi
π是初始状态概率向量,表征了初始时刻处于某个状态的概率;
A
A
A是状态转移概率矩阵,表征了从当前状态转移到另一个状态的概率;
B
B
B是观测概率矩阵,表征了由某状态生成某观测的概率。在实际问题中,观察者往往只能够看到观测序列,而看不到状态序列,因此称状态序列是隐藏的序列,模型也因而得名。
2 示例
例1(来自《统计学习方法》)
有4个盒子,每个盒子内装有红白两种颜色的球,球数如下表
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
现按照下面的方法取球,产生一个球的颜色的观测序列:开始,从4个盒子里以等概率随机选取1个盒子,从这个盒子里随机抽出1个球,记录其颜色后,放回;然后,从当前盒子随机转移到下一个盒子,规则是:如果当前盒子是盒子1,那么下一盒子一定是盒子2,如果当前是盒子2或3,那么分别以概率0.4和0.6转移到左边或右边的盒子,如果当前是盒子4,那么各以0.5的概率停留在盒子4或转移到盒子3;确定转移的盒子后,再从这个盒子里随机抽出1个球,记录其颜色,放回;如此下去,重复进行5次,得到一个球的颜色的观测序列:
O
=
{
红
,
红
,
白
,
白
,
红
}
O=\left\{ 红, 红, 白, 白, 红 \right\}
O={红,红,白,白,红}
在这个过程中,观察者只能观测到球的颜色的序列,观测不到球是从哪个盒子取出的,即观测不到盒子的序列。
在这个例子中有两个随机序列,一个是盒子的序列(状态序列),一个是球的颜色的观测序列(观测序列)。前者是隐藏的,只有后者是可观测的。根据所给条件,可以明确状态集合、观测集合、序列长度以及模型的三要素。
盒子对应状态,状态的集合是
Q
=
{
盒
子
1
,
盒
子
2
,
盒
子
3
,
盒
子
4
}
Q=\left\{ 盒子1, 盒子2, 盒子3, 盒子4 \right\}
Q={盒子1,盒子2,盒子3,盒子4}
球的颜色对应观测,观测的集合是
V
=
{
红
,
白
}
V=\left\{ 红, 白 \right\}
V={红,白}
状态序列和观测序列长度 T = 5 T=5 T=5.
初始状态概率向量为
π
=
(
0.25
,
0.25
,
0.25
,
0.25
)
T
\pi=\left( 0.25, 0.25, 0.25, 0.25 \right)^{T}
π=(0.25,0.25,0.25,0.25)T
状态转移概率矩阵为
[
0
1
0
0
0.4
0
0.6
0
0
0.4
0
0.6
0
0
0.5
0.5
]
\left[ \begin{matrix} 0 & 1 & 0 & 0 \\ 0.4 & 0 & 0.6 & 0 \\ 0 & 0.4 & 0 & 0.6 \\ 0 & 0 & 0.5 & 0.5 \end{matrix} \right]
⎣⎢⎢⎡00.400100.4000.600.5000.60.5⎦⎥⎥⎤
观测概率矩阵为
[
0.5
0.5
0.3
0.7
0.6
0.4
0.8
0.2
]
\left[ \begin{matrix} 0.5 & 0.5 \\ 0.3 & 0.7 \\ 0.6 & 0.4 \\ 0.8 & 0.2 \end{matrix} \right]
⎣⎢⎢⎡0.50.30.60.80.50.70.40.2⎦⎥⎥⎤
例2
小明某一天中的生活状态包括吃饭、睡觉、看书、跑步,可能穿的衣服有睡衣、休闲衣、运动衣。已知某一刻他恰在吃饭的概率为0.2,在睡觉的概率为0.4,在看书的概率为0.3,在跑步的概率为0.1。
他吃饭之后,睡觉的概率是0.8,看书的概率是0.2;睡觉醒来之后,仍有困意而继续睡觉的概率是0.2,看书的概率是0.6,跑步的概率是0.2;看完书之后,吃饭的概率是0.4,睡觉的概率是0.4,跑步的概率是0.2;跑完步之后,吃饭的概率是0.6,睡觉的概率是0.3,看书的概率是0.1。
他在吃饭时,穿睡衣的概率是0.2,穿休闲衣的概率是0.5,穿运动衣的概率是0.3;他在睡觉时,穿睡衣的概率是0.8,穿休闲衣的概率是0.1,穿运动衣的概率是0.1;他在看书时,穿睡衣的概率是0.2,穿休闲衣的概率是0.6,穿运动衣的概率是0.2;他在跑步时,穿睡衣的概率是0.1,穿休闲衣的概率是0.2,穿运动衣的概率是0.7.
现观察小明某天穿着的衣服,得到一个衣服穿着种类的次序为:穿休闲衣、穿睡衣、穿休闲衣、穿运动衣。
本例中产生了两个序列,一个是活动种类的序列(状态序列),一个是衣服穿着序列(观测序列),对观测者而言,仅看到了穿着的衣服,而看不到活动,因此衣服序列是可见的,活动序列是隐藏的。根据题设条件,可以明确状态集合、观测集合、序列长度以及模型的三要素。
状态集合
Q
=
{
吃
饭
,
睡
觉
,
看
书
,
跑
步
}
Q=\left\{ 吃饭, 睡觉, 看书, 跑步 \right\}
Q={吃饭,睡觉,看书,跑步}
观测集合
V
=
{
穿
睡
衣
,
穿
休
闲
衣
,
穿
运
动
衣
}
V=\left\{ 穿睡衣, 穿休闲衣, 穿运动衣 \right\}
V={穿睡衣,穿休闲衣,穿运动衣}
状态序列和观测序列的长度 T = 4 T=4 T=4.
初始状态概率向量
π
=
(
0.2
,
0.4
,
0.3
,
0.1
)
T
\pi=\left( 0.2,0.4,0.3,0.1 \right)^{T}
π=(0.2,0.4,0.3,0.1)T
状态转移概率矩阵
[
0
0.8
0.2
0
0
0.2
0.6
0.2
0.4
0.4
0
0.2
0.6
0.3
0.1
0
]
\left[ \begin{matrix} 0 & 0.8 & 0.2 & 0 \\ 0 & 0.2 & 0.6 & 0.2 \\ 0.4 & 0.4 & 0 & 0.2 \\ 0.6 & 0.3 & 0.1 & 0 \end{matrix} \right]
⎣⎢⎢⎡000.40.60.80.20.40.30.20.600.100.20.20⎦⎥⎥⎤
观测概率矩阵
[
0.2
0.5
0.3
0.8
0.1
0.1
0.2
0.6
0.2
0.1
0.2
0.7
]
\left[ \begin{matrix} 0.2 & 0.5 & 0.3 \\ 0.8 & 0.1 & 0.1 \\ 0.2 & 0.6 & 0.2 \\ 0.1 & 0.2 & 0.7 \end{matrix} \right]
⎣⎢⎢⎡0.20.80.20.10.50.10.60.20.30.10.20.7⎦⎥⎥⎤
3 三个基本问题
围绕着隐马尔可夫模型有三个基本问题。
(1)概率计算问题:给定模型,如何计算某个特定输出序列的概率。
该问题可以由前向算法或后向算法解决。前向算法的基本思想是,从第一时刻起,递推地计算到各时刻时对应的输出子序列的累计概率(前向概率),计算至最后一个时刻时,将各状态的前向概率相加,即为整个输出序列的概率。后向算法则反过来,从后向前进行计算。
(2)学习问题:给定足够量的观测数据,如何估计出隐马尔可夫模型的参数,使得在该模型下观测序列的概率最大。
该问题也就是对模型的训练问题,即对一堆观测数据,想要用隐马尔可夫模型来描述它,如何训练出参数
(
π
,
A
,
B
)
\left( \pi,A,B \right)
(π,A,B)。问题的解决分有监督的方式和无监督的方式。
有监督的学习方式指训练数据中既包括了观测值也包括了对应的状态值,也即,该方式需要进行足够多的人工标记,而在许多实际问题中,无法做到或做这件事的代价非常高,因此该方式并不足够实用。
无监督的学习方式指仅通过大量的观测数据就较好地学习出模型参数,主要使用的是Baum-Welch算法。Baum-Welch算法是EM算法在隐马尔可夫模型学习问题上的具体实现,它的基本思想是,先指定一组初始参数,然后通过在当前参数下对观测数据的概率计算和对状态路径的统计,得到一组新的参数(该过程称为一次迭代,每次迭代能够找到一组更好的参数),反复迭代,直至模型的质量没有明显提高了为止。
(3)预测问题(解码问题):给定模型和输出序列,如何找到最有可能产生这个输出的状态序列。
该问题也是自然语言处理中最直接的问题,即如何通过观测信号确定最有可能的对应的实际含义。在不同的应用中,
P
(
s
1
,
s
2
,
s
3
,
.
.
.
∣
o
1
,
o
2
,
o
3
,
.
.
.
)
P\left( s_1,s_2,s_3,...| o_1,o_2,o_3,...\right)
P(s1,s2,s3,...∣o1,o2,o3,...)的名称各不相同,在语音识别中称为“声学模型”,在机器翻译中称为“翻译模型”,在拼写校正中称为“纠错模型”。在输出序列对应的最优状态序列上,每个状态位置是状态集合中的元素之一,因此该问题等价于在所有状态节点构成的有向网络中找出一条概率最大的路径(最优路径)。如下图。
这个问题是通过维特比算法来解决的。由反证法易知,在最优路径中,起始点到任一点的子路径一定是该段所有可达路径中的最优路径,于是维特比算法便是用动态规划的方式递推地计算每一层每个点,在每个点处选出到达当前点的最优路径,每层的计算结果在下一层得到直接的应用。这样,算至最后一层时,在到达各点的最优路径中选出概率最大的那条,就是整个问题的最优解。
End.
参考
- 吴军. 数学之美(第二版). 人民邮电出版社.
- 李航. 统计学习方法. 清华大学出版社.
- 周志华. 机器学习. 清华大学出版社.(西瓜书)