This presentation is CC BY 3.0 License
グラフアルゴリズム番外編:MecabとViterbiのアルゴリズム宮川 拓
View Slide
あらまし MecabはViterbiのアルゴリズムを使って、最適な形態素列を探している http://taku910.github.io/mecab/2/23
問題設定3/23
問題設定 前提 隠れマルコフモデルのパラメータ(初期状態確率、遷移確率、出力確率)が既知 観測値の系列が既知 問題 もっとも尤もらしい状態の系列は?4/23
例 場所中のMT君は、尾上部屋の里山さんの勝敗しだいでその日の機嫌が決まる 里山さんの勝ち、負けの初期状態確率、遷移確率は分かっている 先場所中のMT君の機嫌は、彼のTwitter投稿を見て把握している 先場所の里山さんのもっとも尤もらしい星取表は?5/23
初期状態・遷移確率勝敗場所前.5.5.7.3.6.46/23
出力確率勝敗上機嫌平静不機嫌.6.1.1.8.3.17/23
観測系列何日目? 出力 勝負結果初日 上機嫌 ?二日目 上機嫌 ?三日目 平静 ?四日目 不機嫌 ?五日目 平静 ?六日目 上機嫌 ?千秋楽 不機嫌 ?8/23
解くべき問題勝敗上機嫌.5.5勝敗上機嫌勝敗平静 不機嫌 平静 上機嫌前不機嫌勝 勝 勝 勝敗 敗 敗 敗.7.3.6.4勝敗を結ぶパスのうち、もっとも尤もらしいパスを選ぶ.1.89/23
解法の考え方10/23
解法の考え方1. 千秋楽は勝敗どっちが尤もらしいか考える 千秋楽の勝・敗それぞれに至るもっとも尤もらしい系列と、その確率が必要2. 千秋楽の勝・敗それぞれに至るもっとも尤もらしい系列と、その確率を考える 六日目の勝・敗それぞれに至るもっとも尤もらしい系列と、その確率が必要3. 以下同様11/23
千秋楽は勝敗どっち?勝敗上機嫌.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
千秋楽敗戦に至る最尤の系列は?勝敗上機嫌.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.02413/23
整理 その日の敗戦(勝利)にいたるもっとも尤もらしい系列とその確率を求めるには、前日の勝利・敗戦にいたるもっとも尤もらしい系列と、その確率が分かれれば良い ↑に対しては動的計画法が有効 問題は部分問題の組み合わせで表せる 問題ツリーの部分木には重複がある 「五日目勝ちにいたるもっとも尤もらしい勝敗の系列」は、六日目勝利・敗戦を考える場合両方で使われる14/23
動的計画法の具体策 トップダウン+メモ化 大きな部分問題から、小さな部分問題を再帰的呼び出しで解く 重複する部分問題の結果はキャッシュして再利用する ボトムダウン → Viterbiはこっち 小さな部分問題から大きな部分問題へと順番に問いていく15/23
Viterbiのアルゴリズム16/23
Viterbi勝敗.5.5前初日勝利・敗戦にいたるもっとも尤もらしい系列とその確率は自明‹ 勝›, 確率=0.5‹ 敗›, 確率=0.517/23
Viterbi上機嫌勝前.7.4‹勝, 勝›: 0.5*0.6*0.7=0.21 → 採用‹敗, 勝›: 0.5*0.1*0.4=0.02.1.6勝敗0.50.518/23
Viterbi勝敗上機嫌敗前.3.6‹勝, 敗›: 0.5*0.6*0.3=0.09 → 採用‹敗, 敗›: 0.5*0.1*0.6=0.03.1.60.50.519/23
Viterbi勝敗上機嫌敗前‹勝, 勝, 勝›: 0.21*0.6*0.7=0.0882 → 採用‹勝, 敗, 勝›: 0.09*0.1*0.4=0.0036勝上機嫌0.21勝0.0920/23
Viterbi勝敗上機嫌敗前‹勝, 勝, 敗›: 0.21*0.6*0.3=0.0378 → 採用‹勝, 敗, 敗›: 0.09*0.1*0.6=0.0054勝上機嫌0.21敗0.0921/23
22/23トリック ステップが進むと、系列の確率が小さくなり、精度が落ちてしまう(アンダーフロー) 対策: 確率の対数を持つ
Mecabにおける応用https://www.slideshare.net/secret/9MHZC7bldJC8Z223/23