📝

TinySegmenterMaker で分かち書きの学習のメモ

2023/08/14に公開

C++ やスマホ組み込みなどで, 辞書のいらない分かち書き機能ほしい...

https://shogo82148.github.io/blog/2012/11/23/tinysegmentermaker/

https://github.com/shogo82148/TinySegmenterMaker

ありがとうございます!

学習時の注意

https://takemikami.com/2023/05/22/WikipediaKenLM-RNNLM.html

を参考に 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 でスレッド数指定する必要があることに注意です!

https://github.com/shogo82148/TinySegmenterMaker/blob/80f9f5114d7a191863931d2ee49591d5eb76b989/train.cpp#L375

学習時間参考

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

学習済みモデル

https://github.com/lighttransport/japanese-llama-experiment/tree/main/models

こちらに 1024 * 512 行ぶんで学習したものをアップロードしました.

TODO

Discussion