*bird 日記: ジャンクメールコントロール顛末

2003年8月9日(土) by level
B ?
Tags: *bird 日記

Firebird: 今日の nightly は起動時にアラートのダイアログが出る。朝顔日記にも報告されているものだ。ただし、動作上は問題ないようだ。

Thunderbird: 過去の *bird 日記に以下のように書いた。

7月26日
ジャンクメールフィルタのトレーニングファイル(training.dat)もそのまま移行したのだが、振り分け結果は散々だ。うーむ、まさかアルゴリズムが変わったのか? 仕方が無いので、training.dat を消して現状のメッセージで最初から学習しなおす。今まで受信したスパムはすべてとってあるので、正常メールとあわせて約3000通ほど学習させると、 training.dat ファイルサイズは2MB弱、単語数は8万となった。その後数十通受信したところ結果は上々だ。

7月28日
ここ数日で英文スパムが急激に増えているのだが、見落としも増えている。新しいパタンのスパムだからだろうか。

8月7日
やはり Thunderbird のジャンクメールコントロールはおかしい。Mozilla だと捕捉率が 90% 以上あったのに、Thunderbird では 50% 程度しかない。... ちなみに、今日一日で受信したスパムの状況は以下のとおりだ。

Mozilla trunk Thunderbird 0.1
見落とし 捕捉 見落とし 捕捉
1 18 10 9
メールはまったく同じものを受信させている。training.dat は基本的に同じ母集団のメールで学習させているがまったく同じではない。明日以降、より詳しく調べてみよう。

で、結論から言うと、機能的には問題なし。いや、今まで使っていた Thunderbird のトレーニング結果(training.dat)がおかしかったいうことになる。

まず、Thunderbird 自体の動作が正しいのかどうかを、同じトレーニングデータ、同じメールを用いて実験してみることにした。使用したメールは最近受信した30通のスパム。日本語が8通、残りは英語だ。ちなみに、受信時の結果は以下のとおりだった。

表1: 受信時の結果
ツール 見落とし 捕捉
Mozilla trunk 6 24
Thunderbird 0.1 18 12

明らかに、Thunderbird の結果が見劣りしている。が、Mozilla-trunk (20030804) の結果も決してよくない。そこで、よく調べてみたら Mozilla-trunk のプロファイルは少々古いもので、Mozilla 1.4 のプロファイルが最もよく学習させていることがわかった。よって、以後はこの3つで比較する。

それぞれのメーラに30個のテストメールを、Tool→Run Junk Mail Controls on Folder を使ってジャンクメール判定をさせてみた。結果は以下のとおり。

表2: 一括判定結果
ツール 見落とし 捕捉
Mozilla 1.4 1 29
Mozilla trunk 6 24
Thunderbird 0.1 20 10

Mozilla 1.4 の結果はすばらしい。Mozilla-trunk の結果は表1と同じ。Thunderbird は少し変化があるが、途中でどんどん学習させているので結果が異なることもありうるだろう。ただし、この場合、以前より悪くなっているのが気になるが...。

表3: training.dat 入れ替え
ツール 見落とし 捕捉
Thunderbird+Mozilla1.4 1 29
Thunderbird+Mozilla-trunk 6 24
Thunderbirdオリジナル 20 10

今度は Thunderbird に Mozilla 1.4 と Mozilla-trunk の training.dat を与えて実験してみた。その結果は表3のとおりで、表2の結果とまったく同じだ。つまり、メーラ側の動作は問題なく、純粋にトレーニング結果の差が出ているということになる。結局、Thunderbird で使用していたトレーニング結果が非常に悪いものだったということである。しかし、これはちょっと解せないはなしだ。最初に Thunderbird を導入したときに、トレーニング結果は Mozilla からコピーしたはずだ。そして、7月26日の日記のとおり、その結果がいまいちだったので、改めて一からトレーニングをやり直した。なぜ、それらで満足できる結果が出ないのだろうか?

表4: training.dat のサマリー
ツール ファイルサイズ 学習メール数(nGood+nBad) 単語数
Mozilla1.4 1137Kb 1314+469 50222
Mozilla-trunk 535Kb 91+292 23205
Thunderbird 0.1 1973Kb 1+829 86337

試しに、各 training.dat を覗いてみたのが表4だ。Mozilla-trunk は正常メールを91通しか学習していない。スパムの数も他と比べると少ない。これは中途半端な学習結果のようだ。

一方、Thunderbird の結果は明らかにおかしい。正常メール数(nGood)がたったの1通となっている。これは異常な値だ。2000通以上は学習させているはずなのだが(bugzilla からのメールだけでも2000通ある)。ベイジアンフィルタのスパム確率計算式からみて、学習させた正常メール数が1になっていると、スパム確率を小さくする方向にバイアスがかかってしまい、結果的にスパムの見落としにつながってしまう。これはこれまでの動作を裏付けるものだ。 (ベイジアンフィルタの原理等に関してはこのページのリンク集などを参照して欲しい。)

また Thunderbird の training.dat の中を詳細に見てみると、正常メールを1通分しか学習していないのではなく、かなりの数の正常な単語(nGoodToken)が登録されていることがわかる。しかし明らかにデータがおかしい。

nGood 1
nBad  829
nGoodToken 61531
nBadToken  33876
 1037 10093 0.500 jp
  957     8 0.010 nec
  749  3404 0.500 。
  648  2503 0.500 、
  587  1335 0.500 co
  422  2726 0.500 の
  411  4252 0.500 com
  349  8608 0.500 td

これは、正常メールの単語数でソートした上位の単語をいくつかを切り出したものだが、jp が正常メールで1000回程度ではあまりに少なすぎる。一方スパムでは10000回もでている。その他の単語も件並みスパム数のほうが上回っている。正常メールとして学習させるときに、間違ってスパムとして学習させた可能性も否定はできない。しかし、nGood が1というのは操作ミスでは起こりえないと思う。いずれにせよ、Thunderbird の学習結果がおかしかったのはこれで明らかになった。

結局、現在では、Thunderbird に Mozilla 1.4 のトレーニング結果をいれて使っている。入れ替え後、今まで受信したスパム9通は正しく捕捉している。しばらくこれで様子を見てみることにする。

コメント

コメントはありません。

トラックバック

トラックバックは検索対象外です。

この記事にリンクしているページ < >

  1. データがありません。