Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Viterbiのアルゴリズム /viterbi-algorithm
Search
Miyakawa Taku
December 11, 2017
Technology
0
280
Viterbiのアルゴリズム /viterbi-algorithm
This presentation is CC BY 3.0 License
Miyakawa Taku
December 11, 2017
Tweet
Share
More Decks by Miyakawa Taku
See All by Miyakawa Taku
入門: 末尾呼び出し最適化 /tail-call-elimination-intro
miyakawataku
2
2.4k
JVM言語の動き方・動かし方 /make-jvm-lang
miyakawataku
6
2.1k
Java SE 8から11で何が起きた?一気におさらいしてみよう! /java-se-8-to-11
miyakawataku
15
5.3k
ミニバッチサイズと学習率の関係 /small-batch-learning
miyakawataku
0
2.1k
機械学習プロジェクトの進め方 /howtoproceedwithmlproject
miyakawataku
0
350
グラフアルゴリズムその2: 単一始点最短路問題 /graphShortestPaths
miyakawataku
0
170
Strassenのアルゴリズムによる行列積の計算 /strassen-algorithm
miyakawataku
8
3.3k
Other Decks in Technology
See All in Technology
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
2
630
SREの次のキャリアの道しるべ 〜SREがマネジメントレイヤーに挑戦して、 気づいたこととTips〜
coconala_engineer
1
590
第64回コンピュータビジョン勉強会「The PanAf-FGBG Dataset: Understanding the Impact of Backgrounds in Wildlife Behaviour Recognition」
x_ttyszk
0
130
VGGT: Visual Geometry Grounded Transformer
peisuke
1
550
「クラウドコスト絶対削減」を支える技術—FinOpsを超えた徹底的なクラウドコスト削減の実践論
delta_tech
4
180
american aa airlines®️ USA Contact Numbers: Complete 2025 Support Guide
aaguide
0
470
【あのMCPって、どんな処理してるの?】 AWS CDKでの開発で便利なAWS MCP Servers特集
yoshimi0227
6
600
PO初心者が考えた ”POらしさ”
nb_rady
0
220
アクセスピークを制するオートスケール再設計: 障害を乗り越えKEDAで実現したリソース管理の最適化
myamashii
1
250
Copilot coding agentにベットしたいCTOが開発組織で取り組んだこと / GitHub Copilot coding agent in Team
tnir
0
120
成長し続けるアプリのためのテストと設計の関係、そして意思決定の記録。
sansantech
PRO
0
140
CDK Toolkit Libraryにおけるテストの考え方
smt7174
1
360
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Music & Morning Musume
bryan
46
6.7k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
GitHub's CSS Performance
jonrohan
1031
460k
Statistics for Hackers
jakevdp
799
220k
Optimizing for Happiness
mojombo
379
70k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
6
320
Producing Creativity
orderedlist
PRO
346
40k
Transcript
グラフアルゴリズム番外編: MecabとViterbiのアルゴリズム 宮川 拓
あらまし MecabはViterbiのアルゴリズムを使って、 最適な形態素列を探している http://taku910.github.io/mecab/ 2/23
問題設定 3/23
問題設定 前提 隠れマルコフモデルのパラメータ (初期状態確率、遷移確率、出力確率) が既知 観測値の系列が既知
問題 もっとも尤もらしい状態の系列は? 4/23
例 場所中のMT君は、尾上部屋の里山さんの 勝敗しだいでその日の機嫌が決まる 里山さんの勝ち、負けの初期状態確率、 遷移確率は分かっている 先場所中のMT君の機嫌は、彼のTwitter投 稿を見て把握している
先場所の里山さんのもっとも尤もらしい 星取表は? 5/23
初期状態・遷移確率 勝 敗 場所前 .5 .5 .7 .3 .6 .4
6/23
出力確率 勝 敗 上機嫌 平静 不機嫌 .6 .1 .1 .8
.3 .1 7/23
観測系列 何日目? 出力 勝負結果 初日 上機嫌 ? 二日目 上機嫌 ?
三日目 平静 ? 四日目 不機嫌 ? 五日目 平静 ? 六日目 上機嫌 ? 千秋楽 不機嫌 ? 8/23
解くべき問題 勝 敗 上機嫌 .5 .5 勝 敗 上機嫌 勝
敗 平静 不機嫌 平静 上機嫌 前 不機嫌 勝 勝 勝 勝 敗 敗 敗 敗 .7 .3 .6 .4 勝敗を結ぶパスのうち、もっとも尤もらしい パスを選ぶ .1 .8 9/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.024 13/23
整理 その日の敗戦(勝利)にいたるもっとも尤も らしい系列とその確率を求めるには、 前日の勝利・敗戦にいたるもっとも尤もらし い系列と、その確率が分かれれば良い ↑に対しては動的計画法が有効 問題は部分問題の組み合わせで表せる
問題ツリーの部分木には重複がある 「五日目勝ちにいたるもっとも尤もらし い勝敗の系列」は、六日目勝利・敗戦を 考える場合両方で使われる 14/23
動的計画法の具体策 トップダウン+メモ化 大きな部分問題から、小さな部分問題を 再帰的呼び出しで解く 重複する部分問題の結果はキャッシュし て再利用する
ボトムダウン → Viterbiはこっち 小さな部分問題から大きな部分問題へと 順番に問いていく 15/23
Viterbiのアルゴリズム 16/23
Viterbi 勝 敗 .5 .5 前 初日勝利・敗戦にいたるもっとも尤もらしい 系列とその確率は自明 ‹ 勝›,
確率=0.5 ‹ 敗›, 確率=0.5 17/23
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
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
Viterbi 勝 敗 上機嫌 敗 前 ‹勝, 勝, 勝›: 0.21*0.6*0.7=0.0882
→ 採用 ‹勝, 敗, 勝›: 0.09*0.1*0.4=0.0036 勝 上機嫌 0.21 勝 0.09 20/23
Viterbi 勝 敗 上機嫌 敗 前 ‹勝, 勝, 敗›: 0.21*0.6*0.3=0.0378
→ 採用 ‹勝, 敗, 敗›: 0.09*0.1*0.6=0.0054 勝 上機嫌 0.21 敗 0.09 21/23
22/23 トリック ステップが進むと、系列の確率が小さくな り、精度が落ちてしまう(アンダーフ ロー) 対策: 確率の対数を持つ
Mecabにおける応用 https://www.slideshare.net/secret/9MHZC7bl dJC8Z2 23/23