Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
形態素解析器をフルスクラッチで作る話
Search
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
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
780
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
AmebaブログはKMPから卒業します
kmars0605
0
200
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
700
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
170
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.6k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
500
Chasing Engaging Ingredients in Design
codingconduct
0
360
The browser strikes back
jonoalderson
0
1.8k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The Invisible Side of Design
smashingmag
301
52k
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 —