Sanmoku(0.0.4): 辞書データサイズ縮小
この一週間でSanmokuの辞書データサイズの縮小をいろいろ試していたので、その結果を載せておく。
現時点でのバージョンは 0.0.4。
やったこと
試した主なこと。
データ | 内容 | サイズ (Gomoku-0.0.4 => Sanmoku-0.0.4) |
---|---|---|
連接コストデータ (matrix.bin) |
類似品詞の連接コストを併合*1 + コスト値を14bitで保持 | 3.5MB => 2.2MB |
形態素辞書引きインデックス (surface-id.bin) |
2バイト文字(UTF-16)DAWGから、1バイト文字(UTF-8)DAWGに変更。 かつIPADICに合わせてノードレイアウトを最適化 |
2.7MB => 1.5MB |
形態素データ (morpheme.bin,id-morphems-map.bin) |
4バイト(品詞情報:2バイト、単語コスト:2バイト)から2バイトに | 1.8MB => 1.0MB |
比較
IgoとGomokuとSanmokuの比較。
辞書データサイズ(IPADIC) | 最小所要メモリ(-Xmx) | 起動(≒辞書ロード)時間*2 | 10MBテキストの解析時間 | |
---|---|---|---|---|
Igo-0.4.3 | 40MB | 73MB | 0.058秒 | 2.729秒 |
Gomoku-0.0.4 | 8.2MB | 23MB | 0.371秒 | 2.621秒 |
Sanmoku-0.0.4 | 4.8MB | 2MB | 0.057秒 | 5.807秒 |
Sanmokuは所要メモリや辞書ロード時間が短いが、辞書データを圧縮するためにビット演算や間接参照等を多用しているため、解析速度は他に比べて二倍以上遅くなっている。
Igoは辞書データサイズ自体は大きいが、mmap(java.nio.MappedByteBuffer)を利用しているため、ロード時間は高速となっている。