やるおが
               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日火曜日
     ____
           /      \ ( ;;;;(
          /  _ノ  ヽ__\) ;;;;)
        /    (─)  (─ /;;/
        |       (__人__) l;;,´  なんか面倒だお・・・
        /      ∩ ノ)━・'/  
        (   \ / _ノ´.|  |
        .\  "  /__|  |
          \ /___ /

     / ̄ ̄\
   /   _ノ  \   
   |    ( ●)(●)   面倒なようだが,これはBaum-Welchを使う上での宿命だな.
  . |     (__人__)   Baum-Welchは,HMMのパラメータを更新するんだが,更新前のパラメータ
    |     ` ͡´ノ  から近い局所最適解に近づくだけ,という特徴がある.
  .  |         }   つまり,初期値を適切に設定してやる必要があるわけだ.
  .  ヽ        }    そのため,初期値を更新してBaum-Welch・・・初期値を更新して
     ヽ     ノ    Baum-Welch・・・という手順を踏むことになる.
     /    く  \       
     |     \   \         \
      |    |ヽ、二͡)、          \


   ※実際には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日火曜日

やるおが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日火曜日