higuchi.com blog

The means justifies the ends

ルールから確率へ [スパム除けベイジアンフィルター]

私のメールアドレスは、昔から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の日本語対応への挑戦に続く。うまくいくでしょうか。

コメント

まだコメントはありません

コメントを書く

関連するかもしれない記事

SPAM Tシャツ $15.00

Got SPAM? [SPAM Store がいつの間にかすごいことになっていた件について]

あれはちょうど最初の @TOWER.JP サイトをこしらえていたころだから、20世紀も終わりに近づいた 1996 年...

この記事を読む »

汎用テキスト分類フィルタの威力 [CRM114 活用事例]

先月導入したベイジアンフィルター式スパムフィルターのCRM114ですが、着々と手になじんで来ました。 ...

この記事を読む »

私は如何にして心配するのをやめてスパムを愛するようになったか [CRM114の日本語対応]

さて、先日のインストール編に続いて、CRM114の日本語対応改造です。 CRM114のFAQには“BUT if you us...

この記事を読む »

世にスパマーのタネは尽きまじ [迷惑メールっていくら儲かる?]

世にスパマーのタネは尽きまじ [迷惑メールっていくら儲かる?]

3月11日の地震発生以来、各社ともメールマガジンでの営業活動を控えているようで、メールボックスがいつ...

この記事を読む »

Spam

宛て字の利用方法 [涙ぐましいスパム]

英語圏にも宛て字があることは知っていたんです。 "for you" を "4U" とか、"cool" を "kewl" とか...

この記事を読む »

飛んで火に入る夏の虫

飛んで火に入る夏の虫

最近、固定電話にかかってくる電話って、ほとんどスパムじゃないですか。 なので、うちの会社でも...

この記事を読む »

告白 [サーバーを Spam メール送信の踏み台にされました]

実にお恥ずかしい。自分で管理しているサーバーをスパム送信の踏み台にされてしまいました。みだりに公...

この記事を読む »

そのメールは本物ですか? [電子メールの偽造]

永田町界隈で、誰かの電子メールのプリントアウトが本物かどうかで大騒ぎをしているようです。そのせい...

この記事を読む »

天下の公器がウイルスを見ると [MyDoom/Novarg]

今朝、新聞を読んでいたら「海保メールでウイルス送信」という記事が目に入りました(朝日新聞東京14版 ...

この記事を読む »

フィッシング詐欺メール

重要なVISA所有者! [フィッシング]

して拡大ここのところ、フィッシングの横行が新聞などでも取り上げられています。フィッシングといって...

この記事を読む »