如何训练具有多个观测序列的HMM模型 - 符号对

时间:2018-01-11 10:22:30

标签: python machine-learning hidden-markov-models

我正在尝试训练HMM模型以找到词性标注问题的模型参数。

我正在使用以下资源中的PythonHMM包: https://github.com/jason2506/PythonHMM

原始训练数据可能是这样的:

Sr.No.  Observations
1       killer/N clown/N
2       killer/N problem/N
3       crazy/A problem/N
4       crazy/A clown/N
5       problem/N crazy/A clown/N
6       clown/N crazy/A killer/N

我已经根据原始数据创建了每个序列的列表((状态列表,符号列表)对列表),按照指示通过PythonHMM用于列车模型。 它看起来像这样:

sequences = [
                 (['N','N'],['killer','clown']),
                 (['N','N'],['killer','problem']),
                 (['A','N'],['crazy','problem']),
                 (['A','N'],['crazy','clown']),
                 (['N','A','N'],['problem','crazy','clown']),
                 (['N','A','N'],['clown','crazy','killer'])
]

我正在打电话'火车' hmm的函数(在导入hmm.py之后)

model_hmm = hmm.train(sequences)

然后我收到以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-41-24d7c607e58c> in <module>()
----> 1 model_hmm = hmm.train(sequences)

/home/sk/hmm.py in train(sequences, delta, smoothing)
     95         for _, symbol_list in sequences:
     96             model.learn(symbol_list, smoothing)
---> 97             new_likelihood += log(model.evaluate(symbol_list))
     98 
     99         new_likelihood /= length

ValueError: math domain error

我无法弄清楚为什么会出现这个错误,将序列数据传递给训练函数还是其他什么问题?

我也没有找到针对此类问题的HMM模型培训的任何示例。请帮我解决这个错误。

2 个答案:

答案 0 :(得分:1)

hmmlearn实现已经支持具有多个观察序列的火车HMM。参见train hmm with multiple sequences

答案 1 :(得分:0)

nltk 库有HMM模型,它完全符合您的要求。

请参阅以下链接以便更好地理解:https://gist.github.com/blumonkey/007955ec2f67119e0909