隐马尔可夫模型(HMM)
1、模型背景
现实生活中很多事情的发生都是有规律可循的,即表现出来的结果,受到某些“隐藏”因素的影响。举个例子,某个人事业成功与否,这与他自身是否努力有一定关系的。其表现出来的状态是成功或者失败,而隐藏的影响因素为努力与否。对于类似这类问题可以通过统计学的方法,计算表现结果为X的情况下,隐藏状态为Y的概率即 P ( Y ∣ X ) P(Y|X) P(Y∣X)。利用这个概率可以将给定的表现结果X,标注上其最有可能对应的隐藏状态Y。这就是机器学习中样本标注的过程。
贝叶斯公式:
P
(
A
∣
B
)
=
P
(
A
B
)
P
(
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
(1)
P(A|B) = \cfrac{P(AB)}{P(B)} = \cfrac{P(B|A) P(A)}{P(B)}\tag1
P(A∣B)=P(B)P(AB)=P(B)P(B∣A)P(A)(1)
X
=
{
x
1
,
x
2
,
⋯
,
x
n
}
Y
=
{
y
1
,
y
2
,
⋯
,
y
n
}
X = \{x_1,x_2,\cdots,x_n\}Y = \{y_1,y_2,\cdots,y_n\}
X={x1,x2,⋯,xn}Y={y1,y2,⋯,yn}
P
(
Y
∣
X
)
=
P
(
y
1
,
y
2
,
.
.
.
,
y
n
∣
x
i
,
x
2
,
⋯
,
x
n
)
=
P
(
x
1
,
x
2
,
.
.
.
,
x
n
∣
y
1
,
y
2
,
⋯
,
y
n
)
P
(
y
1
,
y
2
,
⋯
,
y
n
)
P
(
x
1
,
x
2
,
⋯
,
x
n
)
∝
P
(
x
1
,
x
2
,
.
.
.
,
x
n
∣
y
1
,
y
2
,
⋯
,
y
n
)
P
(
y
1
,
y
2
,
⋯
,
y
n
)
\begin{aligned} P(Y|X) &= P(y_1,y_2,...,y_n|x_i,x_2,\cdots,x_n)\\ &= \cfrac{P(x_1,x_2,...,x_n|y_1,y_2,\cdots,y_n) P(y_1,y_2,\cdots,y_n)}{P(x_1,x_2,\cdots,x_n)}\\ & \propto P(x_1,x_2,...,x_n|y_1,y_2,\cdots,y_n) P(y_1,y_2,\cdots,y_n) \end{aligned}
P(Y∣X)=P(y1,y2,...,yn∣xi,x2,⋯,xn)=P(x1,x2,⋯,xn)P(x1,x2,...,xn∣y1,y2,⋯,yn)P(y1,y2,⋯,yn)∝P(x1,x2,...,xn∣y1,y2,⋯,yn)P(y1,y2,⋯,yn)
其中
P
(
y
1
,
y
2
,
⋯
,
y
n
)
=
P
(
y
1
)
P
(
y
2
,
⋯
,
y
n
∣
y
1
)
=
P
(
y
1
)
P
(
y
2
∣
y
1
)
P
(
y
3
,
⋯
,
y
n
∣
y
1
,
y
2
)
=
P
(
y
1
)
P
(
y
2
∣
y
1
)
P
(
y
3
∣
y
1
,
y
2
)
P
(
y
4
,
⋯
,
y
n
∣
y
1
,
y
2
,
y
3
)
=
P
(
y
1
)
P
(
y
2
∣
y
1
)
P
(
y
3
∣
y
1
,
y
2
)
⋯
P
(
y
i
∣
y
1
,
⋯
,
y
i
−
1
)
P
(
y
i
+
1
,
⋯
,
y
n
∣
y
1
,
⋯
,
y
i
)
=
P
(
y
1
)
∏
i
=
2
n
P
(
y
i
∣
y
1
,
⋯
,
y
i
−
1
)
\begin{aligned} P(y_1,y_2,\cdots,y_n) &= P(y_1) P(y_2,\cdots,y_n|y_1)\\ &=P(y_1) P(y_2|y_1) P(y_3,\cdots,y_n|y_1,y_2)\\ &=P(y_1) P(y_2|y_1) P(y_3|y_1,y_2) P(y_4,\cdots,y_n|y_1,y_2,y_3)\\ &=P(y_1) P(y_2|y_1) P(y_3|y_1,y_2)\cdots P(y_i|y_1,\cdots,y_{i-1}) P(y_{i+1},\cdots,y_n|y_1,\cdots,y_i)\\ &=P(y_1)\prod_{i=2}^n P(y_i|y_1,\cdots,y_{i-1}) \end{aligned}
P(y1,y2,⋯,yn)=P(y1)P(y2,⋯,yn∣y1)=P(y1)P(y2∣y1)P(y3,⋯,yn∣y1,y2)=P(y1)P(y2∣y1)P(y3∣y1,y2)P(y4,⋯,yn∣y1,y2,y3)=P(y1)P(y2∣y1)P(y3∣y1,y2)⋯P(yi∣y1,⋯,yi−1)P(yi+1,⋯,yn∣y1,⋯,yi)=P(y1)i=2∏nP(yi∣y1,⋯,yi−1)
假设隐藏状态
y
i
y_i
yi仅与前一状态
y
i
−
1
y_{i-1}
yi−1有关(即齐次性假设),而与其他状态无关,则
P
(
y
1
)
∏
i
=
2
n
P
(
y
i
∣
y
1
,
⋯
,
y
i
−
1
)
≈
P
(
y
1
)
∏
i
=
2
n
P
(
y
i
∣
y
i
−
1
)
(2)
P(y_1)\prod_{i=2}^n P(y_i|y_1,\cdots,y_{i-1}) \approx P(y_1)\prod_{i=2}^n P(y_i|y_{i-1}) \tag2
P(y1)i=2∏nP(yi∣y1,⋯,yi−1)≈P(y1)i=2∏nP(yi∣yi−1)(2)
而
P
(
x
1
,
x
2
,
.
.
.
,
x
n
∣
y
1
,
y
2
,
⋯
,
y
n
)
=
P
(
x
1
∣
y
1
,
⋯
,
y
n
)
P
(
x
2
,
⋯
,
x
n
∣
x
1
,
y
1
,
⋯
,
y
n
)
=
P
(
x
1
∣
y
1
,
⋯
,
y
n
)
P
(
x
2
∣
x
1
,
y
1
,
⋯
,
y
n
)
P
(
x
3
,
⋯
,
x
n
∣
x
1
,
x
2
,
y
1
,
⋯
,
y
n
)
=
P
(
x
1
∣
y
1
,
⋯
,
y
n
)
P
(
x
2
∣
x
1
,
y
1
,
⋯
,
y
n
)
⋯
P
(
x
i
∣
x
1
,
⋯
,
x
i
−
1
,
y
1
,
⋯
,
y
n
)
P
(
x
i
+
1
,
⋯
,
x
n
∣
x
1
,
⋯
,
x
i
,
y
1
,
⋯
,
y
n
)
=
∏
i
=
1
n
P
(
x
i
∣
x
1
,
⋯
,
x
i
−
1
,
y
1
,
⋯
,
y
n
)
\begin{aligned} P(x_1,x_2,...,x_n|y_1,y_2,\cdots,y_n) &=P(x_1|y_1,\cdots,y_n) P(x_2,\cdots,x_n|x_1,y_1,\cdots,y_n)\\ &=P(x_1|y_1,\cdots,y_n) P(x_2|x_1,y_1,\cdots,y_n) P(x_3,\cdots,x_n|x_1,x_2,y_1,\cdots,y_n)\\ &=P(x_1|y_1,\cdots,y_n) P(x_2|x_1,y_1,\cdots,y_n) \cdots P(x_i|x_1,\cdots,x_{i-1},y_1,\cdots,y_n)\\ &P(x_{i+1},\cdots,x_n|x_1,\cdots,x_i,y_1,\cdots,y_n)\\ &= \prod_{i=1}^n P(x_i|x_1,\cdots,x_{i-1},y_1,\cdots,y_n) \end{aligned}
P(x1,x2,...,xn∣y1,y2,⋯,yn)=P(x1∣y1,⋯,yn)P(x2,⋯,xn∣x1,y1,⋯,yn)=P(x1∣y1,⋯,yn)P(x2∣x1,y1,⋯,yn)P(x3,⋯,xn∣x1,x2,y1,⋯,yn)=P(x1∣y1,⋯,yn)P(x2∣x1,y1,⋯,yn)⋯P(xi∣x1,⋯,xi−1,y1,⋯,yn)P(xi+1,⋯,xn∣x1,⋯,xi,y1,⋯,yn)=i=1∏nP(xi∣x1,⋯,xi−1,y1,⋯,yn)
假设当前的表现
x
i
x_i
xi仅与当前的隐藏状态
y
i
y_i
yi有关,与其他时刻的表现及隐藏状态无关(独立性假设),则
∏
i
=
1
n
P
(
x
i
∣
x
1
,
⋯
,
x
i
−
1
,
y
1
,
⋯
,
y
n
)
≈
∏
i
=
1
n
P
(
x
i
∣
y
i
)
(3)
\prod_{i=1}^n P(x_i|x_1,\cdots,x_{i-1},y_1,\cdots,y_n) \approx \prod_{i=1}^n P(x_i|y_i) \tag3
i=1∏nP(xi∣x1,⋯,xi−1,y1,⋯,yn)≈i=1∏nP(xi∣yi)(3)
结合公式(2)和公式(3)则有如下关系:
P
(
y
1
,
y
2
,
.
.
.
,
y
n
∣
x
i
,
x
2
,
⋯
,
x
n
)
∝
∏
i
=
1
n
P
(
x
i
∣
y
i
)
P
(
y
i
∣
y
i
−
1
)
(4)
P(y_1,y_2,...,y_n|x_i,x_2,\cdots,x_n) \propto \prod_{i=1}^n P(x_i|y_i) P(y_i|y_{i-1}) \tag4
P(y1,y2,...,yn∣xi,x2,⋯,xn)∝i=1∏nP(xi∣yi)P(yi∣yi−1)(4)
公式(4)需满足一个初始条件,中当
i
=
1
i = 1
i=1时,
P
(
y
1
∣
y
0
)
=
P
(
y
1
)
P(y_1|y_0) = P(y_1)
P(y1∣y0)=P(y1)。公式(4)所代表的模型即为隐马尔可夫模型。
2、模型定义
隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。序列的每一个位置又可以看作是一个时刻。
隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的定义如下:
设
Q
Q
Q是所有可能的状态的集合,
V
V
V是所有可能的观测的集合:
Q
=
{
q
1
,
q
2
,
⋯
,
q
N
}
,
V
=
{
v
1
,
v
2
,
⋯
,
v
M
}
Q = \{q_1,q_2,\cdots,q_N\}, \ \ \ \ \ V =\{v_1,v_2,\cdots,v_M\}
Q={q1,q2,⋯,qN}, V={v1,v2,⋯,vM}
其中,
N
N
N是可能的状态数,
M
M
M是可能的观测数。
I
I
I 是长度为
T
T
T 的状态序列,
O
O
O是对应的观测序列:
I
=
{
i
1
,
i
2
,
⋯
,
i
T
}
,
O
=
{
o
1
,
o
2
,
⋯
,
o
T
}
I = \{i_1,i_2,\cdots,i_T\}, \ \ \ \ \ O=\{o_1,o_2,\cdots,o_T\}
I={i1,i2,⋯,iT}, O={o1,o2,⋯,oT}
A
A
A是状态转移概率矩阵:
A
=
[
a
i
j
]
N
×
N
A=[a_{ij} ]_{N×N}
A=[aij]N×N
其中,
a
i
j
=
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
)
,
i
=
1
,
2
,
⋯
,
N
;
j
=
1
,
2
,
⋯
,
N
a_{ij} = P(i_{t+1} = q_j | i_ t = q_i), \ \ \ \ \ i=1,2,\cdots,N;\ \ j=1,2,\cdots,N
aij=P(it+1=qj∣it=qi), i=1,2,⋯,N; j=1,2,⋯,N
代表在
t
t
t时刻处于
q
i
q_i
qi的条件下在
t
+
1
t+1
t+1时刻转移到状态
q
j
q_j
qj的概率。
B
B
B代表观测矩阵:
B
=
[
b
j
(
k
)
]
N
×
M
B=[b_j(k)]_{N×M}
B=[bj(k)]N×M
其中,
b
j
(
k
)
=
P
(
o
t
=
v
k
∣
i
t
=
q
j
)
j
=
1
,
2
,
⋯
,
N
;
k
=
1
,
2
,
⋯
,
M
b_j(k)=P(o_t=v_k|i_t=q_j)\ \ \ j=1,2,\cdots,N; \ \ \ k=1,2,\cdots,M
bj(k)=P(ot=vk∣it=qj) j=1,2,⋯,N; k=1,2,⋯,M
代表在
t
t
t时刻处于
q
j
q_j
qj的条件下生成观测
v
k
v_k
vk的概率。
π
\pi
π是初始状态概率向量:
π
=
(
π
i
)
\pi=(\pi_i)
π=(πi)
其中,
π
i
=
P
(
i
1
=
q
i
)
i
=
i
,
2
,
⋯
,
N
\pi_i=P(i_1=q_i)\ \ \ \ \ i=i,2,\cdots,N
πi=P(i1=qi) i=i,2,⋯,N
代表
t
=
1
t=1
t=1的时刻,状态为
q
i
q_i
qi的概率。
隐马尔可夫模型由初始状态概率向量
π
\pi
π、状态转移概率矩阵
A
A
A和观测概率矩阵
B
B
B决定。
π
\pi
π和
A
A
A决定状态序列,
B
B
B决定观测序列。因此,隐马尔可夫模型
λ
\lambda
λ可以用三元符号表示,即
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)
A
A
A,
B
B
B,
π
\pi
π称位隐马尔可夫模型的三要素。
状态转移概率矩阵
A
A
A与初始状态概率向量
π
\pi
π确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵
B
B
B确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。
前面背景介绍中涉及到的两种基本假设,下面在这里进行详细介绍:
(1)齐次马尔可夫假设,即假设隐藏的马尔可夫链在任意时刻
t
t
t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关:
P
(
i
t
∣
i
t
−
1
,
o
t
−
1
,
⋯
,
i
1
,
o
1
)
=
P
(
i
t
∣
i
t
−
1
)
,
t
=
1
,
2
,
⋯
,
T
(5)
P(i_t|i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(i_t|i_{t-1}),\ \ \ \ \ t=1,2,\cdots,T \tag5
P(it∣it−1,ot−1,⋯,i1,o1)=P(it∣it−1), t=1,2,⋯,T(5)
(2)观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关:
P
(
o
t
∣
i
T
,
o
T
,
i
T
−
1
,
o
T
−
1
,
⋯
,
i
t
+
1
,
o
t
+
1
,
i
t
,
i
t
−
1
,
o
t
−
1
,
⋯
,
i
1
,
o
1
)
=
P
(
o
t
∣
i
t
)
(6)
P(o_t|i_T,o_T,i_{T-1},o_{T-1},\cdots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(o_t|i_t) \tag6
P(ot∣iT,oT,iT−1,oT−1,⋯,it+1,ot+1,it,it−1,ot−1,⋯,i1,o1)=P(ot∣it)(6)
隐马尔可夫模型可以用于标注,这是状态对应着标记。标注问题是给定观测的序列预测其对应的标记序列。可以假设标注问题的数据是由隐马尔可夫模型生成的。这样我们可以利用隐马尔可夫模型的学习与预测算法进行标注。
本节内容可以用一句话简单概括,一个定义,二个假设,三个要素。
3、模型的三个基本问题
3.1、概率计算问题
给定模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)和观测序列
O
=
(
o
1
,
o
2
,
⋯
,
o
T
)
O=(o_1,o_2,\cdots,o_T)
O=(o1,o2,⋯,oT),计算在模型
λ
\lambda
λ下观测序列
O
O
O出现的概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)。
1、直接计算法
给定模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)和观测序列
O
=
(
o
1
,
o
2
,
⋯
,
o
T
)
O=(o_1,o_2,\cdots,o_T)
O=(o1,o2,⋯,oT),计算观测序列
O
O
O出现的概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)。最直接的方法是按照概率公式直接计算。列举所有可能的长度为
T
T
T的状态序列
I
=
(
i
1
,
i
2
,
⋯
,
i
T
)
I=(i_1,i_2,\cdots,i_T)
I=(i1,i2,⋯,iT),求各个状态序列
I
I
I与观测序列
O
=
(
o
1
,
o
2
,
⋯
,
o
T
)
O=(o_1,o_2,\cdots,o_T)
O=(o1,o2,⋯,oT)的联合概率
P
(
O
,
I
∣
λ
)
P(O,I|\lambda)
P(O,I∣λ),然后对所有可能的状态序列求和,得到
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)。
状态序列
I
=
(
i
1
,
i
2
,
⋯
,
i
T
)
I=(i_1,i_2,\cdots,i_T)
I=(i1,i2,⋯,iT)的概率是:
P
(
I
∣
λ
)
=
π
i
1
a
i
1
i
2
a
i
2
i
3
⋯
a
i
T
−
1
i
T
(7)
P(I|\lambda)=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\cdots a_{i_{T-1}i_T} \tag7
P(I∣λ)=πi1ai1i2ai2i3⋯aiT−1iT(7)
对固定的状态序列
I
=
(
i
1
,
i
2
,
⋯
,
i
T
)
I=(i_1,i_2,\cdots,i_T)
I=(i1,i2,⋯,iT),生成观测序列
O
=
(
o
1
,
o
2
,
⋯
,
o
T
)
O=(o_1,o_2,\cdots,o_T)
O=(o1,o2,⋯,oT)的概率是:
P
(
O
∣
I
,
λ
)
=
b
i
1
(
o
1
)
b
i
2
(
o
2
)
⋯
b
i
T
(
o
T
)
(8)
P(O|I,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)\cdots b_{i_T}(o_T)\tag8
P(O∣I,λ)=bi1(o1)bi2(o2)⋯biT(oT)(8)
O
和
I
同
时
出
现
的
联
合
概
率
为
O和I同时出现的联合概率为
O和I同时出现的联合概率为
P
(
O
,
I
∣
λ
)
=
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
π
i
1
b
i
1
(
o
1
)
a
i
1
i
2
b
i
2
(
o
2
)
⋯
a
i
T
−
1
i
T
b
i
T
(
o
T
)
(9)
P(O,I|\lambda)=P(O|I,\lambda)P(I|\lambda)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T)\tag9
P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai1i2bi2(o2)⋯aiT−1iTbiT(oT)(9)
然
后
,
对
所
有
可
能
的
状
态
序
列
I
求
和
,
得
到
观
测
序
列
O
的
概
率
P
(
O
∣
λ
)
,
即
然后,对所有可能的状态序列I求和,得到观测序列O的概率P(O|\lambda),即
然后,对所有可能的状态序列I求和,得到观测序列O的概率P(O∣λ),即
P
(
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
∑
i
1
,
i
2
,
⋯
,
i
T
π
i
1
b
i
1
(
o
1
)
a
i
1
i
2
b
i
2
(
o
2
)
⋯
a
i
T
−
1
i
T
b
i
T
(
o
T
)
(10)
P(O|\lambda) =\sum_IP(O|I,\lambda)P(I|\lambda) =\sum_{i_1,i_2,\cdots,i_T}\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T)\tag{10}
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)=i1,i2,⋯,iT∑πi1bi1(o1)ai1i2bi2(o2)⋯aiT−1iTbiT(oT)(10)
按照第2小节所介绍的,所有状态的集合为
Q
Q
Q,集合内的元素个数为
N
N
N。那么对于长度为
T
T
T的状态序列
I
I
I,其对应的任意时刻都有
N
N
N种选择,因此对于状态序列
I
I
I就有
N
T
N^T
NT种选择。这样不难看出,公式(10)计算量很大,时间复杂度是
O
(
T
N
T
)
O(TN^T)
O(TNT),这种算法基本不可行。
2、前向算法
定义(前向概率) 给定隐马尔可夫模型
λ
\lambda
λ,定义到时刻
t
t
t部分观测序列为
o
1
,
o
2
,
⋯
,
o
t
o_1,o_2,\cdots,o_t
o1,o2,⋯,ot且状态为
q
i
q_i
qi的概率为前向概率,记作
α
t
(
i
)
=
P
(
o
1
,
o
2
,
⋯
,
o
t
,
i
t
=
q
i
∣
λ
)
(11)
\alpha_t(i) = P(o_1,o_2,\cdots,o_t,i_t=q_i|\lambda)\tag{11}
αt(i)=P(o1,o2,⋯,ot,it=qi∣λ)(11)
算法(观测序列概率的前向算法)
输入:隐马尔可夫模型
λ
\lambda
λ,观测序列
O
O
O;
输出:观测序列概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)。
(1)初值
α
1
(
i
)
=
π
i
b
i
(
o
1
)
,
i
=
1
,
2
,
⋯
,
N
(12)
\alpha_1(i)=\pi_ib_i(o_1),\ \ \ \ \ i=1,2,\cdots,N\tag{12}
α1(i)=πibi(o1), i=1,2,⋯,N(12)
(2)递推 对
t
=
1
,
2
,
⋯
,
T
−
1
,
t=1,2,\cdots,T-1,
t=1,2,⋯,T−1,
α
t
+
1
(
i
)
=
[
∑
j
=
1
N
α
t
(
j
)
a
j
i
]
b
i
(
o
t
+
1
)
(13)
\alpha_{t+1}(i)=\Bigg[\sum_{j=1}^N\alpha_t(j)a_{ji}\Bigg]b_i(o_{t+1})\tag{13}
αt+1(i)=[j=1∑Nαt(j)aji]bi(ot+1)(13)
(3)终止
P
(
O
∣
λ
)
=
∑
i
=
1
N
α
T
(
i
)
(14)
P(O|\lambda)=\sum_{i=1}^N \alpha_T(i)\tag{14}
P(O∣λ)=i=1∑NαT(i)(14)
前向算法,步骤(1)初始化前向概率,是初始时刻的状态
i
1
=
q
i
i_1=q_i
i1=qi和观测
o
1
o_1
o1的联合概率。步骤(2)是前向概率的递推公式,计算时刻
t
+
1
t+1
t+1部分观测序列为
o
1
,
o
2
,
⋯
,
o
t
,
o
t
+
1
o_1,o_2,\cdots,o_t,o_{t+1}
o1,o2,⋯,ot,ot+1且在时刻
t
+
1
t+1
t+1处于状态
q
i
q_i
qi的前向概率,如图1所示。在公式(13)的方括号里,既然
α
t
(
j
)
\alpha_t(j)
αt(j)是到时刻
t
t
t观测到
o
1
,
o
2
,
⋯
,
o
t
o_1,o_2,\cdots,o_t
o1,o2,⋯,ot并在时刻
t
t
t处于状态
q
j
q_j
qj的前向概率,那么乘积
α
t
(
j
)
a
j
i
\alpha_t(j)a_{ji}
αt(j)aji就是到时刻
t
t
t观测到
o
1
,
o
2
,
⋯
,
o
t
o_1,o_2,\cdots,o_t
o1,o2,⋯,ot并在时刻
t
t
t处于状态
q
j
q_j
qj而在时刻
t
+
1
t+1
t+1到状态
q
i
q_i
qi的联合概率。对这个乘积在时刻
t
t
t的所有可能的
N
N
N个状态
q
j
q_j
qj求和,其结果就是到时刻
t
t
t观测为
o
1
,
o
2
,
⋯
,
o
t
o_1,o_2,\cdots,o_t
o1,o2,⋯,ot并在时刻
t
+
1
t+1
t+1处于状态
q
i
q_i
qi的联合概率。方括号里面的观测概率
b
i
(
o
t
+
1
)
b_i(o_{t+1})
bi(ot+1)的乘积恰好是到时刻
t
+
1
t+1
t+1观测到
o
1
,
o
2
,
⋯
,
o
t
,
o
t
+
1
o_1,o_2,\cdots,o_t,o_{t+1}
o1,o2,⋯,ot,ot+1并在时刻
t
+
1
t+1
t+1处于状态
q
i
q_i
qi的前向概率
α
t
+
1
(
i
)
\alpha_{t+1}(i)
αt+1(i)。步骤(3)给出
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)的计算公式。因为
α
T
(
i
)
=
P
(
o
1
,
o
2
,
⋯
,
o
T
,
i
T
=
q
i
∣
λ
)
\alpha_T(i)=P(o_1,o_2,\cdots,o_T,i_T=q_i|\lambda)
αT(i)=P(o1,o2,⋯,oT,iT=qi∣λ)
所以
P
(
O
∣
λ
)
=
∑
i
=
1
N
α
T
(
i
)
P(O|\lambda)=\sum_{i=1}^N\alpha_T(i)
P(O∣λ)=i=1∑NαT(i)
如图2所示,前向算法实际是基于“状态序列的路径结构”递归计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)的算法。前向算法高效的关键是其局部计算前向概率,然后利用路径结构将前向概率“递归”到全局,得到 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。具体地,在时刻 t = 1 t=1 t=1,计算 α 1 ( i ) \alpha_1(i) α1(i)的 N N N个值 ( i = 1 , 2 , ⋯ , N ) ; (i=1,2,\cdots,N); (i=1,2,⋯,N);在各个时刻 t = 1 , 2 , ⋯ , T − 1 t=1,2,\cdots,T-1 t=1,2,⋯,T−1,计算 α t + 1 \alpha_{t+1} αt+1的 N N N个值 ( i = 1 , 2 , ⋯ , N ) (i=1,2,\cdots,N) (i=1,2,⋯,N),而且每个 α t + 1 \alpha_{t+1} αt+1的计算利用前一时刻 N N N个 α t ( j ) \alpha_t(j) αt(j)。减少计算量的原因在于每一次计算直接引用前一个时刻的计算结果,避免重复计算。这样,利用前向概率计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)的计算量是 O ( N 2 T ) O(N^2T) O(N2T)阶的。
前向递推公式证明:
已知联合概率公式如下:
P
(
A
B
C
)
=
P
(
A
B
∣
C
)
P
(
A
∣
B
)
P
(
B
)
P(ABC) = P(AB|C)P(A|B)P(B)
P(ABC)=P(AB∣C)P(A∣B)P(B)
基于上面公式证明如下:
∵
α
t
(
j
)
a
j
i
=
P
(
o
1
,
⋯
,
o
t
,
i
t
=
q
j
∣
λ
)
P
(
i
t
+
1
=
q
i
∣
i
t
=
q
j
,
λ
)
=
P
(
o
1
,
⋯
,
o
t
∣
i
t
=
q
j
,
λ
)
P
(
i
t
=
q
j
∣
λ
)
P
(
i
t
+
1
=
q
i
∣
i
t
=
q
j
,
λ
)
=
P
(
o
1
,
⋯
,
o
t
∣
i
t
=
q
j
,
λ
)
P
(
i
t
=
q
j
,
i
t
+
1
=
q
i
∣
λ
)
=
P
(
o
1
,
⋯
,
o
t
∣
i
t
=
q
j
,
i
t
+
1
=
q
i
,
λ
)
P
(
i
t
=
q
j
,
i
t
+
1
=
q
i
∣
λ
)
=
P
(
o
1
,
⋯
,
o
t
,
i
t
=
q
j
,
i
t
+
1
=
q
i
∣
λ
)
\begin{aligned} \because \ \ \ \alpha_t(j) a_{ji} &= P(o_1,\cdots,o_t,i_t=q_j|\lambda)P(i_{t+1}=q_i|i_t=q_j,\lambda)\\ &=P(o_1,\cdots,o_t|i_t=q_j,\lambda)P(i_t=q_j|\lambda)P(i_{t+1}=q_i|i_t=q_j,\lambda)\\ &=P(o_1,\cdots,o_t|i_t=q_j,\lambda)P(i_t=q_j,i_{t+1}=q_i|\lambda)\\ &=P(o_1,\cdots,o_t|i_t=q_j, i_{t+1}=q_i ,\lambda)P(i_t=q_j,i_{t+1}=q_i|\lambda)\\ &=P(o_1,\cdots,o_t,i_t=q_j,i_{t+1}=q_i|\lambda) \end{aligned}
∵ αt(j)aji=P(o1,⋯,ot,it=qj∣λ)P(it+1=qi∣it=qj,λ)=P(o1,⋯,ot∣it=qj,λ)P(it=qj∣λ)P(it+1=qi∣it=qj,λ)=P(o1,⋯,ot∣it=qj,λ)P(it=qj,it+1=qi∣λ)=P(o1,⋯,ot∣it=qj,it+1=qi,λ)P(it=qj,it+1=qi∣λ)=P(o1,⋯,ot,it=qj,it+1=qi∣λ)
∴ [ ∑ j = 1 N α t ( j ) a j i ] b t + 1 ( i ) = ∑ j = 1 N [ P ( o 1 , ⋯ , o t , i t = q j , i t + 1 = q i ∣ λ ) ] P ( o t + 1 ∣ i t + 1 = q i , λ ) = P ( o 1 , ⋯ , o t , i t + 1 = q i ∣ λ ) P ( o t + 1 ∣ i t + 1 = q i , λ ) = P ( o 1 , ⋯ , o t ∣ i t + 1 = q i , λ ) P ( i t + 1 = q i ∣ λ ) P ( o t + 1 ∣ i t + 1 = q i , λ ) = P ( o 1 , ⋯ , o t ∣ i t + 1 = q i , λ ) P ( o t + 1 , i t + 1 = q i ∣ λ ) = P ( o 1 , ⋯ , o t ∣ o t + 1 , i t + 1 = q i , λ ) P ( o t + 1 , i t + 1 = q i ∣ λ ) = P ( o 1 , ⋯ , o t , o t + 1 , i t + 1 = q i ∣ λ ) = α t + 1 ( i ) \begin{aligned} \therefore \ \ \Bigg[\sum_{j=1}^N \alpha_t(j)a_{ji} \Bigg] b_{t+1}(i)&=\sum_{j=1}^N\bigg[P(o_1,\cdots,o_t,i_t=q_j,i_{t+1}=q_i|\lambda)\bigg]P(o_{t+1}|i_{t+1}=q_i,\lambda)\\ &=P(o_1,\cdots,o_t,i_{t+1}=q_i|\lambda)P(o_{t+1}|i_{t+1}=q_i,\lambda)\\ &=P(o_1,\cdots,o_t|i_{t+1}=q_i,\lambda)P(i_{t+1}=q_i|\lambda)P(o_{t+1}|i_{t+1}=q_i,\lambda)\\ &=P(o_1,\cdots,o_t|i_{t+1}=q_i,\lambda)P(o_{t+1},i_{t+1}=q_i|\lambda)\\ &=P(o_1,\cdots,o_t|o_{t+1},i_{t+1}=q_i,\lambda)P(o_{t+1},i_{t+1}=q_i|\lambda)\\ &=P(o_1,\cdots,o_t,o_{t+1},i_{t+1}=q_i|\lambda)\\ &=\alpha_{t+1}(i) \end{aligned} ∴ [j=1∑Nαt(j)aji]bt+1(i)=j=1∑N[P(o1,⋯,ot,it=qj,it+1=qi∣λ)]P(ot+1∣it+1=qi,λ)=P(o1,⋯,ot,it+1=qi∣λ)P(ot+1∣it+1=qi,λ)=P(o1,⋯,ot∣it+1=qi,λ)P(it+1=qi∣λ)P(ot+1∣it+1=qi,λ)=P(o1,⋯,ot∣it+1=qi,λ)P(ot+1,it+1=qi∣λ)=P(o1,⋯,ot∣ot+1,it+1=qi,λ)P(ot+1,it+1=qi∣λ)=P(o1,⋯,ot,ot+1,it+1=qi∣λ)=αt+1(i)
3、后向算法
定义(后向概率) 给定隐马尔可夫模型
λ
\lambda
λ,定义在时刻
t
t
t状态为
q
i
q_i
qi的条件下,从
t
+
1
t+1
t+1到
T
T
T的部分观测序列为
o
t
+
1
,
o
t
+
2
,
⋯
,
o
T
o_{t+1},o_{t+2},\cdots,o_T
ot+1,ot+2,⋯,oT的概率为后向概率,记作
β
t
(
i
)
=
P
(
o
t
+
1
,
o
t
+
2
,
⋯
,
o
T
∣
i
t
=
q
i
,
λ
)
(15)
\beta_t(i)=P(o_{t+1},o_{t+2},\cdots,o_T|i_t=q_i,\lambda)\tag{15}
βt(i)=P(ot+1,ot+2,⋯,oT∣it=qi,λ)(15)
算法(观测序列概率的后向算法)
输入:隐马尔可夫模型
λ
\lambda
λ,观测序列
O
O
O;
输出:观测序列概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)。
(1)初值
β
T
(
i
)
=
1
,
i
=
1
,
2
,
⋯
,
N
\beta_T(i) = 1, \ \ \ \ \ \ i=1,2,\cdots,N
βT(i)=1, i=1,2,⋯,N
代表
t
=
T
t=T
t=T时刻,任意状态的后向概率均为1。
(2)递推 对
t
=
T
−
1
,
T
−
2
,
⋯
,
1
t=T-1,T-2,\cdots,1
t=T−1,T−2,⋯,1
β
t
(
i
)
=
∑
j
=
1
N
a
i
j
b
j
(
o
t
+
1
)
β
t
+
1
(
j
)
,
i
=
1
,
2
,
⋯
,
N
(16)
\beta_t(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})\beta_{t+1}(j),\ \ \ \ \ i =1,2,\cdots,N\tag{16}
βt(i)=j=1∑Naijbj(ot+1)βt+1(j), i=1,2,⋯,N(16)
(3)终止
P
(
O
∣
λ
)
=
∑
i
=
1
N
π
i
b
i
(
o
1
)
β
1
(
i
)
(17)
P(O|\lambda)=\sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i)\tag{17}
P(O∣λ)=i=1∑Nπibi(o1)β1(i)(17)
步骤(1)初始化后向概率,对最终时刻的所有状态
q
i
q_i
qi规定
β
T
(
i
)
=
1
\beta_T(i)=1
βT(i)=1。步骤(2)是后向概率的递推公式。如图3所示,为了计算在时刻
t
t
t状态为
q
i
q_i
qi条件下时刻
t
+
1
t+1
t+1之后的观测序列为
O
t
+
1
,
o
t
+
2
,
⋯
,
o
T
O_{t+1},o{t+2},\cdots,o_T
Ot+1,ot+2,⋯,oT的后向概率
β
t
(
i
)
\beta_t(i)
βt(i),只需考虑在时刻
t
+
1
t+1
t+1所有可能的
N
N
N个状态
q
j
q_j
qj的转移概率(即
a
i
j
a_{ij}
aij),以及在此状态下的观测
o
t
+
1
o_{t+1}
ot+1的观测概率(即
b
j
(
o
t
+
1
)
b_j(o_{t+1})
bj(ot+1)项),然后考虑状态
q
j
q_j
qj之后的观测序列的后向概率(即
β
t
+
1
(
j
)
\beta_{t+1}(j)
βt+1(j)项)。步骤(3)求
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)的思路与步骤(2)一致,只是初始概率
π
i
\pi_i
πi代替转移概率。
后向递推公式证明:
∑
j
=
1
N
a
i
j
b
j
(
o
t
+
1
)
β
t
+
1
(
j
)
=
∑
j
=
1
N
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
P
(
o
t
+
1
∣
i
t
+
1
=
q
j
,
λ
)
P
(
o
t
+
2
,
⋯
,
o
T
∣
i
t
+
1
=
q
j
,
λ
)
=
∑
j
=
1
N
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
P
(
o
t
+
1
∣
i
t
+
1
=
q
j
,
λ
)
P
(
o
t
+
2
,
⋯
,
o
T
∣
o
t
+
1
,
i
t
+
1
=
q
j
,
λ
)
=
∑
j
=
1
N
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
P
(
o
t
+
1
,
o
t
+
2
,
⋯
,
o
T
∣
i
t
+
1
=
q
j
,
λ
)
=
∑
j
=
1
N
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
P
(
o
t
+
1
,
o
t
+
2
,
⋯
,
o
T
∣
i
t
=
q
i
,
i
t
+
1
=
q
j
,
λ
)
=
∑
j
=
1
N
P
(
o
t
+
1
,
o
t
+
2
,
⋯
,
o
T
,
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
=
P
(
o
t
+
1
,
o
t
+
2
,
⋯
,
o
T
∣
i
t
=
q
i
,
λ
)
=
β
t
(
i
)
\begin{aligned} \sum_{j=1}^N a_{ij}b_j(o_{t+1})\beta_{t+1}(j)&=\sum_{j=1}^NP(i_{t+1}=q_j|i_t=q_i,\lambda)P(o_{t+1}|i_{t+1}=q_j,\lambda)P(o_{t+2},\cdots,o_T|i_{t+1}=q_j,\lambda)\\ &=\sum_{j=1}^NP(i_{t+1}=q_j|i_t=q_i,\lambda)P(o_{t+1}|i_{t+1}=q_j,\lambda)P(o_{t+2},\cdots,o_T|o_{t+1},i_{t+1}=q_j,\lambda)\\ &=\sum_{j=1}^NP(i_{t+1}=q_j|i_t=q_i,\lambda)P(o_{t+1},o_{t+2},\cdots,o_T|i_{t+1}=q_j,\lambda)\\ &=\sum_{j=1}^NP(i_{t+1}=q_j|i_t=q_i,\lambda)P(o_{t+1},o_{t+2},\cdots,o_T|i_t = q_i,i_{t+1}=q_j,\lambda)\\ &=\sum_{j=1}^N P(o_{t+1},o_{t+2},\cdots,o_T, i_{t+1}=q_j|i_t=q_i,\lambda)\\ &=P(o_{t+1},o_{t+2},\cdots,o_T|i_t=q_i,\lambda)\\ &=\beta_t(i) \end{aligned}
j=1∑Naijbj(ot+1)βt+1(j)=j=1∑NP(it+1=qj∣it=qi,λ)P(ot+1∣it+1=qj,λ)P(ot+2,⋯,oT∣it+1=qj,λ)=j=1∑NP(it+1=qj∣it=qi,λ)P(ot+1∣it+1=qj,λ)P(ot+2,⋯,oT∣ot+1,it+1=qj,λ)=j=1∑NP(it+1=qj∣it=qi,λ)P(ot+1,ot+2,⋯,oT∣it+1=qj,λ)=j=1∑NP(it+1=qj∣it=qi,λ)P(ot+1,ot+2,⋯,oT∣it=qi,it+1=qj,λ)=j=1∑NP(ot+1,ot+2,⋯,oT,it+1=qj∣it=qi,λ)=P(ot+1,ot+2,⋯,oT∣it=qi,λ)=βt(i)
利用前向概率和后向概率的定义可以将观测序列概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)统一写成
P
(
O
∣
λ
)
=
∑
i
=
1
N
∑
j
=
1
N
α
t
(
i
)
a
i
j
b
j
(
o
t
+
1
)
β
t
+
1
(
j
)
(18)
P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)\tag{18}
P(O∣λ)=i=1∑Nj=1∑Nαt(i)aijbj(ot+1)βt+1(j)(18)
4、一些概率与期望值的计算
利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
- 定义模型
λ
\lambda
λ和观测
O
O
O,在时刻
t
t
t处于状态
q
i
q_i
qi的概率。记
γ t ( i ) = P ( i t = q i ∣ O , λ ) = P ( i t = q i , O ∣ λ ) P ( O ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) (19) \gamma_t(i)=P(i_t=q_i|O,\lambda)=\cfrac{P(i_t=q_i,O|\lambda)}{P(O|\lambda)}=\cfrac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)}\tag{19} γt(i)=P(it=qi∣O,λ)=P(O∣λ)P(it=qi,O∣λ)=∑j=1Nαt(j)βt(j)αt(i)βt(i)(19) - 给定模型
λ
\lambda
λ和观测
O
O
O,在时刻
t
t
t处于状态
q
i
q_i
qi且在时刻
t
+
1
t+1
t+1处于
q
j
q_j
qj的概率。记
ξ t ( i , j ) = P ( i t = q i , i t + 1 = q j ∣ O , λ ) = α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) (20) \begin{aligned} \xi_t(i,j) &=P(i_t=q_i,i_{t+1}=q_j|O,\lambda)\\ &=\cfrac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}\tag{20} \end{aligned} ξt(i,j)=P(it=qi,it+1=qj∣O,λ)=∑i=1N∑j=1Nαt(i)aijbj(ot+1)βt+1(j)αt(i)aijbj(ot+1)βt+1(j)(20) - 将
γ
t
(
i
)
\gamma_t(i)
γt(i)和
ξ
t
(
i
,
j
)
\xi_t(i,j)
ξt(i,j)对各个时刻
t
t
t求和,可以得到一些有用的期望值。
(1)在观测 O O O下状态 i i i出现的期望值:
∑ t = 1 T γ t ( i ) (21) \sum_{t=1}^T\gamma_t(i)\tag{21} t=1∑Tγt(i)(21)
(2)在观测 O O O下由状态 i i i转移的期望值:
∑ t = 1 T − 1 γ t ( i ) (22) \sum_{t=1}^{T-1}\gamma_t(i)\tag{22} t=1∑T−1γt(i)(22)
(3)在观测 O O O下由状态 i i i转移到状态 j j j的期望值:
∑ t = 1 T − 1 ξ t ( i , j ) (23) \sum_{t=1}^{T-1}\xi_t(i,j)\tag{23} t=1∑T−1ξt(i,j)(23)
3.2、学习问题
隐马尔可夫模型的学习,根据训练数据是包括观测序列和对应的状态序列还是只有观测序列,可以分别由监督学习与无监督学习实现。
- 监督学习方法
已知观测序列 O = ( o 1 , o 2 , ⋯ , o T ) O=(o_1,o_2,\cdots,o_T) O=(o1,o2,⋯,oT),估计模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)参数,使得在该模型下观测概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)最大。即用极大似然估计的方法估计参数。
1、转移概率 a i j a_{ij} aij的估计
设样本中时刻 t t t处于状态 i i i时刻 t + 1 t+1 t+1转移到状态 j j j的频数为 A i j A_{ij} Aij,那么状态转移概率为
a i j = A i j ∑ j = 1 N A i j i = 1 , 2 , ⋯ , N ; j = 1 , 2 , ⋯ , N (24) a_{ij}=\cfrac{A_{ij}}{\sum_{j=1}^NA_{ij}}\ \ \ \ \ \ i=1,2,\cdots,N;\ \ \ \ j=1,2,\cdots,N \tag{24} aij=∑j=1NAijAij i=1,2,⋯,N; j=1,2,⋯,N(24)
2、观测概率 b j ( k ) b_j(k) bj(k)的估计
设样本中状态为 j j j并观测为 k k k的频数是 B j k B_{jk} Bjk,那么状态 j j j观测为 k k k的概率估计是:
b j ( k ) = B j k ∑ k = 1 M B j k j = 1 , 2 , ⋯ , N ; k = 1 , 2 , ⋯ , M (25) b_j(k)=\cfrac{B_{jk}}{\sum_{k=1}^MB_{}jk}\ \ \ \ \ \ j=1,2,\cdots,N;\ \ \ \ k=1,2,\cdots,M\tag{25} bj(k)=∑k=1MBjkBjk j=1,2,⋯,N; k=1,2,⋯,M(25)
3、初始状态概率 π i \pi_i πi的估计为 S S S个样本中初始状态为 q i q_i qi的频率。 - 无监督学习方法
暂时略过
3.3、预测问题(解码问题)
已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , ⋯ , o T ) O=(o_1,o_2,\cdots,o_T) O=(o1,o2,⋯,oT),求对给定观测序列条件概率 P ( I ∣ λ ) P(I|\lambda) P(I∣λ)最大的状态序列 I = ( i 1 , i 2 , ⋯ , i T ) I=(i_1,i_2,\cdots,iT) I=(i1,i2,⋯,iT)。即给定观测序列,求最有可能的对应的状态序列。
- 近似算法
近似算法的想法是,在每个时刻 t t t选择在该时刻最有可能出现的状态 i t ∗ i_t^* it∗,从而得到一个状态序列 I ∗ ( i 1 ∗ , i 2 ∗ , ⋯ , i T ∗ ) I^*(i_1^*,i_2^*,\cdots,i_T^*) I∗(i1∗,i2∗,⋯,iT∗),将它作为预测的结果。
给定隐马尔可夫模型 λ \lambda λ和观测序列 O O O,在时刻 t t t处于状态 q i q_i qi的概率 γ t ( i ) \gamma_t(i) γt(i)是
γ t ( i ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) \gamma_t(i)=\cfrac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)} γt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
在每一个时刻 t t t最有可能的状态 i t ∗ i_t^* it∗是
i t ∗ = a r g max 1 ≤ i ≤ N [ γ t ( i ) ] , t = 1 , 2 , ⋯ , T (26) i_t^*=arg\max_{1\leq i \leq N}\big[\gamma_t(i)\big], \ \ \ \ \ t=1,2,\cdots,T\tag{26} it∗=arg1≤i≤Nmax[γt(i)], t=1,2,⋯,T(26)
从而得到状态序列 I ∗ ( i 1 ∗ , i 2 ∗ , ⋯ , i T ∗ ) I^*(i_1^*,i_2^*,\cdots,i_T^*) I∗(i1∗,i2∗,⋯,iT∗)。
近似算法的优点就是计算简单,其缺点是不能保证预测的状态序列整体是最有可能的状态序列,因为预测的状态序列可能有实际不发生的部分。事实上,上述方法得到的状态序列中有可能存在转移概率为0的相邻状态,即对于某些 i , j , a i j = 0 i,j,a_{ij}=0 i,j,aij=0。尽管如此,近似算法仍然是有用的。 - 维特比算法
维特比算法实际是用动态规划解隐马尔可夫模型预测问题,即用动态规划求概率最大路径(最优路径)。这时一条路径对应着一个状态序列。
4、模型应用
5、模型的偏执问题
以词性标注的例子来描述偏执问题。词性标注是指给一段文字,标注出这段文字所对应的词性序列。
例如:
原文:延安供水工程建成通水。
正确标注结果:延安\ns 供水\vn 工程\n 建成\v 通水\v。
延安 ---------地名
供水 ---------名动词
工程 ---------名词
建成 ---------动词
通水 ---------动词
预测过程中,需要尝试各种词性组合,最终通过HMM模型预测出概率最大的词性序列。因为有一些词性出现的频次非常低(比如rg 代词素),所以导致任何词性转移到rg的概率很低,但是有可能它的发射概率相对很高,最终导致预测的词性序列均为rg。注意:词性序列上每个词的词性由转移概率和发射概率共同决定。
实际中可能的预测情况:
(以下数据不具真实性,单纯用来举例)
词语 | 延安 | 供水 | 工程 | 建成 | 通水 |
---|---|---|---|---|---|
正确的词性 | \ns | \vn | \n | \v | \v |
转移概率 | 5% | 1.2% | 1.5% | 1.3% | 1.1% |
发射概率 | 2% | 1% | 2.3% | 1.5% | 1.6% |
词语 | 延安 | 供水 | 工程 | 建成 | 通水 |
---|---|---|---|---|---|
正确的词性 | \rg | \rg | \rg | \rg | \rg |
转移概率 | 0.01% | 0.1% | 0.1% | 0.1% | 0.1% |
发射概率 | 10% | 10% | 10% | 10% | 10% |
对比以上两个表格不难发现,虽然rg的词性序列转移概率很小,但是发射概率相对较高,最终导致预测的结果为rg序列。这就是HMM模型处理过程中,如果选用的平滑处理方法不当,可能会出现的偏执问题。
6、预测结果数据分析
(1)为什么初始阶段随着训练样本的增加,模型的预测效率会越来越好?
答:第一、当样本规模较小,所训练出来的模型在进行预测时,未知错误所占的比重较大,因此导致准确率低。随着训练样本的增加,未知错误所占的比重降低,所以准确率提高。即所谓的“见多识广”。第二、因为样本有限,所以训练得到的模型对一些词性的预测很大概率是错误的,随着样本增加会逐渐纠正这些错误的概率。
(2)为什么后面阶段,随着训练样本的增加,预测效果趋于平缓?
答:因为很多词是存在多种词性即存在歧义,而如何判断这个词当前应该是什么词性就需要结合语境等因素,这就对模型提出很高的要求。二元HMM模型仅仅考虑前后词性之间的关系,这还不足以涵盖所有情况,因此无法解决所有歧义问题,所以最终模型会趋于平缓。
(3)为什么有些类型的预测错误,大语料的时候反而占比大于小语料的时候?
答:因为随着样本的增加,整体的错误率降低,但是有些类型的预测错误可能没有降低,所以在大语料时这种类型的预测错误占比反而提升。