Igo-0.4.3: 若干のパフォーマンス向上

Gomoku(0.0.4)で得た知見の一部をIgo(0.4.3)に取り込んでみた。
形態素解析の部分が少し速くなっている。

比較

MeCab(0.98)、Gomoku(0.0.4)、Igo(0.4.2,0.4.3)の処理速度の比較*1
以前とはマシンも変わっているので、全部計り直した。
計時には約80MBの日本語テキストデータを用いた。
※ その詳細と計時に使用したプログラムに関しては後述
辞書には全てMeCabのサイトより入手可能なmecab-ipadic-2.7.0-20070801を使用している。

総処理時間(1)起動+行読み込み+辞書ロード 時間(2)解析時間(1 - 2)
MeCab(0.98)15.381s0.101s15.280s
Gomoku(0.0.4)16.458s0.565s15.893s
Igo(0.4.2)20.351s0.638s19.713s
Igo(0.4.3)18.792s0.638s18.154s
上の場合だと0.4.2よりは0.4.3の方が8%程度速くなっている。
MeCab、Gomokuよりはまだ一段遅いけど。

テキストデータ

計時に用いたデータは、次のようにして取得可能。

$ wget http://file.reduls.net/blog/20110618/20110618.txt.tar.xz  # ダウンロード
$ tar Jxvf 20110618.txt.tar.xz                                   # 解凍
$ ls -lh 20110618.txt
-rw-r--r-- 1 user user 78M 2011-06-18 00:33 20110618.txt

内容的は以下の二種類のデータの混合:

  • 青空文庫から適当に収集したテキストデータ
  • Yahoo!ブログから適当に収集したテキストデータ 

計時方法

MeCab:

# 計時用ソースコードを取得
# - 使い方等に関しては、ソースコードのコメントも参照のこと
$ wget http://file.reduls.net/blog/20110618/mec.cc 
$ wget http://file.reduls.net/blog/20110618/read_line.h

# コンパイル  ※ MeCab本体は既にインストール済みと仮定する
$ g++ -O3 -omec mec.cc `mecab-config --libs`

# 計時
$ time ./mec 20110618.txt

Gomoku:

# 計時用ソースコードを取得
$ wget http://file.reduls.net/blog/20110618/GomokuBench.java

# コンパイル
$ javac -cp gomoku-0.0.4.jar GomokuBench.java

# 計時
$ time java -server -cp .:gomoku-0.0.4.jar GomokuBench < 20110618.txt

Igo:

# 計時用ソースコードを取得
$ wget http://file.reduls.net/blog/20110618/IgoBench.java

# コンパイル
$ javac -cp igo-0.4.2.jar IgoBench.java

# 計時
$ time java -server -cp .:igo-0.4.2.jar IgoBench Igoバイナリ辞書 < 20110618.txt  # ver0.4.2用
$ time java -server -cp .:igo-0.4.3.jar IgoBench Igoバイナリ辞書 < 20110618.txt  # ver0.4.3用

*1:例によって厳密では全くない。参考程度。