统计概率模型
1、高斯判别分析
2、朴素贝叶斯
3、隐马尔可夫模型
4、最大熵马尔科夫模型
5,条件随机场
6,马尔科夫决策过程
三、隐马尔可夫模型
一、隐马尔科夫模型定义
隐马尔科夫模型是一种时序的概率模型,描述由一个隐的马尔科夫链随机生成的不可观察的隐状态序列,在每一个隐状态下随机产生观察值构成一个可观测的随机序列。其中关键是状态序列是满足马尔科夫性质的,且可观测序列是由隐藏的状态序列以一定的概率随机生成。
在自然语言中文分词中,由于自然语言是有明显的上下文关系的,即当前字与其前后出现的字都是有关系的。为了表示前一个字对当前字的影响,我们用一个隐状态来表示前的语义状态,用在前一个状态下转移到发射出当前字的隐状态的概率表示前一个字对当前字的影响。整个来说就是把上下文字对字的影响转化成状态对状态的影响。而用发射概率来表示状态到字的关系。值得注意的是隐马尔可夫模型中 p(ot,it|it−1)=p(ot|it)p(it|it−1) p ( o t , i t | i t − 1 ) = p ( o t | i t ) p ( i t | i t − 1 ) ,即 it−1 i t − 1 与 ot o t 之间独立作用 it i t 。
隐马尔科夫模型由状态集,观测集,初始状态转移概率,状态转移概率,以及发射概率确定。
形式化定义为:
所有可能的隐藏状态集Q,所有可能的观察值集V,其中
n
n
是可能的状态数,是可能的观察数。
假设 I I 是长度为的隐状态序列, O O 是其对应的观测值序列。
A A 是状态转移概率矩阵:
其中 aij=p(it+1=qj|it=qi) a i j = p ( i t + 1 = q j | i t = q i ) ,表示第 t t 时刻在状态下转移到第 t+1 t + 1 时刻状态 qj q j 的概率。
B
B
是发射概率矩阵,在隐状态确定之后发射出观测状态的概率:
其中 bj(k)=p(ot=vk|it=qj) b j ( k ) = p ( o t = v k | i t = q j ) ,表示在状态 qj q j 下发射出 vk v k 的概率。
π
π
是初始状态的概率分布:
其中 πi=p(i1=qi) π i = p ( i 1 = q i ) ,表示在 t=1 t = 1 时刻状态为 qi q i 的概率。
由此,马尔科夫模型定义完成。至于为何这样定义,隐状态的意义是什么,就是模型的价值所在,如何理解隐状态也是一种个人体会。
有了隐马尔科夫模型,接下来看隐马尔科夫模型能做什么?
1、给定一个确定的隐马尔科夫模型(参数 λ={A,B,π} λ = { A , B , π } 确定)和观察序列 O O ,计算在该参数下观察序列的输出概率 。
概率计算,由于观测序列的产生于隐状态是相关的,所以需要从隐状态的转移概率入手,通过发射概率间接的转化到观察序列。一般情况下该观测序列对应的隐状态序列有多个,把所有隐状态可能的序列结合观察序列求概率,再求和。
2、学习问题,已知观察序列,估计模型参数 λ={A,B,π} λ = { A , B , π } ,使得在该模型下观测序列的概率最大。
学习问题,假设在不知道模型参数的情况下,而我们有大量的观察序列,那么这些大量的观察序列一定不是偶然是这样,而不是那样的。从概率的角度来讲,是这样,而不是那样的原因就是,是这样的概率大于是那样的概率。如果有大量的观察序列,那么其中必然隐藏了模型的信息。
3、预测问题,已知模型的参数 λ={A,B,π} λ = { A , B , π } 和观察序列O,求解一条使得该观测序列概率最大的隐状态序列 。这样概率计算类似,只需要求最大的即可。
好了,对应上面的三个问题,分别有三个算法求解对应的问题。
1概率计算-前向后向算法
2 参数学习-最大似然估计(有监督),Baum-Walch(无监督)
3 预测-Viterbi算法
一、概率计算(观察序列的概率)
给定一个确定的隐马尔科夫模型(参数
λ={A,B,π}
λ
=
{
A
,
B
,
π
}
确定)和观察序列
O={o1,o2,..ot..,oT}
O
=
{
o
1
,
o
2
,
.
.
o
t
.
.
,
o
T
}
,计算在该参数下观察序列的输出概率 。最直接的方法是计算所有可能的概率,即:
其中 I=i1,i2,..,iT I = i 1 , i 2 , . . , i T ,这 T T 个状态我们是看不见的,且没个时刻的取值都有 N N 中,由于隐状态与观察状态无关,其概率为:
由于 aitit+1 a i t i t + 1 的取值有 N2 N 2 种,但序列前后有一个相同的状态,所以整个 p(I|λ) p ( I | λ ) 的复杂度是 TNT T N T 。
而在参数和隐状态都确定的条件下,产生观察序列
O={o1,o2,..ot..,oT}
O
=
{
o
1
,
o
2
,
.
.
o
t
.
.
,
o
T
}
的概率为:
即整个 T T 时刻的发射概率的乘积。
因此在给定参数的条件下,产生观察序列的概率为
算法的复杂度为 TNT T N T 。之所以算法的复杂度高是分别计算 ait−1it a i t − 1 i t 和 aitit+1 a i t i t + 1 ,而忽略了序列之间的递推关系。
下面介绍隐马尔可夫概率计算问题中的前向-后向算法
前向概率:在给定模型的参数和观察序列
O={o1,o2,..ot}
O
=
{
o
1
,
o
2
,
.
.
o
t
}
下,
at(i)
a
t
(
i
)
表示
t
t
时刻的前向概率(从
t=1
t
=
1
时刻到
t
t
时刻观察序列
at=i
a
t
=
i
):
由前向递推关系 at(i) a t ( i ) 等于在所有可能的前一状态转移到当前状态(同时t时刻发射出观测值 ot o t )的概率之和
因此前向算法计算如下:
1)初值:
2)前向递推:
3)求和:
后向概率:在给定模型的参数和观察序列 O={ot+1,ot+2..,oT} O = { o t + 1 , o t + 2 . . , o T } 下, βt(i) β t ( i ) 表示 t t 时刻的后向概率(从 t t 时刻到时刻观察序列 O={ot+1,ot+2..,oT} O = { o t + 1 , o t + 2 . . , o T } , at=i a t = i ):
值得注意的是,后向概率表示序列从 t t 时刻到时刻的概率,所以 βt(i)≤βt+1(j) β t ( i ) ≤ β t + 1 ( j )
由后向递推关系 βt(i) β t ( i ) 等于所有可能的后一状态逆转移到当前状态(同时 t+1 t + 1 时刻发射出观测值 ot+1 o t + 1 )的概率之和
因此后向算法计算如下:
1)初值:
2)反向递推:
3)求和:
前向后向算法:
由上面的前向后向算法,固定
t
t
时刻的状态,由前向后向算法有:
二、参数估计
一般来讲,隐马尔可夫的参数估计问题分为两种,一种是有监督,一种是无监督的。有监督意味着给定的训练集中观测序列 O={o1,o2,..ot..,oT} O = { o 1 , o 2 , . . o t . . , o T } 和隐状态序列 I=i1,i2,..,iT I = i 1 , i 2 , . . , i T ,此时对应的参数估计问题就可以直接采用最大似然估计;无监督意味着给定的训练集中只有观测序列 O={o1,o2,..ot..,oT} O = { o 1 , o 2 , . . o t . . , o T } ,此时需要采用EM算法思想,先假设参数,通过期望最大化来获得隐状态序列 I=i1,i2,..,iT I = i 1 , i 2 , . . , i T (硬划分隐状态序列对应到值,软化分隐状态序列对应到概率),然后根据隐状态序列来更新参数,不断迭代至收敛。
有监督(最大似然估计):
转移概率
aij
a
i
j
表示从状态
i
i
转移到状态的概率
其中分子表示从 i i 状态转移到状态的次数,分母表示从 i i 状态转移到任意状态的次数。
发射概率表示在状态
i
i
下发射出观测值的概率:
其中分子表示在状态 i i 下发射出观测值的次数,分母表示在状态 i i 下发射出任意状态的次数。
初始状态转移概率为样本中初始状态的概率:
其中分子表示初始状态是 i i 的次数,分母表示所有初始状态出现的次数。
无监督(Baum-Welch):
隐马尔可夫模型中隐状态其实是一个隐变量,EM算法这类含有隐变量模型的通用求解算法,思路是初始化一个隐变量的概率分布,E步:期望最大化来更新样本的隐变量(值,概率),M步:在隐变量确定的条件下更新隐变量的概率。
三、状态预测
已知模型的参数和观察序列O,求解一条使得该观测序列概率最大的隐状态序列 。这样概率计算类似,只需要求最大的即可。
维特比算法:维特比算法是一种动态规划算法来求解概率最大路径,也是一种求解最优路径问题。而最优路径中总存在这样一个特性:如果最优路径 t t 时刻通过结点,那么最优路径中从结点 it i t 到最终结点 iT i T 的部分路径是所有可能从 it i t 到 iT i T 路径中最优的(同时从 i1 i 1 到 it i t 的路径也是最优的)。依据这一特性,我们可以从 t=1 t = 1 开始递推计算时刻 t t 下状态为的各种路径的最大概率,直至时刻 t=T t = T 状态为 i i 的最大概率。同时在递推的过程中,我们用一个变量来计住到达最优路径的上一个结点的状态。这样我们就首先确定了时刻的状态值 i i 。然后,根据到达该状态的上一个结点状态来递推到。
因此,我们需要引入两个变量,从
t=1
t
=
1
时刻到
t
t
时刻状态为的最优路径的概率值,并以此来递推下一时刻状态为
i
i
的最优路径,即
同时为了记住到达该路径的上一节点的状态,定义如下变量:
有了上面的两个变量,我们就可以获得隐状态的最优路径
1)初始化
2)递推,对 t=2,3..T t = 2 , 3.. T
3) 终止
4)最优路径回溯,
t=T−1..1
t
=
T
−
1..1
求得最优路径 I={i∗1,i∗2,..i∗T} I = { i 1 ∗ , i 2 ∗ , . . i T ∗ } 。
其中值得注意的是, ϕ1(i)=0 ϕ 1 ( i ) = 0 是无用的,在前向递推到 T T 时刻获得最大概率的同时也获得了最优的最终状态,回溯的过程只需要从 T−1 T − 1 开始,不需要任何计算,因为 ϕ ϕ 中保存了到达当前最优路径状态的上一状态。