HMM(隐马尔科夫模型)
1适用场景
hmm模型用于序列标注问题的统计学模型。描述有隐藏的马尔科夫链生成观测序列的过程。属于生成模型。
2算法原理
2.1 序列标注任务看做互不相干的多分类任务
序列标注算法的目的就是为了得到最大的联合条件概率作为输出。
m
a
x
P
(
o
∣
x
)
=
m
a
x
p
(
o
1
o
2
.
.
.
o
m
∣
x
1
x
2
.
.
.
x
m
)
\mathop{max}P(o|x)=\mathop{max}p(o_1o_2...o_m|x_1x_2...x_m)
maxP(o∣x)=maxp(o1o2...om∣x1x2...xm)
如果假设每一个o都是条件独立,互不影响的。那么可以通过最大化每一个o的输入,从而使整体最大化。
m
a
x
P
(
o
∣
x
)
=
∑
i
=
1
m
m
a
x
p
(
o
i
∣
x
1
x
2
.
.
.
x
m
)
\mathop{max}P(o|x)=\sum_{i=1}^m\mathop{max}p(o_i|x_1x_2...x_m)
maxP(o∣x)=i=1∑mmaxp(oi∣x1x2...xm)
这样做是对输入序列的每一个时刻都预测一个值(将每个位置看做是softmax的多分类)。并假设预测的值互不影响。这样做再部分情况下后出现不合理的结构。因为完全没有考虑其他输出值的影响。例如分词中出现SS的预测结果。
2.2 HMM
在马尔科夫模型中,将状态序列看做是隐状态,输入序列看做是观测序列。为考虑状态序列的相互影响关系,用贝叶斯公式对原式进行变性。
P
(
o
∣
x
)
=
p
(
o
,
x
)
p
(
x
)
=
p
(
x
∣
o
)
p
(
o
)
p
(
x
)
P(o|x)=\frac{p(o,x)}{p(x)}=\frac{p(x|o)p(o)}{p(x)}
P(o∣x)=p(x)p(o,x)=p(x)p(x∣o)p(o)
p
(
x
)
p(x)
p(x)是归一化因子,可不做考虑。那么求解最大化
m
a
x
p
(
o
∣
x
)
\mathop{max}p(o|x)
maxp(o∣x)就等价于求解。
m
a
x
p
(
x
∣
o
)
p
(
o
)
\mathop{max}p(x|o)p(o)
maxp(x∣o)p(o),同时上式包含
p
(
o
)
p(o)
p(o),可在
p
(
o
)
p(o)
p(o)中考虑输出的相互影响关系。
m
a
x
p
(
x
∣
o
)
p
(
o
)
=
m
a
x
p
(
x
1
x
2
.
.
.
x
m
∣
o
1
o
2
.
.
.
m
)
p
(
o
1
o
2
.
.
.
o
m
)
\mathop{max}p(x|o)p(o)=\mathop{max}p(x_1x_2...x_m|o_1o_2..._m)p(o_1o_2...o_m)
maxp(x∣o)p(o)=maxp(x1x2...xm∣o1o2...m)p(o1o2...om)
为了简化复杂度,HMM做了一下两个假设:
假设当前隐状态只受到前一时刻的隐状态影响,即:
p
(
o
1
o
2
.
.
.
o
m
)
=
p
(
o
1
)
p
(
o
2
∣
o
1
)
.
.
.
p
(
o
n
∣
p
n
−
1
)
p(o_1o_2...o_m)=p(o_1)p(o_2|o_1)...p(o_n|p_{n-1})
p(o1o2...om)=p(o1)p(o2∣o1)...p(on∣pn−1)
假设当前观测状态只依赖当前隐状态,即:
p
(
x
1
x
2
.
.
.
x
m
∣
o
1
o
2
.
.
.
o
m
)
=
p
(
x
1
∣
o
1
)
p
(
x
2
∣
o
2
)
.
.
.
p
(
x
m
∣
o
m
)
p(x_1x_2...x_m|o_1o_2...o_m)=p(x_1|o_1)p(x_2|o_2)...p(x_m|o_m)
p(x1x2...xm∣o1o2...om)=p(x1∣o1)p(x2∣o2)...p(xm∣om)
综合上面两个假设,原始的最大化目标就变成了
m
a
x
p
(
x
∣
o
)
p
(
o
)
=
m
a
x
p
(
o
1
)
p
(
x
1
∣
o
1
)
∑
i
=
2
m
p
(
o
i
∣
o
i
−
1
)
p
(
x
i
∣
o
i
)
\mathop{max}p(x|o)p(o)=\mathop{max}p(o_1)p(x_1|o_1)\sum_{i=2}^mp(o_i|o_{i-1})p(x_i|o_i)
maxp(x∣o)p(o)=maxp(o1)p(x1∣o1)i=2∑mp(oi∣oi−1)p(xi∣oi)
做了上面两个假设后,包含2n个变量的复杂概率图关系就变成了马尔科夫链。用下面有向图马尔科夫链来表示相互影响关系:
将上式
p
(
o
1
)
p(o_1)
p(o1)称为起始概率
π
\pi
π,
p
(
x
i
∣
o
i
)
p(x_i|o_i)
p(xi∣oi)称为发射概率
B
B
B,
p
(
o
i
∣
o
i
−
1
)
p(o_i|o_{i-1})
p(oi∣oi−1)称为状态转移概率
A
A
A。隐马尔科夫模型
λ
\lambda
λ可以用三元符号表示。
λ
=
(
π
,
A
,
B
)
\lambda=(\pi,A,B)
λ=(π,A,B)
3 马尔科夫三个问题
已知模型参数 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)和观测序列。计算在模型 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)下观测序列出现的概率 p ( o ∣ λ ) p(o|\lambda) p(o∣λ)
已知模型参数 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)和观测序列。估计最可能的状态序列。在预测时,需要使用动态规划思想来简化计算。将该算法称为维特比算法。其思想就是保存已经算过的值,需要使用时直接查表,无需在重头计算(跟斐切那波数列的计算思想一样)。不使用动态规划进行预测的时间复杂度是 O ( L N L ) O(LN^L) O(LNL)(L是序列长度,N是隐状态可取值的个数)。使用动态规划后时间复杂度下降至 O ( L N 2 ) O(LN^2) O(LN2)。