分词算法模型学习笔记(一)——HMM

分词算法模型学习笔记(一)——HMM

Hidden Markov Model(HMM,隐马尔科夫模型)

主要参考资料:52nlp

1.HMM的特点

生成式模型

主要研究观察序列X和隐藏状态序列Y的联合概率分布P(X,Y)
通常为一阶马尔卡夫过程(即当前状态的概率分布只跟前一个状态有关)

P(X,Y)=P(Y)P(X|Y)=tP(Yt|Yt1)P(Xt|Yt)

HMM模型图示
HMM模型图示

2.HMM的三个基本用途

1.评估(比如语音识别)
计算某一观测序列X的出现概率

P(X)=YP(X,Y)

典型加速算法:前向算法、后向算法

2.解码(比如分词和词性标注)
对于某一观测序列X计算出使其出现概率最大的隐藏状态序列Y

argmaxYP(Y|X)=argmaxYP(X,Y)P(X)=argmaxYP(X,Y)

典型加速算法:维特比算法

3.参数学习
基于EM算法的加速算法:前向-后向算法(Baum-Welch算法)

3.前向算法

计算目标:

P(X=x)=yP(X1=x1,,Xt=xt,Yt=si)

如果直接利用上面的式子进行编程计算,需要枚举y的所有取值(假设隐藏状态数目为|S|,y则有 |S|T 个可能的取值),这种指数级的时间复杂度显然是行不通的。

下来我们考虑引入一个新的中间状态——通常称它为局部概率,从而避免大量不必要的计算(典型的动态规划策略)

αt(x,si)=P(X1=x1,,Xt=xt,Yt=si)

这个局部概率的含义可以解释为在对于所有以t时刻 si 结尾的隐藏状态跳转路径,它们产生观测序列 x1xt 的概率值之和。

算法步骤(时间复杂度为 O|S|2T ):

  1. 定义局部概率的初始值(边界值)

α1(x,si)=P(Y1=si)P(x1|si)

  1. 利用状态转移方程迭代计算当t=1,···,T-1时的局部概率值

αt+1(x,si)=[jαt(x,sj)P(si|sj)]P(xt+1|si)

  1. 利用计算好了的局部概率值,得到我们的最终目标

P(x)=jαT(x,sj)

具体图例(隐藏状态数|S|=3,序列总长度T=4,t=1):

前向算法

4.后向算法

后向算法的局部概率定义刚好跟前向算法恰好相反(值得注意的是前向算法使用的是联合概率,后向算法使用的是条件概率),但它们要解决的问题是一样的。

βt(x,si)=P(Xt+1=xt+1,,XT=xT|Yt=si)

其含义可以解释为在对于所有以t时刻 si 开头的隐藏状态跳转路径,它们产生观测序列 xt+1xT 的概率值之和。

算法步骤(时间复杂度为 O|S|2T ):

  1. 定义局部概率的初始值(边界值)

βT(x,si)=1

  1. 利用状态转移方程迭代计算当t=T-1,···,1时的局部概率值

βt(x,si)=jP(sj|si)βt+1(x,sj)P(xt|sj)

  1. 利用计算好了的局部概率值,得到我们的最终目标

P(x)=jP(Y1=sj)β1(x,sj)P(xt|sj)

具体图例(隐藏状态数|S|=3,序列总长度T=4,t=3):

后向算法

5.维特比算法

计算目标:

y^=argmaxyP(y,x)

同样地,为了避免枚举所有可能取值的y,需要采取动态规划策略,引入中间状态 δt(x,si)=maxy1yt1P(x1,,xt,y1,,yt1,Yt=si)
这个局部概率的含义可以解释为在所有以t时刻 si 结尾的隐藏状态跳转路径中,产生观测序列 x1xt 的最大概率值。
同时因为要求的是这个概率值最大的隐藏状态序列本身,而不是它的概率值,因此还需要一个回退指针变量 ψ 用于记录状态的转移情况。

算法步骤(时间复杂度为 O|S|2T ):

  1. 定义局部概率的初始值(边界值)

δ1(x,si)=P(Y1=si)P(x1|si)

  1. 利用状态转移方程迭代计算当t=1,···,T-1时的局部概率值

δt+1(x,si)=maxsj[δt(x,sj)P(si|sj)]P(xt+1|si)

ψt(x,si)=argmaxsj[δt(x,sj)P(si|sj)]

  1. 利用计算好了的局部概率值,确定回退起点

yT^=argmaxsjδT(x,sj)

  1. 利用回退指针变量 ψ ,逐个确定目标序列(t = T-1,···,1)

yt^=ψt(x,yt+1^)

具体图例(隐藏状态数|S|=3,序列总长度T=4):

维特比算法

6.前向-后向算法

未完待续。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值