存在三个基本的 HMM 问题:
问题 1(似然):给定一个 HMM λ = (A,B) 和一个观察序列 O,确定似然 P(O|λ)。
问题 2(解码):给定一个观察序列 O 和一个 HMM λ = (A,B),发现最佳隐藏状态序列 Q。
问题 3(学习):给定观察序列 O 和 HMM 中的状态集,学习 HMM 参数 A 和 B。
我对问题## 1 和 3 很感兴趣。一般来说,第一个问题可以用正向算法解决,第三个问题可以用 Baum-Welch 算法解决。我应该使用hmmlearn 的方法来分别解决第一个和第三个问题fit(X, lengths)
,我对吗?score(X, lengths)
(文档没有说score
使用前向算法。)
我还有一些关于score
方法的问题。为什么要score
计算对数概率?为什么如果我将几个序列传递给score
它返回对数概率的总和而不是每个序列的概率?
我最初的任务如下:我有 100 万个大小相同的短句(10 个单词)。我想用该数据训练 HMM 模型,并为测试数据(再次 10 个单词的句子)预测模型中每个句子的概率。根据这个概率,我将决定是那个通常或不寻常的短语。
也许有更好的python库来解决这些问题?