marisa-trie の高速化と実験結果
Version 0.1.0 と Version 0.1.1 の検索時間を比較するついでに,索引の実装を少し修正したもの(Version 0.x.x)もまとめて比較してみました.Version 0.x.x については,索引のサイズが約 2 倍になったことにより,辞書のサイズが 2-4% 大きくなっています.
- 実装の種類
- Version: 0.1.0
- Version: 0.1.1
- 無駄な rank() の呼び出しを取り除いたもの
- Version: 0.x.x
- rank/select 索引のブロックを小さくしたもの(索引により多くの領域を割り当てたもの)
- キー集合
- 内容:日本語 Wikipedia のタイトル一覧
- キー数:1,146,584
- キー長の合計:23,809,474 bytes
(追記 2011-02-18)検索時間の単位は [us/key] です.後,% 表示しているのは,Version 0.1.0 を 100% とした場合の値です.
キー集合の配列:昇順 ------+---------+---------+-------+-------+-------+-------+-------+------- #tries #nodes size build restore lookup find predict predict breadth depth [bytes] [us] [us] [us] [us] [us] [us] ------+---------+---------+-------+-------+-------+-------+-------+------- Version: 0.1.0 1 1564294 9850414 3.332 1.334 1.395 1.500 1.605 1.692 2 2087639 7056713 3.611 2.433 2.573 2.678 2.791 2.878 3 2264302 6522559 3.759 2.756 2.948 3.061 3.166 3.271 ------+---------+---------+-------+-------+-------+-------+-------+------- Version: 0.1.1 1 1564294 9850414 3.332 0.994 1.151 1.238 1.317 1.430 74.5% 82.5% 82.5% 82.1% 84.5% 2 2087639 7056713 3.611 1.840 1.997 2.119 2.198 2.320 75.6% 77.6% 79.1% 78.8% 80.6% 3 2264302 6522559 3.759 2.102 2.285 2.407 2.486 2.599 76.3% 77.5% 78.6% 78.5% 79.5% ------+---------+---------+-------+-------+-------+-------+-------+------- Version: 0.x.x 1 1564294 10045986 3.314 0.820 0.959 1.055 1.099 1.212 61.5% 68.7% 70.3% 68.5% 71.6% 2 2087639 7301365 3.585 1.474 1.605 1.718 1.770 1.884 60.6% 62.4% 64.2% 63.4% 65.5% 3 2264302 6783795 3.733 1.692 1.832 1.962 2.006 2.119 61.4% 62.1% 64.1% 63.4% 64.8% ------+---------+---------+-------+-------+-------+-------+-------+------- キー集合の配列:ランダム順 ------+---------+---------+-------+-------+-------+-------+-------+------- #tries #nodes size build restore lookup find predict predict breadth depth [bytes] [us] [us] [us] [us] [us] [us] ------+---------+---------+-------+-------+-------+-------+-------+------- Version: 0.1.0 1 1564294 9850414 4.492 2.285 2.756 2.939 3.070 3.175 2 2087639 7056713 4.683 3.724 4.265 4.483 4.561 4.692 3 2264302 6522559 4.849 4.117 4.683 4.884 4.989 5.102 ------+---------+---------+-------+-------+-------+-------+-------+------- Version: 0.1.1 1 1564294 9850414 4.500 1.971 2.433 2.608 2.704 2.843 86.3% 88.3% 88.7% 88.1% 89.5% 2 2087639 7056713 4.683 3.122 3.611 3.803 3.899 4.029 83.8% 84.7% 84.8% 85.5% 85.9% 3 2264302 6522559 4.840 3.436 3.933 4.134 4.230 4.352 83.5% 84.0% 84.6% 84.8% 85.3% ------+---------+---------+-------+-------+-------+-------+-------+------- Version: 0.x.x 1 1564294 10045986 4.500 1.744 2.207 2.390 2.442 2.590 76.3% 80.1% 81.3% 79.5% 81.6% 2 2087639 7301365 4.683 2.704 3.157 3.349 3.401 3.541 72.6% 74.0% 74.7% 74.6% 75.5% 3 2264302 6783795 4.832 2.991 3.445 3.663 3.707 3.837 72.6% 73.6% 75.0% 74.3% 75.2% ------+---------+---------+-------+-------+-------+-------+-------+-------
お試しのつもりで比較実験に加えた Version 0.x.x ですが,空間効率と時間効率のバランスを考えると,Version 0.1.1 より有用かもしれません.辞書の互換性が失われてしまうので,もう少し検討してから正式版として採用するかどうかを決めようと思います.