ひとりごと

新しい記事:[1449]  古い記事:[1447] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2005/03/22 (火)

・ bayesian spam filter

ベイジアンスパムフィルタというと、メールの中の語句を分析してスパムかそうでないかを判断するものです。 SpamAssassin にも実装されている考え方で、それなりに学習させてやるとスパムの判定精度も少し高くなったりします。SpamAssassinに入っているものはいまいち覚えが悪くて、『これはスパムなんだよ~~』と一生懸命覚えさせようとしても覚えてくれないことがあったりします。

ところで、Mozilla Thunderbird にも同じようなスパム除け機能が組み込まれていまして、POP3 で受け取るメールに対してスパムかどうかを判定することができます。わたしゃてっきり「あんまり使い物にならない」と思っていたのですが、ところがどっこい、Thunderbirdのものは受信した個々のメールについてスパムかどうかをきっちり学習させつづけていると、最近ではSpamAssassinをすり抜けた日本語スパムもちゃんとスパムと判定するようになってきたのですねー。そして普通のメールをスパムと判定することもほとんどありません。これは使えそうです。

とはいえ、Thunderbirdで取ってきてスパム判定してからケータイにメールを転送なんてアホなことはできませんから(笑)、スパム判定は自宅サーバで行う必要があります。ということで前置きが長くなりましたが bsfilter を導入してみました。

いつもの如く ports/mail/bsfilter にて make install だけでインストール完了。コマンドラインで使うものなのでインストールした事による弊害はありませんから気楽に使えます。bsfilter は SpamAssassin と違って、入れただけではスパムフィルタとして何の役にも立ちません。まず手元のメールを使って学習させる必要があります。手順は下記のとおり

  1. 'bsfilter -s spamファイル' にてスパムを学習させる
  2. 'bsfilter -c hamファイル' にてスパムじゃないのを学習させる
  3. bsfilter --update
手元には『スパムしか存在しないディレクトリ』はありましたがその逆はありませんでしたので、とりあえずスパムを学習させてから
% bsfilter --list-spam ~/Mail/inbox/*
とし、表示されたファイルについて非スパムメールであれば学習させるという手順を取ってみました。さらにMHの場合はよくやりとりするメールアドレスに対して
% bsfilter -c `pick +inbox -from 'hogehoge@foo.bar'`
などとすると安全確実です。

このように学習させた結果、なんと「学習に使ったメールに対してはスパム判定率100%」という驚異の判定率に達しました。『元ネタなのに当たり前やん』と言われそうですが、SpamAssassinでは当たり前ではなかったのです(^^;)。

SpamAssassinと違って「間違ってスパムと判定する」事がありそうですから、しばらくはスパム判定だけさせて振分けには使わないように設定してみましょう。.procmailrc に

:0 fw
| /usr/local/bin/bsfilter --pipe --insert-flag --insert-probability --mark-spam-subject --header-prefix bsSpam
とでも書いておけば、スパムと判定した場合はヘッダに追加されると共にサブジェクトにも[SPAM]と入りますから誤判定が起きた時にも判りやすいです。しばらく様子を見て成績が良ければ .procmail で振り分けるなり SpamAssassin で加点するなりすれば現在よりも快適な環境になるはずです。

□ 関連記事

[つっこみ]

新しい記事:[1449]  古い記事:[1447] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)