[PR] 本ブログの商品紹介リンクには広告が含まれています
私のメールアドレスは、昔からWeb上などに掲示していたため、今では1日200通ぐらいのスパムが送られてきます。しかし、メールサーバー上で動かしている
SpamAssassinというスパム除けプログラムがかなりよい精度で自動的にスパムと普通のメールを分類してくれていたので特に不自由を感じることはありませんでした。ところが数日前から急にSpamAssassinの分類精度が悪くなって、10%以上のスパムを普通のメールだと誤認するようになってしまいました。
調べてみると、SpamAssassinが出しているログファイルに「Cannot open bayes databases … Inappropriate file type or format」などというエラーが出ています。SpamAssassinが使っているベイジアンフィルターの学習データのファイルが壊れてしまったようです。
SpamAssassinをはじめ、多くのスパム除けのプログラムはあらかじめ作っておいた多くの判断ルールに従って受け取ったメールがスパムかどうかを判断するしくみになっています。たとえば、メールの件名が「!」で終わっているものはスパム度3点とか、メールの本文に「Viagra」と書いてあるのはスパム度10点、といったような採点ルールをたくさんチェックして、ある点数を超えたものはスパムだとみなすという仕組みです。こういうプログラムが出てくると、スパム送信業者側もメールの件名の!の後に「 asdf」なんてのを付け加えてみたり、「Viagra」を「V1agra」と書いてみたりという工夫をするようになり、今度はプログラム側がそれを元にまた新しい判断ルールを付け加えるといういたちごっこが続いていました。
ところが2002年にPaul Grahamという人が「
A Plan for Spam」(
日本語訳)というメモで、新しい手法を提案しました。簡単に言うと、判断ルールをいちいち作るのではなく、メールの中味を単語や記号に分解し、スパムに分類したいメールの中にその単語が含まれている確率と普通のメールの中にその単語が含まれている確率をそれぞれ調べ、新しいメールが届いたときには、そのメールの中にどんな単語が含まれているかから逆算して、メールがスパムである確率とそうじゃない確率を推定する、という手法です。新たに届いたメールも、ひとつひとつスパムに分類するか普通のメールに分類するか決めてから、そのメールの単語を加えた状態で上記の確率を計算しなおして行くことで、実際に受け取るメールの偏りとスパム・非スパムの判断の“くせ”にあわせて分類の精度がどんどん上がっていきます。この手法にはベイズ理論という確率理論が使われています。
ベイズ理論そのものは18世紀からあって、コンピュータの分野でもパターン認識などにはわりと古くから使われていて、たしか私も20年前、卒論に「ベイズ」とか「尤度」などというコトバをよく分からないままに書いたような記憶があるのですが、最近いろんな分野への応用が盛んなようです。
(ベイズ理論については
CNETの記事などを読んでみてください)。
ベイズ理論を使ったスパム除けのフィルターはベイズ式のフィルターということで「ベイジアンフィルター(Bayesian Filter)」などと呼ばれています。
で、話は戻って、前述のSpamAssassinも、従来のルールを元にした判断にベイズ理論による判断も加えたハイブリッド式へと進化していたのですが、そのベイズ理論の部分がうまく動かなくなったために、急激に分類の精度が悪くなってしまったというわけ。
で、この際、ついでですから、長いこと愛用したSpamAssassinに別れを告げて、最近のベイジアンフィルターに乗り換えることにしました。
普段使っているメールソフト(
Mozilla Thunderbird)にもベイジアンフィルターが埋め込まれていて、受け取ったメールを「これはスパム」「これは普通」とボタンを押していくとだんだん学習してそのうち自動的にスパムを分類するようになってはいるのですが、メールをIMAPサーバーに溜めておいて、携帯電話を含むいろんなメールソフトでいろんな場所からアクセスするようにしているため、できればサーバーの上で勝手に動いて勝手に振り分けておいてくれるフィルターが理想です。その種のものとしては
Bogofilterが有名ですが、先月
HotWiredの記事で読んで気になっていた
CRM114を試してみることにしました。
英語環境ながら99.98%という抜群の認識率、マルコフ連鎖モデル採用というよく分からないけど効きそうな殺し文句(笑)、CRM114という意味深なネーミング、自然言語処理スクリプティング言語+それを使って書いたスパムフィルターという日本語対応しやすそうな構造などが決め手です。
というわけで、次回、CRM114の日本語対応への挑戦に続く。うまくいくでしょうか。