隐马尔可夫模型(Hidden Markov Model,HMM)是概率学上的一种统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。
HMM正常主要用来解决三类问题,这三类问题对应都有相关的算法。
*1 评估问题: 前向 算法
*2 解码问题: Viterbi算法
*3 学习问题: Baum-Welch算法(向前向后算法)
Mahout中居然还真的支持了这几种算法,于是进行下实验。
(1)按照mahout官方文档给的例子进行测试。(https://mahout.apache.org/users/classification/hidden-markov-models.html
首先定义一个输入:
$ echo "0 1 2 2 2 1 1 0 0 3 3 3 2 1 2 1 1 1 1 2 2 2 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 2 2 2 3 3 3 3 3 3 2 3 2 3 2 3 2 1 3 0 0 0 1 0 1 0 2 1 2 1 2 1 2 3 3 3 3 2 2 3 2 1 1 0" > hmm-input
然后进行Baum-Welch算法测试
$ export MAHOUT_LOCAL=true
$ $MAHOUT_HOME/bin/mahout baumwelch -i hmm-input -o hmm-model -nh 3 -no 4 -e .0001 -m 1000
最后返回预测的结果值:
$ $MAHOUT_HOME/bin/mahout hmmpredict -m hmm-model -o hmm-predictions -l 10
轻松试验成功,搞定。结果如图所示。
(2)进行mahout例子中的词性判断例子验证,其结果如图所示: