本文详解paper "A Tutorial on HMMs and Selected Applications in Speech Recognition"并进行matlab实现(尽量用其他编程语言通用的实现,不实现problem2)
Problem 2
给出observation序列,模型lambda=(A,B,pi), 选择state序列Q=q1q2…qT
即探索隐性状态
问题在于如何定义最佳state,即最佳的标准
定义变量
即给出模型和观测序列,估计出t时刻state为Si的概率
用problem1中的forward-backward变量来表示gamma_t(i)
回忆一下
这样
利用gamma,可以求解t时刻最匹配(匹配个数期望值最多)的state qt
但是这样会有一个问题,因为是单个选出每个时刻t的state,那么即使aij=0,即不可能迁移,也会选到那个state,只考虑单个,没有考虑整个序列
那么换一个规定最佳的标准,最常用的标准是选出一个最好的state序列,使P(Q | O, lambda)最大,等价于最大化P(Q, O | lambda)
解决方法是DP,Viterbi算法:
给定observation序列O={O1O2…OT},找出最佳state序列Q={q1q2…qT}
定义
0~t的observation, state序列,t时刻的state是Si的最大score
归纳得到
为了得到最佳的state序列,对每个t,每个j都要跟踪,用一个数组来跟踪
完整流程
- 初始化
- 归纳
- 结果
- path backtracking 得到state序列