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