音声認識メモ(Kaldi)その21(音韻モデル)

認識対象を孤立単語から発展させて、もう少し実用的な使い方を試してみる。

まず、トレーニング対象の発話を音素に分解する。

元の文
オススメの料理は何ですか
文を単語へ分解(分かち書き、「MeCab」を使用)
オススメ の 料理 は 何 です か 
単語を音素列へ分解(「Julius」付属の「yomi2voca.pl」を使用)
オススメ	o s u s u m e
の	n o
料理	ry o u r i
は	w a
何	n a N
です	d e s u
か	k a

音素については、無音(sp、sil)を除けば「40」種類。

音素表

f:id:ichou1:20180722113500p:plain
(引用元)
http://winnie.kuis.kyoto-u.ac.jp/dictation/doc/phone_m.pdf

この内、「dy」(「ぢゃ」、「ぢゅ」、「ぢょ」)については対象外とし、
「39」種類の音素全部を使って20種類の文を作り、それぞれ3回ずつ音声データ60個分を用意した。

発話文(20種類)

オススメ の 料理 は 何 です か

o s u s u m e   n o   ry o u r i   w a   n a N   d e s u   k a  

百 十 番 テーブル へ どうぞ

hy a k u   j u u   b a N   t e: b u r u   e   d o u z o  

ラーメン と 餃子 の セット を 1つ お願い し ます

r a: m e N   t o   gy o u z a   n o   s e q t o   o   h i t o ts u   o n e g a i   sh i   m a s u  

メニュー お願い し ます

m e ny u:   o n e g a i   sh i   m a s u  

禁煙 席 お願い し ます

k i N e N   s e k i   o n e g a i   sh i   m a s u  

お 水 4つ お願い し ます

o   m i z u   y o q ts u   o n e g a i   sh i   m a s u  

フォーク 2つ お願い し ます

f o: k u   f u t a ts u   o n e g a i   sh i   m a s u  

コーヒー は 食後 に お願い し ます

k o: h i:   w a   sh o k u g o   n i   o n e g a i   sh i   m a s u  

ソフトドリンク は あり ます か

s o f u t o d o r i N k u   w a   a r i   m a s u   k a  

持ち帰り に でき ます か

m o ch i k a e r i   n i   d e k i   m a s u   k a  

別々 に でき ます か

b e ts u b e ts u   n i   d e k i   m a s u  k a

ごちそうさま でし た

g o ch i s o u s a m a   d e sh i   t a  

牛肉 に し て ください

gy u u n i k u   n i   sh i   t e   k u d a s a i  

キャベツ は お 代わり 自由 です

ky a b e ts u   w a   o   k a w a r i   j i y u u   d e s u  

サプライズ は でき ます か

s a p u r a i z u   w a   d e k i   m a s u   k a  

シャンパン を ください

sh a N p a N   o   k u d a s a i  

かんぴょう を ください

k a N py o u   o  k u d a s a i

食事 は ビュッフェ スタイル です

sh o k u j i   w a   by u q f e   s u t a i r u   d e s u  

みょうが を 添え て ください

my o u g a   o   s o e   t e   k u d a s a i  

コーヒー と 紅茶 どちら に し ます か

k o: h i:   t o   k o u ch a   d o ch i r a   n i   sh i   m a s u   k a  
(参考) data/lang/phones.txt
<eps> 0
sil 1
sil_B 2
sil_E 3
sil_I 4
sil_S 5
spn 6
spn_B 7
spn_E 8
spn_I 9
spn_S 10
N_B 11
N_E 12
N_I 13
N_S 14
a_B 15
a_E 16
a_I 17
a_S 18
<snip>
z_B 163
z_E 164
z_I 165
z_S 166

「禁煙 席 お願い し ます」という音声データ1個分を検証用データ、
残り59個の音声データをトレーニング用として試したところ、各モデルでのデコード結果は以下のとおりとなった。

モノフォン(mono)

1-gram
utterance_id_053 禁煙 お願い し ます 
LOG (gmm-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance utterance_id_053 is -8.01345 over 323 frames.
2-gram
utterance_id_053 禁煙 席 お願い し ます 
LOG (gmm-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance utterance_id_053 is -7.97456 over 323 frames.
gmm-info実行結果
gmm-info exp/mono/final.mdl 
number of phones 166
number of pdfs 127
number of transition-ids 1116
number of transition-states 518
feature dimension 39
number of gaussians 1004

モデルのNUMPDFS(pdf-class数) : 127 ( 5hmm_state * 2phone + 3hmm_state * 29phone )


トライフォン(tri1)

1-gram
utterance_id_053 禁煙 お願い し ます 
LOG (gmm-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance utterance_id_053 is -7.9652 over 323 frames.
2-gram
utterance_id_053 禁煙 席 お願い し ます 
LOG (gmm-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance utterance_id_053 is -7.92976 over 323 frames.
gmm-info実行結果
gmm-info exp/tri1/final.mdl 
number of phones 166
number of pdfs 152
number of transition-ids 1740
number of transition-states 830
feature dimension 39
number of gaussians 977

トライフォン(tri2b、LDA+MLLT)

1-gram
utterance_id_053 禁煙 お願い し ます 
LOG (gmm-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance utterance_id_053 is -4.92207 over 323 frames.
2-gram
utterance_id_053 禁煙 お願い し ます 
LOG (gmm-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance utterance_id_053 is -4.89113 over 323 frames.
gmm-info実行結果
gmm-info exp/tri2b/final.mdl 
number of phones 166
number of pdfs 168
number of transition-ids 2246
number of transition-states 1083
feature dimension 40
number of gaussians 970

DNN(nnet4c)

1-gram
utterance_id_053 禁煙 お願い し ます 
LOG (nnet-latgen-faster[5.3.106~1389-9e2d8]:DecodeUtteranceLatticeFaster():decoder-wrappers.cc:286) Log-like per frame for utterance utterance_id_053 is -0.543315 over 323 frames.
nnet-am-info実行結果
nnet-am-info exp/nnet4c/final.mdl 
num-components 9
num-updatable-components 3
left-context 4
right-context 4
input-dim 40
output-dim 192
parameter-dim 446703
component 0 : SpliceComponent, input-dim=40, output-dim=360, context=-4 -3 -2 -1 0 1 2 3 4 
component 1 : FixedAffineComponent, input-dim=360, output-dim=360, <snip>
component 2 : AffineComponentPreconditionedOnline, input-dim=360, output-dim=375, <snip>
component 3 : TanhComponent, input-dim=375, output-dim=375
component 4 : AffineComponentPreconditionedOnline, input-dim=375, output-dim=375, <snip>
component 5 : TanhComponent, input-dim=375, output-dim=375
component 6 : AffineComponentPreconditionedOnline, input-dim=375, output-dim=453, <snip>
component 7 : SoftmaxComponent, input-dim=453, output-dim=453
component 8 : SumGroupComponent, input-dim=453, output-dim=192
prior dimension: 192, prior sum: 1, prior min: 1e-20


"禁煙"の後ろの"席"が欠落してしまっているケースがあるが、トレーニング用データ数や重みパラメータによって結果は変わってくると予想される。

また、今回、例えば「料理」という単語に関しては、「ry o u r i」としたが、「ry o: r i」(りょーり)でも認識できるようにすると良いと思われる。
このあたりは、話し言葉という領域の奥深さを感じる。