家庭コンピュータ環境の模索 >SPAMフィルター
更新 (2005/12/04): bogofilter に関する記述を修正
作成 (2003/09/13)

bsfilter でスパムをフィルタリング

最近、SPAM メールが多い。SPAM メールっていうのは、受取り手が希望しないのにやってくる広告メールのたぐいのこと。食べ物の SPAM とはあんまり関係ない。

食べ物の SPAM(ポーク缶)はとっても大好きだ。沖縄に行った時、5缶ぐらい買ってくる。ゴーヤチャンプルには欠かせない。

特に、私のように、メールアドレスを web で公開していたり、ML の管理スタッフをしていると、とっても多い。一日に100通ぐらいは届くだろうか。ざっと分類して読まずにゴミ箱直行していたのだが、ゴミ箱に捨てるのもメンドクサイのと、人手でやっているとどうしても、分類ミスが発生する。

そこで、最近はやりの、spam filter を導入することにした。一説によれば、急いで SPAM を手削除するよりも、フィルタソフトの方が高い正答率らしい。この説を見て導入を決意した。

ソフトウエアレビュー

けっこういろいろなソフトがある。ウェブページを見た感じやなんかをもとに、私なりの感想を記す。

ベイジアンフィルタとは?

最近のはやりであるベイジアンフィルタについて、簡単な解説を次に示す。より詳しい解説は、次のリンク先を読んで欲しい。

数学の確率論に、ベイズの定理というのがある。ベイズの条件付き確率というやつだ。AかつBがおこる確率とAかつnot(B)の確率から A の確率を求める。ベイジアンフィルタとは、この条件つき確率を利用したものだ。理論自体は、確率論の基礎で 18世紀からあるし、高校の数学で確率を勉強していた時代は、その中で教えられているはずである。

これをメールの分類に利用する時に、次のことを考える。

SPAM とわかっているメールに含まれていることが多い単語が多く、
かつ
SPAM ではないとわかっているメールに含まれている単語が少い
メールは、SPAM である確率が高い。

さらに、単語の連関確率を含めるともっと高い確率で、SPAMとそうでないかを分類できます。さらに、単語の出現頻度がどのような統計的分布に従うかを検定し、より峻別する方法もあります。

ここで問題になるのが、一つあります。「日本語では、単語ってどうやって区別するんだろう?」海外ソフトを日本語対応したものは、kakasi による分かち書きを利用するものが多いです。kakasi をインストールしたり、辞書を利用すること自体があんまり好きではないので、bigram(連接2文字)が使えて、それがデフォルトな bsfilter が好きになりました。

インストール

これらのソフトを検討した結果、bsfilter をインストールすることにした。日本語対応が万全なのと、procmail と組み合わせやすいのが良い。インストール自体は、配布元のページを見れば簡単に終る。

ベイジアンフィルタは学習が必要だ。学習用の SPAM サンプルをまず食わせるが、自分でも学習させて育てていかないと、けっこう最初の方は誤判定する。clean/spam ともに、100〜500通ぐらい食わせるとけっこう判定が正確になってくる。

学習させていると、SPAM が来るペースが遅いんちゃうか?って気になってくる。



近藤靖浩