我正在尝试使用维特比算法在HMM上找到最可能的路径(即状态序列)。 但是,我不知道过渡和发射矩阵,我需要从观测结果(数据)中估算出来。
要估算这些矩阵,我应该使用哪种算法:Baum-Welch还是Viterbi训练算法?为什么呢?
如果我应该使用维特比训练算法,任何人都可以为我提供一个好的伪码(它不容易找到)吗?
答案 0 :(得分:13)
如果有足够的资源,您应该使用Baum-Welch(前向 - 后向)算法而不是Viterbi 训练算法(也称为分段k均值算法),这是一个替代参数估计过程,牺牲了Baum-Welch的一些计算效率的一般性。一般来说,Baum-Welch算法会给出能够提高性能的参数,尽管有些情况下not the case.这是一个不错的comparative study。
此外,请注意,您应该使用Baum-Welch算法来估计模型的参数。这使用类似于EM算法的东西来设置发射概率和传输概率。在训练HMM之后,您将使用Viterbi 解码算法来计算可能产生观察结果的最可能的状态序列。
参考方面我建议Speech and Language Processing,Artificial Intelligence a Modern Approach或this paper
答案 1 :(得分:0)
来自http://nlp.stanford.edu/courses/lsa352/lsa352.lec7.6up.pdf:
与Baum-Welch相比,维特比训练是:
- 快得多
- 但是效果不好
- 但这种权衡往往是值得的。
一些比较研究:
Rodríguez,Luis Javier和InésTorres。 “Comparative study of the Baum-Welch and Viterbi training algorithms applied to read and spontaneous speech recognition”。在伊比利亚模式识别和图像分析会议,第847-857页。施普林格柏林海德堡,2003年。
在统计堆栈交换中提出了同样的问题:Differences between Baum-Welch and Viterbi training。
答案 2 :(得分:-1)
你必须通过baum welch算法来找出隐藏的马尔可夫模型参数。 baum welch使用前向和后向算法找出hmm参数。
我在python中有一个baum welch算法代码链接只需检查它: https://jyyuan.wordpress.com/2014/01/28/baum-welch-algorithm-finding-parameters-for-our-hmm/