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
形態素解析器をフルスクラッチで作る話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Nakano Masaki
May 01, 2019
Programming
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
形態素解析器をフルスクラッチで作る話
Nakano Masaki
May 01, 2019
Other Decks in Programming
See All in Programming
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
650
XHTMLが残したもの
yosuke_furukawa
PRO
2
420
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
680
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
150
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
670
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
140
自分的「カンファレンスの楽しみ方」
syumai
0
190
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
270
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.8k
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Prompt Engineering for Job Search
mfonobong
0
440
Designing for humans not robots
tammielis
254
26k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Abbi's Birthday
coloredviolet
3
9.8k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
670
A Modern Web Designer's Workflow
chriscoyier
698
190k
Unsuck your backbone
ammeep
672
58k
Facilitating Awesome Meetings
lara
57
7.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
BBQ
matthewcrist
89
10k
Transcript
Twitter Bot をフルスクラッチで作る話 Nakano Masaki 香川高専 電気情報工学科 5 年 Wed
1th May, 2019 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 1 / 25 —
Twitter Bot をフルスクラッチで作る話 Nakano Masaki 香川高専 電気情報工学科 5 年 Wed
1th May, 2019 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 2 / 25 —
形態素解析器をフルスクラッチで作る話 Nakano Masaki 香川高専 電気情報工学科 5 年 Wed 1th May,
2019 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 3 / 25 —
自己紹介と今日の話題 中野将生 (なかの まさき) 香川高専 電気情報工学科 4 年 本題 Twitter
Bot の典型的な実装 bi-gram マルコフモデルの形態素解析器のアルゴリズム 高速な Trie 木と Latice 解析の実装 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 4 / 25 —
Twitter Bot n つ組 (NoSQL など) オタク ツイート 分かち書き (
形態素解析) マルコフ連鎖 Twitter API この辺の話をします 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 5 / 25 —
文章生成の詳細 形態素 n 個で切り出す キョン ! 形態素 ! 形態素 解析
形態素 解析 する 解析 する わ する わ よ 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 6 / 25 —
文章生成の詳細 しりとりをする オススメ の うどん うどん 食べ て て なかっ
た EOS BOS 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 7 / 25 —
マルコフ連鎖とは ? 過去と関係なく、現在の状態のみで未来への遷移が決まる 離散的な状態を取る A B C D E F
B とC の何方を経由しようとD からの遷移は変わらない Text 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 8 / 25 —
文章生成の詳細 文脈を考慮しないしりとりなので、次の n つ組は現在の n つ 組の最後の形態素で決まる (マルコフ性) n つ組みの個数は自然数個であり、連続的な値を取らない
(離 散的) つまりマルコフ連鎖 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 9 / 25 —
必要なもの 学習元 Twitter API との通信 3 つ組みを格納する DB 形態素解析器 形態素解析器をフルスクラッチで作る話
Nakano Masaki — 10 / 25 —
必要なもの 学習元 (オタクなのでツイート数には困らない) Twitter API との通信 (書いている人は多い) 3 つ組みを格納する DB(要求が単純でデータも精々
MB 単位) 形態素解析器 (実は実装できる) → 実装できるのでは ? 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 11 / 25 —
形態素解析器の基本的なアルゴリズム 辞書を引きながら候補 (Latice) を列挙する 生起コスト (単語の出現しやすさ) と連接コスト (単語の繋が りやすさ) を考慮して最短経路を求める
実際は Latice 構築と探索は並行して行う 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 12 / 25 —
形態素解析器の基本的なアルゴリズム BOS 東 一般名詞 東京 固有名詞 京 固有名詞 京都 固有名詞
都 接尾名詞 都 一般名詞 に 格助詞 住 一般名詞 住む 自立動詞 む 一般名詞 EOS 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 13 / 25 —
形態素解析器の基本的なアルゴリズム BOS 東 一般名詞 東京 固有名詞 京 固有名詞 京都 固有名詞
都 接尾名詞 都 一般名詞 に 格助詞 住 一般名詞 住む 自立動詞 む 一般名詞 EOS 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 14 / 25 —
Trie 木 Root f i s l h l m
k n o w 魚 埋める フィル ム 知る 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 15 / 25 —
Trie 木 キーの長さを 、データの数を とする 時間計算量は理想的には O() 木構造ではなく二次元配列で実装 ヒープを使った単純な木の実装では非常に低速 形態素解析器をフルスクラッチで作る話
Nakano Masaki — 16 / 25 —
Trie 木 Root f i s l h l m
k n o w 魚 埋める フィル ム 知る 1 2 3 4 5 6 7 8 9 10 11 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 17 / 25 —
遷移表 状態に一意な ID を振る 状態と入力をキーにする遷移先を書き込んだ表を考える 表を使い状態と入力から O(1) で遷移すれば高速 幸い文字コードは整数値で表現できる 形態素解析器をフルスクラッチで作る話
Nakano Masaki — 18 / 25 —
遷移表 状態 入力 f i s h l m k
n o w 1 2 2 3 5 3 4 4 5 6 7 6 7 8 9 9 10 10 11 11 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 19 / 25 —
問題点 スッッカスカ メモリの無駄遣い (実際愚直にやると 200 GB くらい必要) 形態素解析器をフルスクラッチで作る話 Nakano Masaki
— 20 / 25 —
解決策 遷移表を圧縮する 行ごとに少しづつずらして重ね合わせる (BASE) 別の行と混同しないよう親の位置を覚えておく (CHECK) 圧縮は割と適当でもそこそこ詰まる 圧縮は工夫しないと追加に O() が必要
形態素解析器をフルスクラッチで作る話 Nakano Masaki — 21 / 25 —
Latice 4 6 7 9 10 11 2 3 5
2 3 4 5 6 7 9 10 11 遷移 BASE 0 0 0 1 1 1 1 2 1 3 3 7 8 CHECK 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 22 / 25 —
Latice BOS 東 一般名詞 東京 固有名詞 京 固有名詞 京都 固有名詞
都 接尾名詞 都 一般名詞 に 格助詞 住 一般名詞 住む 自立動詞 む 一般名詞 EOS 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 23 / 25 —
Latice マルコフ性より過去の形態素は考慮しなくていい 部分和問題を解けばコストを計算できる DP で解ける 文章長を とすると O( )(本当はちょっと違う) 形態素解析器をフルスクラッチで作る話
Nakano Masaki — 24 / 25 —
ありがとうございました 形態素解析器をフルスクラッチで作る話 Nakano Masaki — 25 / 25 —