分かち書きプログラムの違いによる精度比較

精度のグラフ


以前からそのうちしようしようと思っていた比較にようやく挑戦。データとテストプログラムを用意するのに手間取ってなかなかできていなかった。
昨晩 POPFile Documentation Project を久しぶりに少しメンテナンスしていたところ、xmltraintest.py というプログラムを発見した。プロジェクトのメンバーである Joseph が TOE と TA の比較のために作った Pythonスクリプトだ。少し見てみたところ、今回のテストにも使えそうなな感じだ。ただ、ドキュメントにも書かれているように POPFile 0.22.4 のアーカイブには対応していないのでスクリプトを少し編集する必要があった。
データは、POPFileアーカイブ機能(受信したメールをバケツごとにフォルダにわけて保存しておく機能)を使って保存しておいたものが使えるようなので、それを使うことにする。そのうち何かに使うかもしれないと溜め込んであったのだ。アーカイブのうち、ひとつのバケツには 20,000 通あまりのメールがあり、これはあまりにも多すぎるだろうということでそのバケツを除いた 17 のバケツに分類された 22,351 通のメールをサンプルとして用いた。
テストは何も学習していない状態から、サンプルのメールを順に分類させ、分類が誤っていれば(あるいは分類できなければ)再分類していくという流れ。まず 0.22.5RC3 で Kakasi のテストを行い、0.22.4 に日本語パッチをあてたもので MeCab と文字種による分割(以下 simple と表記)をテストした。バージョンは異なるが、メールの分析部分での変更は行われていないので影響はないはずである。
事前の予想では、MeCab が一番精度が高く、次いで Kakasi、simple の順になるのだろうと漠然と考えていたのだが、結果は思っていたのとは違い、Kakasi(21,833 通を正しく分類。精度 97.68%)、MeCab(21,817 通を正しく分類。精度 97.61%)、simple(21,794 通を正しく分類。精度 97.51%) の順となった。なぜこのような順番になったのかはわからないが、分かち書き後の POPFile の分析部分との相性なのかもしれない。あるいは、MeCab を使った場合のコーパスが他の 2 つよりも若干小さかったことから、ひらがな 1 文字の助詞や助動詞が分かち書きの際に正しく分割されて分類に利用されなかったことなどが関係しているのかもしれない。
しかし実際には、差があると言っても、最も高かった Kakasi と最も低かった simple で 0.17% しか差がなかった(10,000 通あたりで 17 通)。これを小さな差と見るか大きな差と見るかは意見が分かれるところかもしれないけれど、文字種だけで分割するという非常にシンプルな方法と、辞書を使った本格的な分かち書きとで 0.17% の差というのは小さいと思う(10,000 通あたり 17 通を余計に再分類しなければならないと思うとちょっと面倒だが)。速度面で有利なことや、辞書やプログラムが不要なことを考えれば有効だ。これはぜひとも次のバージョンで選択できるようにしたい。
グラフを見ると、POPFile の学習速度もよくわかる。300 通(24 通再分類)で 90%、900 通(44 通を再分類)で 95%、5,700 通(141 通を再分類)で 97.5% の精度を達成している。バケツ数が 17 もあることを考えれば十分速いのではないだろうか。
グラフでもうひとつ気になるのは、あるところをピークに徐々に精度が下がっているように見えることだ。13,500 通(271 通を再分類。精度 97.99%)がピークで、そこからだんだん下がってしまっている。単に今回のデータの特徴なのかもしれないが、ちょっと気になる。コーパスが大きくなったことによる弊害なのだろうか……?
(追記:だんだん精度が下がってしまっていたのはテストに使ったデータの精度が低かったためだった。データを精査して再度テストした結果は、id:amatubu:20070702 に掲載)