Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

問題設定 3/23

Slide 4

Slide 4 text

問題設定  前提  隠れマルコフモデルのパラメータ (初期状態確率、遷移確率、出力確率) が既知  観測値の系列が既知  問題  もっとも尤もらしい状態の系列は? 4/23

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

初期状態・遷移確率 勝 敗 場所前 .5 .5 .7 .3 .6 .4 6/23

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

観測系列 何日目? 出力 勝負結果 初日 上機嫌 ? 二日目 上機嫌 ? 三日目 平静 ? 四日目 不機嫌 ? 五日目 平静 ? 六日目 上機嫌 ? 千秋楽 不機嫌 ? 8/23

Slide 9

Slide 9 text

解くべき問題 勝 敗 上機嫌 .5 .5 勝 敗 上機嫌 勝 敗 平静 不機嫌 平静 上機嫌 前 不機嫌 勝 勝 勝 勝 敗 敗 敗 敗 .7 .3 .6 .4 勝敗を結ぶパスのうち、もっとも尤もらしい パスを選ぶ .1 .8 9/23

Slide 10

Slide 10 text

解法の考え方 10/23

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

千秋楽は勝敗どっち? 勝 敗 上機嫌 .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

Slide 13

Slide 13 text

千秋楽敗戦に至る最尤の系列は? 勝 敗 上機嫌 .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

Slide 14

Slide 14 text

整理  その日の敗戦(勝利)にいたるもっとも尤も らしい系列とその確率を求めるには、 前日の勝利・敗戦にいたるもっとも尤もらし い系列と、その確率が分かれれば良い  ↑に対しては動的計画法が有効  問題は部分問題の組み合わせで表せる  問題ツリーの部分木には重複がある  「五日目勝ちにいたるもっとも尤もらし い勝敗の系列」は、六日目勝利・敗戦を 考える場合両方で使われる 14/23

Slide 15

Slide 15 text

動的計画法の具体策  トップダウン+メモ化  大きな部分問題から、小さな部分問題を 再帰的呼び出しで解く  重複する部分問題の結果はキャッシュし て再利用する  ボトムダウン → Viterbiはこっち  小さな部分問題から大きな部分問題へと 順番に問いていく 15/23

Slide 16

Slide 16 text

Viterbiのアルゴリズム 16/23

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

22/23 トリック  ステップが進むと、系列の確率が小さくな り、精度が落ちてしまう(アンダーフ ロー)  対策: 確率の対数を持つ

Slide 23

Slide 23 text

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