Smilezone::blogのおかげで勉強できた。
spam特有のノイズに弱くなるような気がして、--ignore-after-last-atag --ignore-plain-text-partは使っていないのだが、本当にそうなのかベンチマークした。使っても使わなくても一緒、というのが手元のデータでの結論。
TESTHOME="/home/nabeken/tmp/def" OPTIONS="-v --homedir $TESTHOME" rm -r $TESTHOME find /home/nabeken/tmp/testcase/study_clean -type f | xargs bsfilter $OPTIONS -c find /home/nabeken/tmp/testcase/study_spam -type f | xargs bsfilter $OPTIONS -s bsfilter $OPTIONS -u find /home/nabeken/tmp/testcase/study_clean -type f | xargs bsfilter $OPTIONS --list-spam find /home/nabeken/tmp/testcase/target_clean -type f | xargs bsfilter $OPTIONS --list-spam find /home/nabeken/tmp/testcase/study_spam -type f | xargs bsfilter $OPTIONS --list-clean find /home/nabeken/tmp/testcase/target_spam -type f | xargs bsfilter $OPTIONS --list-clean
clean/spam区別ずみの過去メイルを、学習用と判定ターゲット用に等分した。各フォルダのメイル数は、study_clean:2491、study_spam:877、target_clean:2491、target_spam:877。studyで学習し、study、targetの両方で判定した結果、判定ミスは--ignoreなしで52通、ありで53通で、誤差の範囲。どちらもfalse positive(誤爆)が1通、残りはfalse negative(見逃し)で、正解率は98.5%。サンプルが簡単過ぎるのかも。
3368通の学習、6736通の判定にかかった時間は、Athlon 1GHzで15分。0.1 sec/mailくらいのスピードだが、実運用ではスクリプトの起動、DBのopenの回数がもっと多いはずで、この数字は参考にならない。
--update/--auto-update系の利用による,還元がbsfilterの重要なポイントだと思うのですけれど,この評価では還元の際にノイズでtoken DBが撹乱されてしまうかどうかがわからないと思うのです.<br># しばらく首が回りそうにないから手が回らないなぁ... :<
問題にしている点がよく分からないので、どのようなテストを行うべきか教えて下さい。
word saladの影響なんて関係ないのであれば,</BODY>とか</HTML>とかの後を無視する必要もない訳ですし,--ignore-plain-text-part, --ignore-after-last-atag, --ignore-bodyなんてのも要らないと思うのです.<br><br>他のBayesian spam filterでも,word saladの影響を無視できなくなってきている(spammerがfilter対策を行っている)のですから,やっぱり要るのかなと.<br>word saladがrandom stringならば問題ないのですが,英単語とか普通の日本語とか,辞書に実際に載っているようなtokenがsaladとして用いられると,bsfilterで、--auto-updateによる還元を行いながら処理をし続けた場合に,<br>・hamがspamとして誤認式される確率が徐々に高くなる<br>・spamがhamとして誤認式される確率が徐々に高くなる<br>と思うのです.結果,bsfilterのdefaultの閾値のままであれば,先ず擦り抜けが増えるという傾向が予想されます.(X-Spam-Probability の変化を観察した結果による)<br><br>で,実際に必要なのは,一通ずつ--auto-updateを行いながら辞書を鍛えつつ判定を続けた場合に,どのような違いがあるかなのです.<br>更に,傾向と対策を考える上では... spamの種類も選別しておいた上で結果を観察することが有効なのかなと思います.