高速実装CRFSuiteとベンチマーク

テキストから人名や地名など内容を特定するような箇所を取り出す固有表現抽出や、名詞句や動詞句などのようにかたまった単語の列を求めるチャンキング、単語の品詞を特定する形態素解析など、自然言語処理の様々なタスクでCRF(Conditional Random Fields)の機械学習アルゴリズムが利用されています。

CRFSuiteはCRFの学習とテスト実行を高速に行うオープンソースの実装で、CRF++と並んで広く利用されています。メモリ使用量を抑えるよりも処理を高速に行う実装を目指していて、効率的なオンライン学習のアルゴリズムであるAveraged PerceptronやPassive Aggressive、AROW (Adaptive Regularization Of Weight Vector)なども利用することができます。他のオープンソースと比較したベンチマークテストの結果を見ると、訓練時間が極端に短いことに驚かされます:

CRFSuiteの配布ソースコードにはこのベンチマークを実行するスクリプトが含まれています。比較対象はWapitisgdCRF++MALLETとCRFSuiteの旧バージョン(v0.11)です。先ほどのベンチマークの結果は2011年の時点でのものですが、他のソフトもそれぞれバージョンが更新されています。現時点で比較してみると結果はどうなるでしょうか?

MacPortsにはCRFSuiteの旧版を除いて上のソフトがすべてパッケージ化されています。CRFSuiteのベンチマークスクリプトもパス名などがパッケージに合わせて修正してあります。手元のマシンで実行してみましょう。まずは必要なパッケージをインストールして、解析対象のチャンキング用データをダウンロードします:

$ sudo port selfupdate
$ sudo port install crfsuite wapiti sgd crfpp mallet
$ mkdir bench
$ cd bench
$ curl -O http://www.cnts.ua.ac.be/conll2000/chunking/train.txt.gz
$ curl -O http://www.cnts.ua.ac.be/conll2000/chunking/test.txt.gz
$ gunzip train.txt.gz test.txt.gz
$ /opt/local/share/examples/crfsuite/bench/collect.py

…段々とマシンの反応が鈍くなってきました。ベンチマークページの実験環境を見ると、64GBのメモリを積んだマシンで実行していますね! 手元のMac miniはメモリが4GBなので、とりあえず処理は途中で止めておくことにしましょうか…

CRFSuiteにはサンプルとして、チャンキング、品詞タグ付け、固有表現抽出といったタスク向けにCRFの素性を生成するスクリプトが同梱されています。チュートリアルにしたがって、公開されているタスク用のデータから素性ファイルを作成して、CRFの学習とテスト実行ができるようになっています。