A Plan For Spam を読んだ

なぜ本文の内容からspamを判断するか

spamメールはユーザがメールを読んで、それによって行動を起こすことを期待して送られる。もちろん実際にspamメールを読むユーザは少ないし、それによって行動するユーザはさらに少ない。しかしそれでもspamメールはメッセージを届けなければならない。それがspamメールの宿命だからである。そのため本文を解釈してspamかどうかを判定してくれるソフトウェアを書くことが出来れば、spamメールは間違いなくはじくことが出来折る。

一番怖いこと

spamフィルタの設計するにあたって気をつけなければいけないことはなんであろうか。それは可能な限り後検出を起こさないようにすることである。spamフィルタの動作の中でspamメールの誤検出が一番怖い。誤検出とはhamメールをspamメールと判定してしまうことである。spamフィルタを作るならこれを一番に避けなければならない。なぜなら正しいメールを失うことは、spamメールを受け取ることよりも何倍も被害が大きいからである。また次の場合に誤検出の危険性は上がっていく。

  • 1.大量にspamメールを受け取っている場合
  • 2.spamフィルタの性能がとても高い場合

1.の場合の理由は簡単である。大量にspamメールにhamが埋もれてしまいやすくなるからである。大量のspamメールの中から目的のhamメールを見つけ出すのは非常に難しい。
2.の場合に誤検出の危険性が上がるのは奇妙な話である。しかし良く考えてみると納得できる、フィルタの性能が十分によければユーザはそれを信じて、フィルタがspamだと判定したものは無視するからである。

対策として

誤検出は怖い。では誤検出を避けるために開発者はどんなことが出来るであろうか。方法の一つとして挙げられるのは確率にバイアスをかけることである。

利点

ベイズ確率を使った本当の利点は自分が何を計測しているのかがはっきりしていることだ。特徴認識方のSpamフィルタは各メールにspamスコアを与えようとする。スコアの問題点はなぜその単語にその点数をつけるのか根拠が無い場合が多いからである。ユーザには分からないし、もっと悪いことに開発者すらなぜその点数になるのか分かっていないことが多い。しかし確率を使った計算では、間違った使われ方をすることもあるが、少なくともそれが何を示しているかの根拠がある。そして計算方法も確立されている。

課題

ベイジアンフィルタは最初のほうはうまく動く。簡単な規則を作るだけでspamの大部分は取り除ける。例えばClickという単語を探すだけでコーパスの79.7%は捕まえられる。しかし最後の数%のspamを捕まえるのはとても大変になる。規則を厳しくしすぎると誤検出が増えてしまう。