aihot  2020-11-12 11:20:41  OpenCV |   查看评论   

  前向变量的归纳关系图如下,其实也就是我上一段讲的东西:

前向变量的归纳关系

前向变量的归纳关系

  t时刻已经输出到Ot了,然后先让所有可能的状态转移到状态sj,然后再让sj发射出符号O(t+1)。

  由此我们得到了前向算法,首先依照初始状态概率分布和初始输出符号O1对状态进行初始化,然后依照递推公式计算出所有的αT(i),将其求和即得到P(O|µ)。

  前向算法的时间复杂度为O(T*N^2),N^2是两层相乘,T是层数。

  求解P(O|µ),除了前向算法之外,相应的,我们还要提出一个后向算法。

  对应于前向变量,我们定义一个后向变量βt(i)βt(i)是在给定模型µ,并且t时刻状态为si的条件下,HMM输出观察序列O(t+1)O(t+2)...OT的概率。这里和前向变量有一个明显的不同,对于前向变量,条件只有模型µ,说的是『输出O1O2...OT,且状态为si的概率』,而后向变量说的是『状态为si的条件下,输出O(t+1)O(t+2)...OT的概率』,条件除了µ之外,状态si也成了前提条件。后向变量表达式如下:

后向变量

后向变量

  我们思考一下怎么用后向变量表示P(O|µ),看着后向变量的表达式,我们考虑,如果t=1呢?那么后向变量βt(i)就成了初始状态为si然后输出后续观察序列为O2O3...OT的概率了,那还缺什么?缺两部分,一个是初始状态,而且我们要考虑所有可能的si初始状态,第二个就是我们还缺观察序列的第一个符号,也就是O1,那么我们只要让s1输出O1就可以了,也即我们用后向变量表示出了P(O|µ),如下式:

浅谈自然语言处理基础

 

  ∑求和考虑了所有的初始状态,然后πi给出了任意初始状态的出现概率,然后后面bi(O1)是该初始状态发射出观察符号O1的概率。

  对照前向算法,我们还缺后向变量的递推公式,我们想一下t+1时刻的后向变量和t时刻的后向变量的关系,因为最后我们需要的是β1(i),所以我们的递推公式应该是由β(t+1)(j)得到β(t)(i)β(t)(i)是状态为si下,后续输出为O(t+1)O(t+2)...OT,β(t+1)(j)是状态为sj下,后续状态为O(t+2)O(t+3)...OT的概率。我们考虑一下由β(t+1)(j)β(t)(i)需要什么,首先我们缺一个输出符号O(t+1),这个输出符号正是由t+1时刻的状态sj输出的,所以我们需要乘以一个bj(O(t+1)),然后我们的状态不对,我们需要由状态sj转移到si,所以需要乘以aij,而且t时刻对应状态si下,t+1时刻对应的状态sj是任意的,所以我们需要∑求和。

  我们参考一下后向变量的归纳关系图,和我上一段讲的是一个意思:

后向变量的归纳关系

后向变量的归纳关系

  t+1时刻后面的O(t+2)已经有了,缺O(t+1),我们就让所有可能的sj都去生成O(t+1),然后再让这些sj都转化成β(t)(i)里面的那个si

  由此我们得到了后向算法,首先初始化βT(i)=1,然后根据递推公式计算出β1(i),最后按照前面的公式通过β1(i)计算出P(O|µ)。

  然后其实更一般的,我们可以采用前向算法和后向算法相结合的方法来计算P(O|µ):

浅谈自然语言处理基础

 

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自浅谈自然语言处理基础(上)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]