Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Viterbiのアルゴリズム /viterbi-algorithm

5e8c7a93f4cd63b62ced5dd347f1a8e0?s=47 Miyakawa Taku
December 11, 2017

Viterbiのアルゴリズム /viterbi-algorithm

This presentation is CC BY 3.0 License

5e8c7a93f4cd63b62ced5dd347f1a8e0?s=128

Miyakawa Taku

December 11, 2017
Tweet

Transcript

  1. グラフアルゴリズム番外編: MecabとViterbiのアルゴリズム 宮川 拓

  2. あらまし  MecabはViterbiのアルゴリズムを使って、 最適な形態素列を探している  http://taku910.github.io/mecab/ 2/23

  3. 問題設定 3/23

  4. 問題設定  前提  隠れマルコフモデルのパラメータ (初期状態確率、遷移確率、出力確率) が既知  観測値の系列が既知 

    問題  もっとも尤もらしい状態の系列は? 4/23
  5. 例  場所中のMT君は、尾上部屋の里山さんの 勝敗しだいでその日の機嫌が決まる  里山さんの勝ち、負けの初期状態確率、 遷移確率は分かっている  先場所中のMT君の機嫌は、彼のTwitter投 稿を見て把握している

     先場所の里山さんのもっとも尤もらしい 星取表は? 5/23
  6. 初期状態・遷移確率 勝 敗 場所前 .5 .5 .7 .3 .6 .4

    6/23
  7. 出力確率 勝 敗 上機嫌 平静 不機嫌 .6 .1 .1 .8

    .3 .1 7/23
  8. 観測系列 何日目? 出力 勝負結果 初日 上機嫌 ? 二日目 上機嫌 ?

    三日目 平静 ? 四日目 不機嫌 ? 五日目 平静 ? 六日目 上機嫌 ? 千秋楽 不機嫌 ? 8/23
  9. 解くべき問題 勝 敗 上機嫌 .5 .5 勝 敗 上機嫌 勝

    敗 平静 不機嫌 平静 上機嫌 前 不機嫌 勝 勝 勝 勝 敗 敗 敗 敗 .7 .3 .6 .4 勝敗を結ぶパスのうち、もっとも尤もらしい パスを選ぶ .1 .8 9/23
  10. 解法の考え方 10/23

  11. 解法の考え方 1. 千秋楽は勝敗どっちが尤もらしいか考える  千秋楽の勝・敗それぞれに至るもっと も尤もらしい系列と、その確率が必要 2. 千秋楽の勝・敗それぞれに至るもっとも尤 もらしい系列と、その確率を考える 

    六日目の勝・敗それぞれに至るもっと も尤もらしい系列と、その確率が必要 3. 以下同様 11/23
  12. 千秋楽は勝敗どっち? 勝 敗 上機嫌 .5 .5 勝 敗 上機嫌 勝

    敗 平静 不機嫌 平静 上機嫌 前 不機嫌 勝 勝 勝 勝 敗 敗 敗 敗 .7 .3 .6 .4 .1 .8 (仮定) 勝敗勝敗 勝敗勝 六日目までの機嫌との同時確率=0.06 (仮定) 敗勝敗勝敗勝敗 六日目までの機嫌との同時確率=0.01 千秋楽の機嫌との同時確率を考える  千秋楽勝ち: 0.06*0.1 = 0.006  千秋楽敗け: 0.01*0.8 = 0.008 → 尤もらしい 12/23
  13. 千秋楽敗戦に至る最尤の系列は? 勝 敗 上機嫌 .5 .5 勝 敗 上機嫌 勝

    敗 平静 不機嫌 平静 上機嫌 前 勝 勝 勝 敗 敗 敗 敗 .7 .3 .6 .4 (仮定) 敗勝 敗 勝 敗勝 五日目までの機嫌との同時確率=0.2 (仮定) 勝敗勝敗勝敗 五日目までの機嫌との同時確率=0.4 .1 .6 .6 .3 六日目の機嫌・千秋楽敗戦との同時確率を考える  六日目勝ち: 0.2*0.6*0.3 = 0.036 → 採用  六日目敗け: 0.4*0.1*0.6 = 0.024 13/23
  14. 整理  その日の敗戦(勝利)にいたるもっとも尤も らしい系列とその確率を求めるには、 前日の勝利・敗戦にいたるもっとも尤もらし い系列と、その確率が分かれれば良い  ↑に対しては動的計画法が有効  問題は部分問題の組み合わせで表せる

     問題ツリーの部分木には重複がある  「五日目勝ちにいたるもっとも尤もらし い勝敗の系列」は、六日目勝利・敗戦を 考える場合両方で使われる 14/23
  15. 動的計画法の具体策  トップダウン+メモ化  大きな部分問題から、小さな部分問題を 再帰的呼び出しで解く  重複する部分問題の結果はキャッシュし て再利用する 

    ボトムダウン → Viterbiはこっち  小さな部分問題から大きな部分問題へと 順番に問いていく 15/23
  16. Viterbiのアルゴリズム 16/23

  17. Viterbi 勝 敗 .5 .5 前 初日勝利・敗戦にいたるもっとも尤もらしい 系列とその確率は自明 ‹ 勝›,

    確率=0.5 ‹ 敗›, 確率=0.5 17/23
  18. Viterbi 上機嫌 勝 前 .7 .4 ‹勝, 勝›: 0.5*0.6*0.7=0.21 →

    採用 ‹敗, 勝›: 0.5*0.1*0.4=0.02 .1 .6 勝 敗 0.5 0.5 18/23
  19. Viterbi 勝 敗 上機嫌 敗 前 .3 .6 ‹勝, 敗›:

    0.5*0.6*0.3=0.09 → 採用 ‹敗, 敗›: 0.5*0.1*0.6=0.03 .1 .6 0.5 0.5 19/23
  20. Viterbi 勝 敗 上機嫌 敗 前 ‹勝, 勝, 勝›: 0.21*0.6*0.7=0.0882

    → 採用 ‹勝, 敗, 勝›: 0.09*0.1*0.4=0.0036 勝 上機嫌 0.21 勝 0.09 20/23
  21. Viterbi 勝 敗 上機嫌 敗 前 ‹勝, 勝, 敗›: 0.21*0.6*0.3=0.0378

    → 採用 ‹勝, 敗, 敗›: 0.09*0.1*0.6=0.0054 勝 上機嫌 0.21 敗 0.09 21/23
  22. 22/23 トリック  ステップが進むと、系列の確率が小さくな り、精度が落ちてしまう(アンダーフ ロー)  対策: 確率の対数を持つ

  23. Mecabにおける応用 https://www.slideshare.net/secret/9MHZC7bl dJC8Z2 23/23