📝
TinySegmenterMaker で分かち書きの学習のメモ
C++ やスマホ組み込みなどで, 辞書のいらない分かち書き機能ほしい...
ありがとうございます!
学習時の注意
を参考に wikipedia データセットを fugashi(Mecab + unidic)で分かち書き + shuffle で行ってみましたが, フルだとディスク不足なりメモリ不足なりでうまくいきませんでした.
unix split で -l 1024*128
で 12 万行のファイル(50MB)に減らしても, features.txt は 5GB, 学習はマルチスレッドでも 1 時間以上かかる感じです.
学習には 10 ~ 100 MB くらいにしたデータセットがよいでしょう.
また, wikipedia データセットでも概ね分かち書きはうまく行く感じでしたが, 十分ではないかもしれません.
ターゲットとなる文章ごとに, その文章のサブセットを抜き出して, fugashi/sudachipy あたりで分かち書きしてデータセットを追加で用意し, 追加学習するとよいでしょう.
(TinySegmenterMaker の解説ページにあるように, 手動で分かち書き学習データ調整や用意が理想)
マルチスレッド処理
multithread 有用でビルドした場合は, -m
でスレッド数指定する必要があることに注意です!
学習時間参考
Wikipedia データ 512*1024 行(features.txtは概ね 30 GB くらい消費)の学習は, 12 cores PC で 10 時間ほどでした.
finding instances...: 67128566 instances found
loading instances...: 67128000/67128566 instances loaded
9999 0.00229697
Result:
Accuracy: 95.7636% (64284707/67128566)
Precision: 97.5246% (37869786/38831022)
Recall: 95.2641% (37869786/39752409)
System/Answer p/p p/n n/p n/n: 37869786 961236 1882623 26414921
私 の 名前 は 中野 で す
real 596m23.362s
user 5836m19.186s
sys 1m2.570s
生成される学習モデルについて
学習モデルのサイズはコンパクトです. 10240 行の wikipedia で学習したモデルは, 500 行 14 KB でした.
$ wc wiki-10240.model
466 931 14907 wiki-10240.model
学習済みモデル
こちらに 1024 * 512 行ぶんで学習したものをアップロードしました.
TODO
- C++ 版を Emscripen で wasm 変換し, ブラウザで動かせるようにする.
- 分かち書きの性能の評価を行う. https://github.com/yuhsak/wakachigaki
Discussion