1

認識された文字から単語を認識するために、sklearn で左右の離散 HMM を作成しようとしています。シンボル セットは、すべて「 」 + 26 文字で、合計 27 シンボルです。

import numpy as np
from sklearn import hmm

# alphabet is symbols
symbols = [' ','a','b','c','d','e','f','g','h','i','j',  #0-10
           'k','l','m','n','o','p','q','r','s','t',  #11-20
           'u','v','w','x','y','z']                  #21-26
num_symbols = len(symbols)

# words up to 6 letters
n_states = 6   

obsONE = np.array([ [0,0,15,14,5,0],     # __one_
                [15,14,5,0,0,0],     # one___
                [0,0,0,15,14,5],     # ___one
                [0,15,14,5,0,0],     # _one__
                [0,0,16,14,5,0],     # __pne_
                [15,14,3,0,0,0],     # onc___
                [0,0,0,15,13,5],     # ___ome
                [0,15,14,5,0,0],     # _one__
                [0,0,15,14,5,0],     # __one_
                [15,14,5,0,10,15],   # one_jo
                [1,14,0,15,14,5],     # an_one
                [0,15,14,5,0,16],     # _one_p
                [20,0,15,14,5,0],     # t_one_
                [15,14,5,0,10,15],     # one_jo
                [21,20,0,15,14,5],     # ut_one
                [0,15,14,5,0,20],     # _one_t
                [21,0,15,14,5,0],     # u_one_
                [15,14,5,0,10,15],     # one_jo
                [0,0,0,15,14,5],     # an_one
                [0,15,14,5,0,26],     # _one_z
                [5,20,0,15,14,5] ])    


pi = np.array([1.0, 0.0, 0.0, 0.0, 0.0, 0.0])  # initial state is the left one always

A = np.array([[0.0, 1.0, 0.0, 0.0, 0.0, 0.0],  # node 1 goes to node 2
          [0.0, 0.5, 0.5, 0.0, 0.0, 0.0],  # node 2 can self loop or goto 3
          [0.0, 0.0, 0.5, 0.5, 0.0, 0.0],  # node 3 can self loop or goto 4
          [0.0, 0.0, 0.0, 0.5, 0.5, 0.0],  # node 4 can self loop or goto 5
          [0.0, 0.0, 0.0, 0.0, 0.5, 0.5],  # node 5 can self loop or goto 6
          [1.0, 0.0, 0.0, 0.0, 0.0, 0.0]])  # node 6 goes to node 1     

model = hmm.MultinomialHMM(n_components=n_states,
                       startprob=pi,          # this is the start matrix, pi
                       transmat=A,            # this is the transition matrix, A
                       params='e',            # update e in during training (aka B)
                       init_params='ste')     # initialize with s,t,e   

model.n_symbols = num_symbols
model.fit(obsONE)  

しかし、 ValueError: Input must be both positive integer array とすべての要素が連続している必要があります。

コードは、観測を [0,1,2,3,4,5] として実装することを直接望んでいるようです。

必要な HMM モデルを取得するには、これをどのように設定すればよいですか?

4

1 に答える 1