Upload
shinya-shimizu
View
4.052
Download
2
Embed Size (px)
DESCRIPTION
もともとM1の6月に内部向けに作ったものなので需要不明ですがとりあえず内部向けにうp
Citation preview
やるおがTriphone HMMを作るようです
June 7, 2011, Shinya Shimizu(@kakenman)
2011年6月7日火曜日
____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ 今日はなんとなくtriphone音響モデルを作りたい気分だお! ¦ ¦r┬-¦ ¦ \ `ー'´ /
/ \ / _ノ ヽ、_ \ / o゚((●)) ((●))゚o \ でもぶっちゃけmonophone音響モデルもよく分かってないお ¦ (__人__) ¦ HTKに詳しいやらない夫に聞いてみるお! \ ` ⌒´ /
2011年6月7日火曜日
¦┃三 ガラッ ¦┃ ____ ¦┃/⌒ ⌒\ ¦┃(●) (●) \ ̶̶‐.¦┃:⌒(__人__)⌒:::::\ えへへっ ¦┃ ¦r┬-¦ ¦⌒) HTKの使い方教えてくれだお! ¦┃ `ー'ォ // (⌒ヽ・ ・‾ / ¦┃ノ / ¦┃ つ < ¦┃ (::)(::) ヽ ¦┃/ > ) ¦┃ (__)
¦┃ ¦┃ ____ ¦┃/⌒ ⌒\ ¦┃ (̶) (̶)\ ̶̶‐.¦┃:⌒(__人__)⌒:::::\ ¦┃ ¦ ¦┃ / ¦┃ヽ・ ・‾ / ¦┃ \ ,.:∴̃・:,゜・̃・:,゜・ , ¦┃ヽ_)つ‘∴・゜゜・・∴̃・:,゜・・∴ ¦┃ (::)(::) ヽ ・゜゜・∴̃゜ ¦┃/ > ) ゜゜・∴:,゜・̃ ¦┃ (__) :,゜・̃:,゜・゜゜・̃
2011年6月7日火曜日
/‾‾\ /ノ( _ノ \ ¦ ⌒(( ●)(●) < HTKBook読んで勝手にやってろ! .¦ (__人__) /⌒l ¦ ` ⌒´ノ ¦`'''¦ / ⌒ヽ } ¦ ¦ ____ ぐぇあ / へ \ }__/ / /─ ̶\ / / ¦ ノ ノ /●)) ((●\ . ’, ・ ( _ ノ ¦ \´ _ / (__人__)’,∴\ , ’ ¦ \_,, -‐ ''" ‾‾゙''̶---└'´‾`ヽ/ > て .¦ __ ノ / ( ヽ _,, -‐ ''"‾ヽ、‾ `ー'´ / r'"‾ \ , '´ / .¦ \ ( / ¦ \ \ / ¦
2011年6月7日火曜日
____ / \ / _ノ ヽ、_ \ / o゚((●)) ((●))゚o \ でもHTKBookは英語だお・・・ ¦ (__人__) ¦ そもそもBaum-WelchどころかHMMもよくわかってないお \ ` ⌒´ / でもHTKが使えるようにしてくれだお
/‾‾\ / _ノ \ HMMわかってなくてHTKが理解できるわけないだろ・・・ ¦ ( ●)(●) . ¦ (__人__) まぁ,だが一応だいたいの説明をしながら演習をすることはできる ¦ ` ⌒´ノ 就職も決まったし教えてやるよ・・・. ¦ } . ヽ } ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
2011年6月7日火曜日
/‾‾\ / _ノ \ まず,HMMだが,HMMについてちゃんと説明し出すと結構な手間だ. ¦ ( ●)(●) 全く分かってないんなら,「(時間的に)変化する特徴量の系列を記述したもの」. ¦ (__人__) と思っておけばいい.音素の数だけHMMを作って,入力音声に対して, ¦ ` ⌒´ノ /a/のHMMはどうか?/i/のHMMはどうか・・・と順番にあてはめていって,. ¦ } 一番それっぽいものを認識結果とするわけだな.. ヽ } ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
※ HMMは「(時間的に)変化する特徴量のモデル化」というのがポイント。時間的に定常なもの、例えば画像がリンゴかナシかの分類をしたいのであれば、単に画素について、「りんごの画素の分布」と「ナシの画素の分布」を学習すればよい。ところが、音声の場合は時間的に変化するので、時間的に分布が変化していくようなモデルを用いる必要がある。
2011年6月7日火曜日
/‾‾\ / _ノ \ で,/a/のHMM,/i/のHMM...を作成してやる必要がある. ¦ ( ●)(●) そこで用いられるHMMの学習アルゴリズムがBaum-Welchアルゴリズムだ.. ¦ (__人__) これも詳細は説明しないが,このアルゴリズムはHMMを0から作ることは ¦ ` ⌒´ノ できない.既にあるHMMのパラメータをアップデートし改良することだけだ.. ¦ } . ヽ } ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
____ / ノ \\ / (●) (●)\ HMMの作成にHMMが必要とか,意味不明だお・・・ / ∪ (__人__) \ 頭がおかしくなったのかお・・・ ¦ ` ⌒´ ¦ \ /⌒)⌒)⌒) //⌒)⌒)⌒) ノ ¦ / / / (⌒) / / / / /´ ¦ :::::::::::(⌒) ゝ :::::::::::/ ¦ l ¦ ノ / ) / ヽ ヽ_ヽ /' / / ヽ __ / / /
2011年6月7日火曜日
/‾‾\ / \ ¦:::::: | まだ説明は途中だろ,常識的に考えて・・・ . ¦::::::::::: | ¦:::::::::::::: | ....,:::´, . . ¦:::::::::::::: } ....:::,, .. . ヽ:::::::::::::: } ,):::::::ノ . ヽ:::::::::: ノ (:::::ソ: . /:::::::::::: く ,ふ´.. -̶̶̶̶̶¦:::::::::::::::: \ -̶,̶̶ノ::ノ̶̶ ¦:::::::::::::::¦ヽ、二⌒)━̃̃'´
2011年6月7日火曜日
/‾‾\ / _ノ \ Baum-Welchは0からHMMを作ることはできないから,初期HMMがいる. ¦ ( ●)(●) そして初期HMMの作り方には二種類ある.. ¦ (__人__) ひとつは,自分で必死で音声を切り出して,ここからここまでが/a/ですよ, ¦ ` ⌒´ノ と教えてやって初期モデルを作る方法だ.HInitコマンドを使ってやる.. ¦ } だが,音声を切り出すのが面倒だし,今回はやらん.. ヽ } ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
※ Baum-WelchとEM: 一般的に,隠れ変数を持つモデルのパラメータ推定を,隠れ変数の期待値(Expectation)を求めるのと,パラメータの最尤推定解を求める(Maximization)のを繰り返すアルゴリズムをEMアルゴリズム(Expectation
Maximization algorithm)と呼ぶ.HMMに対しEMの考え方を用いてパラメータ推定を行うアルゴリズムをBaum-Welch
アルゴリズムという.つまり,EMは一般名,Baum-WelchはHMMに固有な名前と考えればよい. ちなみに,Baum-Welchの考え方は,(E)「どこがどの音素っぽいか求める」(M)「じゃあ音素の特徴がわかる」(E)
「それを用いてどこがどの音素っぽいか再推定する」(M)「音素の特徴を再推定する」(E)「どこがどの音素っぽいか(ry となる.
2011年6月7日火曜日
/‾‾\ / _ノ \ もう一つの方法は,「どこからどこまでが/a/とかわかんないから,全部同じ ¦ ( ●)(●) 初期値でいいや」という方法だ.flat startと呼ばれる.今回はこれを使う.. ¦ (__人__) ¦ ` ⌒´ノ コマンドとしては,HCompVを使う.これを使って,全部ひっくるめた平均の. ¦ } 初期モデルを作成しているのがtutorialの2だ.. ヽ } 3では,それを全音素にコピーして初期値としている. ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
※ 前ページのEMでも触れたが,「音素の特徴を推定するには,どこがどの音素か見極める必要がある.」「どこがどの音素か見極めるには,音素の特徴が分かっていなければならない」という「服を買いに行く服がない」問題をどう解くかがポイントになる。
2011年6月7日火曜日
/‾‾\ / _ノ \ ¦ ( ●)(●) . ¦ (__人__) ¦ ` ⌒´ノ これで初期HMMができた.あとはラベル(どの音声ファイルがどの音素列で. ¦ } 構成されているか)と音声ファイルを使ってHMMをアップデートしていくだろ,. ヽ } 常識的に考えて. ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
2011年6月7日火曜日
/‾‾‾\ / ─ ─ \ / (●) (●) \. ラベルはあるけど,spが書き起こされていないお ¦ (__人__) ¦ このままだと,spは一回も登場していないから学習されないお \ ` ⌒´ / それでいいのかお / \
/‾‾\ / _ノ \ ¦ ( ●)(●) そこに気付くとはなかなか鋭いな. . ¦ (__人__) spはどこで発声されるか分かりづらく,書き起こされていないことが多いんだ. ¦ ` ⌒´ノ 普通,音声を聞いて書き起こすのではなく,セリフを予め用意して読んでもらう. ¦ } わけだしな.. ヽ } ヽ ノ だがとりあえずあんまり気にしなくていい.無視して学習しろ.コマンドは / く \ HERest (Embedded Re-estimation) だ.tutorialの4がこれに当たるな. ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
※ sp: short pause. 文の間ではなく,文中に任意に現れる休止区間.息継ぎとか.文の読み方によってどこで現れるかが異なるので,どこにあるか分からない.
2011年6月7日火曜日
____ / \ / _ノ ヽ、_ \ / o゚((●)) ((●))゚o \ ほんとはちゃんとしたラベルで学習したいんだお・・・ ¦ (__人__)' ¦ \ `⌒´ /
____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ でもどこにspが入っているかまでラベルに書いていないお・・・ ¦ (__人__) ¦ \ ` ⌒´ /
____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ だからspはなかったことにして学習するお! ¦ ¦r┬-¦ ¦ \ `ー'´ /
2011年6月7日火曜日
____ / \ ( ;;;;( / _ノ ヽ__\) ;;;;)/ (─) (─ /;;/¦ (__人__) l;;,´ spを無視してとりあえずsp以外を学習したものの,/ ∩ ノ)━・'/ spの学習はどうするんだお・・・( \ / _ノ´.¦ ¦.\ " /__¦ ¦ \ /___ /
/‾‾\ / _ノ \ ¦ ( ●)(●) . ¦ (__人__) 大丈夫だ.spは要はポーズだ. ¦ ` ⌒´ノ 長さなど多少は違うものの,silE, silBとかなり似ているんだ.. ¦ } とりあえず,silEをコピーしてspにしておけばいいだろう.. ヽ } これがtutorialの5だな。 ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
2011年6月7日火曜日
¦王¦ ┴ ソ 十/ ¦ ¦ ¦ ¦ _丿 ニ¦ニ¦ニ 二 王 /レ、 レ ¦ ¦ ¦ \ ノ ヽ 口 我 Vン ノ ・・ ) いくらなんでもsilEをコピーしてspってのはひどいお ヽ それだったらそもそもspを作る必要がないお! / \ 丿\ `v'⌒ヽ/⌒ヽ/ ,. ‐- .. _ / ( ●) (●) / __ `` ー- 、 / ::::::⌒(_人__)⌒ヽ , ィ/ ゝヽ‾ヽ ー- ' ¦ ¦r┬-¦ ¦ _ / { {ヽ、_ ヽ' ノ_,.〉 \ `ー'´ /ァー- 、_ ... -‐ ' ヽヽ、 `>、..ノ=┘ /j >-‐ ' ´/ / / / _ノ \ `ー '! , -‐ 7´/{⌒¦ / _/ j >‐' / / //¦ 〉‐f/ \' ! , ' ´ / ,' > .¦/ レ ゚ノ ¦ ,.. -‐ '"/ { ヽ ¦ 〉 /__ t ,. -‐ ' ´ ¦ ヽ¦ / / ' ` ヽ、 / ¦ `!// /
/‾‾\ / \ spを含めてそれらしい音響モデルができたんだ,
¦:::::: | それを使ってspの場所をdetectして . ¦::::::::::: | ラベルを書き直して学習し直すだろ,常識的に考えて・・・ ¦:::::::::::::: | ....,:::´, . . ¦:::::::::::::: } ....:::,, .. . ヽ:::::::::::::: } ,):::::::ノ . ヽ:::::::::: ノ (:::::ソ: . /:::::::::::: く ,ふ´.. -̶̶̶̶̶¦:::::::::::::::: \ -̶,̶̶ノ::ノ̶̶ ¦:::::::::::::::¦ヽ、二⌒)━̃̃'´
2011年6月7日火曜日
/‾‾‾\ / ─ ─ \ / (●) (●) \. よくわからないお. ¦ (__人__) ¦ spを無視して学習するのは必要だったのかお? \ ` ⌒´ / / \
/‾‾\ / _ノ \ 本当はsp入りのラベルが欲しいが,どこにspが入っているか分からない. ¦ ( ●)(●) そこでどこにspが入っているか自動推定したいんだが,そのためには. ¦ (__人__) どこがどの音っぽい,という情報,HMMが必要になる. ¦ ` ⌒´ノ HMMを作るのにHMMが必要になるわけだ.そこで,まずspを無視して. ¦ } 粗いHMMを作成しておいて,それを使ってspの位置を推定して,改めて. ヽ } 学習し直すんだ. ヽ ノ spの位置を推定しているのがtutorialの6,それを用いて学習し直して / く \ いるのがtutorialの7だ. ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
2011年6月7日火曜日
/‾‾\ / _ノ \ ¦ ( ●)(●) 面倒なようだが,これはBaum-Welchを使う上での宿命だな.. ¦ (__人__) Baum-Welchは,HMMのパラメータを更新するんだが,更新前のパラメータ ¦ ` ⌒´ノ から近い局所最適解に近づくだけ,という特徴がある.. ¦ } つまり,初期値を適切に設定してやる必要があるわけだ.. ヽ } そのため,初期値を更新してBaum-Welch・・・初期値を更新して ヽ ノ Baum-Welch・・・という手順を踏むことになる. / く \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
____ / \ ( ;;;;( / _ノ ヽ__\) ;;;;)/ (─) (─ /;;/¦ (__人__) l;;,´ なんか面倒だお・・・/ ∩ ノ)━・'/ ( \ / _ノ´.¦ ¦.\ " /__¦ ¦ \ /___ /
※実際にはBaum-Welchの問題というよりはもっと大きな「服を買いに行く服がない」問題
2011年6月7日火曜日
/‾‾\ / _ノ \ ¦ ( ●)(●) . ¦ (__人__) ¦ ` ⌒´ノ これでようやく,monophone音響モデルの完成だ.. ¦ } . ヽ } ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
2011年6月7日火曜日
/‾‾‾\ / ─ ─ \ / (●) (●) \. ¦ (__人__) ¦ monophone音響モデル? \ ` ⌒´ / / \
/‾‾\ / _ノ \ ¦ ( ●)(●) . ¦ (__人__) ¦ ` ⌒´ノ . ¦ } ああ,monophoneだ.. ヽ } ヽ ノ / く \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
2011年6月7日火曜日
γ ⌒⌒ヽ やるおはtriphoneの作り方を聞いたんだお!! /‾‾\ ( ( ヽ ) ノ monophoneなんて要らないんだお! /_ノ \ (⌒) 三 ノ 从 ゝ ( ●)( ●) ヽ 三/ ¦ ニ ____ (⌒) . ¦ (__人__) u } ¦ ¦ /\ / ) し / ¦ ミ ¦ ` ⌒´ ノ ! 、 /(○ )::(○ )⌒\/ ¦ ミ . ¦ } \./:::::::(_人_):::::::: i' ¦. ヽ } ¦ )ww) ¦ ¦ ヽ ノ ヘ \ `ー" ノ / く 、_/っ/ \ . . \ ¦ \--一'' \ ¦ ¦ヽ、二⌒)、 \
まぁまて,落ち着け・・・
2011年6月7日火曜日
/‾‾\ / _ノ \ さっきもいった通り,Baum-WelchによるHMMの更新には初期値が重要になる ¦ ( ●)(●) 突然triphoneを作ると,初期値が適当でないから変な値になってしまうんだ.. ¦ (__人__) triphoneは,monophoneの種類の三乗の種類があるんだからな.※ ¦ ` ⌒´ノ ここまでで作ったmonophoneのHMMを初期値として,triphoneのHMMを. ¦ } 学習するんだ.. ヽ } ヽ ノ ここらがtutorialの10,11,12に当たるな. / く \ 言い忘れていたが,monophone->triphoneなど,HMMの変更には ¦ \ \ HHEd(HMM Edit)を用いる ¦ ¦ヽ、二⌒)、 \
※一般論として,求めるべきパラメータに対して学習サンプルが少なすぎると,たまたま出てきたサンプルに適合するように学習されてしまって汎用性がなくなる.これを過学習(Overfitting)という.これを防ぐため,今回のように,だいたいこういう値だよ,という事前知識を与えてやる方法がよく用いられる ちなみに,triphoneはmonophoneの三乗あるってのは実は嘘.t t t とかいうtriphoneが存在しないように,言語的に存在し得ない音素列は多い.
2011年6月7日火曜日
/‾‾\ / _ノ \ ¦ ( ●)(●) . ¦ (__人__) ¦ ` ⌒´ノ これで,基本的にtriphoneHMMは完成だ.. ¦ } . ヽ } ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
/‾‾‾\ / ─ ─ \ / (●) (●) \. まだtutorialには13,14,15,16,17があるお ¦ (__人__) ¦ こいつらは不要なのかお \ ` ⌒´ / / \
2011年6月7日火曜日
/‾‾\ それは,triphoneの過学習を緩和するために状態共有を行ったり, / \ HMMの出力分布をSingle GaussianからGaussian Mixtureに ¦:::::: | 変更したりしている部分だな.GMM(Gaussian Mixture Model)は . ¦::::::::::: | はSingle Gaussianより記述力が高く,より自由なモデル化ができる ¦:::::::::::::: | . ¦:::::::::::::: } ....:::,, .. . ヽ:::::::::::::: } ,):::::::ノ . ヽ:::::::::: ノ (:::::ソ: . /:::::::::::: く ,ふ´.. -̶̶̶̶̶¦:::::::::::::::: \ -̶,̶̶ノ::ノ̶̶ ¦:::::::::::::::¦ヽ、二⌒)━̃̃'´
/‾‾‾\ / ─ ─ \ / (●) (●) \. 日本語でおkだお ¦ (__人__) ¦ \ ` ⌒´ / / \
2011年6月7日火曜日
/‾‾\ / _ノ \ ¦ ( ●)(●) . ¦ (__人__) ¦ ` ⌒´ノ まぁ,この辺は別に本質じゃない.説明しようと思えばできるが・・・. ¦ } 今日はとりあえずここまででいいだろう.ちゃんとtriphoneHMMはできたしな.. ヽ } ヽ ノ \ / く \ \ ¦ \ \ \ ¦ ¦ヽ、二⌒)、 \
2011年6月7日火曜日
/‾‾\ / ヽ_ .\ というわけで,これで終了だ. ( ●)( ●) | あとはHTKBookを読んで頑張ってくれ. (__人__) ¦ l` ⌒´ | { | やるおがTriphone HMMを作るようです { / 完 ヽ ノ ▼/‾ ‾‾)____ 〃(⊥) ´/ /‾‾/ / 〃 ⌒i ___i /⌒\./ /∧ ∧し' __¦;;;;;;;;;;i
2011年6月7日火曜日
使ったコマンドまとめ1• HCopy
• 特徴量抽出コマンド.今回はwavからMFCCを作った.
• HCompV
• データ全ての平均と分散をとる.flat startのHMMの初期化に使う
• HInit & HRest
• bootstrapped startの時に使う.手動で音声を切り分けてHMMを初期化
• HERest ( Embedded Re-estimation)
• 音声データとその音素ラベルを用いて,Baum-WelchによりHMMのパラメータ更新を行う.
• HERestとHRestの違い
• HERestはEmbedded.手動で音声を切り分けずに,「こことここが同じ音」という条件だけをもとに自動切り分けをしつつ学習する.HRestは手動切り分けが必要.
2011年6月7日火曜日
使ったコマンドまとめ2
• HParse
• 手動で作成した認識用文法をコンパイルして認識に使える形式にする.
• HVite (Viterbi)
• 文法による音声認識を行う.(大語彙連続音声認識は無理)• 認識結果を与えて音素のアラインメントに用いることもできる.• 結果を与えた音素アラインメントを強制アラインメントという• HLEd (Label Edit)
• ラベルファイルを編集する.今回はmonophoneラベルからtriphoneラベルへの変更に用いた.
• HHEd (HMM Edit)
• HMMを編集する.今回はMixture数の変更などに用いた.
2011年6月7日火曜日