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
320
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.5k
JVM言語の動き方・動かし方 /make-jvm-lang
miyakawataku
6
2.3k
Java SE 8から11で何が起きた?一気におさらいしてみよう! /java-se-8-to-11
miyakawataku
15
5.6k
ミニバッチサイズと学習率の関係 /small-batch-learning
miyakawataku
0
2.3k
機械学習プロジェクトの進め方 /howtoproceedwithmlproject
miyakawataku
0
380
グラフアルゴリズムその2: 単一始点最短路問題 /graphShortestPaths
miyakawataku
0
200
Strassenのアルゴリズムによる行列積の計算 /strassen-algorithm
miyakawataku
8
3.6k
Other Decks in Technology
See All in Technology
Everything Claude Code を眺める
oikon48
2
2.7k
ランサムウエア対策してますか?やられた時の対策は本当にできてますか?AWSでのリスク分析と対応フローの泥臭いお話。
hootaki
0
130
OSC仙台プレ勉強会 AlmaLinuxとは
koedoyoshida
0
160
AI実装による「レビューボトルネック」を解消する仕様駆動開発(SDD)/ ai-sdd-review-bottleneck
rakus_dev
0
130
社内レビューは機能しているのか
matsuba
0
120
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
210
[JAWSDAYS2026][D8]その起票、愛が足りてますか?AWSサポートを味方につける、技術的「ラブレター」の書き方
hirosys_
3
180
複数クラスタ運用と検索の高度化:ビズリーチにおけるElastic活用事例 / ElasticON Tokyo2026
visional_engineering_and_design
0
150
非情報系研究者へ送る Transformer入門
rishiyama
11
7.5k
Evolution of Claude Code & How to use features
oikon48
1
610
元エンジニアPdM、IDEが恋しすぎてCursorに全業務を集約したら、スライド作成まで爆速になった話
doiko123
1
630
Lambda Web AdapterでLambdaをWEBフレームワーク利用する
sahou909
0
120
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.1k
The Cult of Friendly URLs
andyhume
79
6.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.9k
Technical Leadership for Architectural Decision Making
baasie
3
290
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Building the Perfect Custom Keyboard
takai
2
710
Rails Girls Zürich Keynote
gr2m
96
14k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
HDC tutorial
michielstock
1
540
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
KATA
mclloyd
PRO
35
15k
Writing Fast Ruby
sferik
630
63k
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