8 Markov(马尔科夫模型)
HMM(隐马尔科夫模型)
本文Github仓库已经同步文章与代码https://github.com/Gary-code/Machine-Learning-Park/tree/main/Part1%20Machine%20Learning%20Basics
代码说明:
文件名 | 说明 |
---|---|
markov_tag.ipynb | HMM模型对NLTK自带的Brown词库进行词性标注 |
隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在自然语言处理,模式识别等领域得到广泛的应用。
当然,随着深度学习的崛起,其逐渐被RNN,LSTM,Transformer等神经网络模型替代,但其中的思想仍然非常值得研究者去学习,由于本专栏专注于对基础知识的挖掘,因此对HMM会做深入的探究。
8.1 模型基础
使用HMM的问题特征:
- 问题基于序列
- 时间序列
- 状态序列
- 两类数据
- 可观测(观测序列)
- 不可观测(隐藏序列)
比如:
我现在在打字写博客,我在键盘上敲出来的一系列字符就是观测序列,而我实际想写的一段话就是隐藏序列,输入法的任务就是从敲入的一系列字符尽可能的猜测我要写的一段话,并把最可能的词语放在最前面让我选择,这就可以看做一个HMM模型了。
下面我们通过数学形式来表达HMM模型
对于HMM模型,首先我们假设
Q
Q
Q是所有可能的隐藏状态的集合,
V
V
V是所有可能的观测状态的集合,即:
Q
=
{
q
1
,
q
2
,
…
,
q
N
}
,
V
=
{
v
1
,
v
2
,
…
v
M
}
Q=\left\{q_{1}, q_{2}, \ldots, q_{N}\right\}, V=\left\{v_{1}, v_{2}, \ldots v_{M}\right\}
Q={q1,q2,…,qN},V={v1,v2,…vM}
其中,
N
N
N是可能的隐藏状态数,
M
M
M是所有的可能的观察状态数。
对于一个长度为
T
T
T的序列,
I
I
I对应的状态序列,
O
O
O是对应的观察序列,即:
I
=
{
i
1
,
i
2
,
…
,
i
T
}
,
O
=
{
o
1
,
o
2
,
…
o
T
}
I=\left\{i_{1}, i_{2}, \ldots, i_{T}\right\}, O=\left\{o_{1}, o_{2}, \ldots o_{T}\right\}
I={i1,i2,…,iT},O={o1,o2,…oT}
其中,任意一个隐藏状态
i
t
∈
Q
i_t \in Q
it∈Q,任意一个观察状态
o
t
∈
V
o_t \in V
ot∈V
同时HMM模型做出两个重要的假设:
-
齐次马尔科夫链假设。(对隐藏状态而言)即任意时刻的隐藏状态只依赖于它前一个隐藏状态,如果在时刻 t t t的隐藏状态是 i t = q i i_t=q_i it=qi,在时刻 t + 1 t+1 t+1的隐藏状态是 i t + 1 = q j i i_{t+1}=q_{ji} it+1=qji, 则从时刻tt到时刻 t + 1 t+1 t+1的HMM状态转移概率 a i j a_ij aij可以表示为:
a i j = P ( i t + 1 = q j ∣ i t = q i ) a_{i j}=P\left(i_{t+1}=q_{j} \mid i_{t}=q_{i}\right) aij=P(it+1=qj∣it=qi)
a i j a_{ij} aij可以组成==马尔科夫链状态转移矩阵 = = == ==:
A = [ a i j ] N × N A = [a_{ij}]_{N \times N} A=[aij]N×N -
观测独立性假设。(对于隐藏状态生成观测状态的概率)即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。
如果在时刻 t t t的隐藏状态是 i t = q j i_t=q_j it=qj, 而对应的观察状态为 o t = v k o_t=v_k ot=vk, 则该时刻观察状态 v k v_k vk在隐藏状态 q j q_j qj下生成的概率为 b j ( k ) b_j(k) bj(k),则:
b j ( k ) = P ( o t = v k ∣ i t = q j ) b_{j}(k)=P\left(o_{t}=v_{k} \mid i_{t}=q_{j}\right) bj(k)=P(ot=vk∣it=qj)
b j ( k ) b_j(k) bj(k)可以组成==观测状态生成的概率矩阵==:
B = [ b j ( k ) ] N × M B=\left[b_{j}(k)\right]_{N \times M} B=[bj(k)]N×M -
除此意外,对于初始的状态信息,我们还要做出假设。要一组在时刻 t = 1 t=1 t=1的==隐藏状态概率分布==:
Π = [ π ( i ) ] N 其中 π ( i ) = P ( i 1 = q i ) \Pi=[\pi(i)]_{N} \text { 其中 } \pi(i)=P\left(i_{1}=q_{i}\right) Π=[π(i)]N 其中 π(i)=P(i1=qi)一个HMM模型,可以由隐藏状态初始概率分布 Π \Pi Π, 状态转移概率矩阵 A A A和观测状态概率矩阵 B B B决定。 Π , A \Pi,A Π,A决定状态序列, B B B决定观测序列。因此,HMM模型可以由一个三元组 λ \lambda λ表示如下:
λ = ( A , B , Π ) \lambda=(A, B, \Pi) λ=(A,B,Π)8.2 HMM例子
例子来源于李航的《统计学习方法》
假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:
盒子 1 2 3 红球数 5 4 7 白球数 5 6 3
按照下面的方法从盒子里抽球
-
开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。
-
然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。
- 如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。
- 如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。
-
如此下去,直到重复三次,得到一个球的颜色的观测序列:
O = { 红 , 白 , 红 } O = \{红,白,红\} O={红,白,红}注意在这个过程中,观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的。
观察集合为 V = { 红 , 白 } , M = 2 V=\{红,白\},M=2 V={红,白},M=2,状态集合为 Q = { 盒 子 1 , 盒 子 2 , 盒 子 3 } , N = 3 Q=\{盒子1,盒子2,盒子3\},N=3 Q={盒子1,盒子2,盒子3},N=3
观察序列和状态序列的长度为3
-
初始状态分布为:
Π = ( 0.2 , 0.4 , 0.4 ) T \Pi = (0.2, 0.4, 0.4)^T Π=(0.2,0.4,0.4)T -
状态转移概率分布矩阵 A A A:
A = ( 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ) A=\left(\begin{array}{lll} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \end{array}\right) A=⎝⎛0.50.30.20.20.50.30.30.20.5⎠⎞ -
观测状态概率矩阵 B B B:
B = ( 0.5 0.5 0.4 0.6 0.7 0.3 ) B=\left(\begin{array}{ll} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{array}\right) B=⎝⎛0.50.40.70.50.60.3⎠⎞
8.3 HMM模型特征
HMM模型观察序列生成
-
根据初始状态概率分布 Π \Pi Π生成隐藏状态 i 1 i_1 i1
-
for t from 1 to T
- 按照隐藏状态 i t i_t it的观测状态分布 b i t ( k ) b_{i_t}(k) bit(k)生成观察状态 o t o_t ot
- 按照隐藏状态 i t i_t it的状态转移概率分布产生隐藏状态 i t + 1 i_{t+1} it+1
-
所有的 o t o_t ot一起形成观测序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} O={o1,o2,...oT}
经典的三个问题
1) 评估观察序列概率。需要用到前向后向算法。(简单)
2)模型参数学习问题。需要用到基于EM算法的鲍姆-韦尔奇算法。(难)
3)预测问题,也称为解码问题。需要用到基于动态规划的维特比算法。(居中)