以前書いた “ベイジアンアルゴリズムは効くのか?” では、Thunderbird のスパムフィルタ機能が思ったように機能しなかったことと、オレが確率論そのものを胡散臭く思っていることから、ベイジアンアルゴリズムによるスパムのフィルタリングに対する疑問を書いたが、その後調べていくうちにいろいろわかってきたので紹介したいと思う。
まず、コメントで教えてもらったPOPFileというソフト。 自分でも使ってみたが、思った以上に機能して驚いた。確かに、スリ抜けるものもあるが、その数はThunderbird の比ではない。
管理画面で、メール中のどの単語がピックアップされ、どの確率で使われているか表示されるとよくわかる。 これが本当のベイジアンアルゴリム(オリジナルのアルゴリズムを改良したモノのようだ)の威力なのかと再認識させられた。 みんながスゴいというのは伊達じゃなかった。
では、なぜ Thunderbird のスパムフィルタが機能しなかったのか。
training.dat はジャンクメールコントロールの学習結果を格納しているファイルであり、プロファイルディレクトリにあります。
このサイトにはジャンクメールコントロールに使われる、training.dat というデータファイルを参照することができる perl スクリプトが置いてある。 これを使って、オレの情報を見てみたのが下のデータ。
pmin=0.000000 pmax=1.000000 bmin=0
nGood 33
nBad 309
total non-spam tokens 11204
total spam tokens 28344
0 572 0.990 span
0 238 0.990 neomail
.
.
.
nGood (Spamじゃなかったメール数) が極端に少ない。 nBad (Spam だったメール数) にしてもこんなもんじゃない。 もうちょっと調べるために training.dat を新しく作り変えて、手持のSpamメールを送り直してみて確かめたところ Thunderbird (version 0.5)は、スパムマーク(ゴミ箱アイコン)をクリックして、マークを付けたり、外したときだけ、そのメールの情報を training.dat に記録しているようだ。
つまり、スパムフィルタが通した通常のメールや、一度憶えて、スパムだと認識したメールは training.dat に記録されない。 一方、POPFile は何らかの方法で、ほとんどのメールが次回以降のスパムチェックのために記録されていく。 このヘンの処理方法の違いが、 Thunderbird のスパムフィルタが正常に機能しない理由じゃないだろうか。
ベイジアンフィルタの論文には、
ベイジアンフィルタがうまく動く鍵は、大きく綺麗なコーパスにある。 そういうコーパスはベイジアンフィルタの入力としても使えるだけでなく、 その他のフィルタにもテスト用として利用できる。
とあるように、判断情報は多ければ多いほどよいらしいので、Thunderbird のような方法ではなかなか賢くなっていかず、いつまでも誤認識してしまう。 自分が今持っているメール全てに一旦スパムマークを付けて、スパムじゃないメールはマークを外すという作業をすれば、ある程度は改善されると思うがあまりスマートじゃない。 Thunderbird/Mozilla チームはこのへんの問題を認識をしているのだろうか?
相変らず、なんでうまくいくんだろうという部分に疑問は残るが、ベイジアンアルゴリズムは、結構機能するという風に意見を改めたいと思う。
Thunderbird/Mozilla のスパムフィルタに関しては今後も動向を追っていきたい。
Continue reading
Comments