SpamAssassin 3.2用日本語テストルール作成スクリプト

SpamAssassin 3.2用日本語テストルール作成スクリプトなんてものを作って公開しています。

http://spamassassin.jp/download/experimental/taki/

これは何?

これは,SpamAssassin用の日本語spamメールを検出するためのテストルールを自動作成するスクリプトです。spamコレクションとhamコレクションを投入して,テストルールを作成します。

次のように実行します。

$ ./sa-tokenizer.pl -r ~/Mail/spam > spam.txt
The number of messages     : 39525
The number of uniq messages: 28863

$ ./sa-tokenizer.pl -r ~/Mail/ham > ham.txt
The number of messages     : 4956
The number of uniq messages: 4778

$ ./sa-ja-testmaker.pl -s spam.txt -h ham.txt > body-ja.cf
The spam words:
  The number of Japanese words    : 1412565
  The number of uniq words        : 83553
The ham words:
  The number of Japanese words    : 1841092
  The number of uniq words        : 197798
The number of removed words       : 80325
The number of remaining uniq words: 3228
The number of made tests          : 200

こうすると次のようなテストルールが生成されます。

# BODY_JA_JOSEI: 女性 spam=8311/1325054, ham=154/1841092, ratio=0.00543
body     BODY_JA_JOSEI                  /女性/
describe BODY_JA_JOSEI                  JOSEI
score    BODY_JA_JOSEI                  0.6

# BODY_JA_HAISHINKYOHI: 配信拒否 spam=5040/1325054, ham=0/1841092, ratio=0.0038
body     BODY_JA_HAISHINKYOHI           /配信拒否/
describe BODY_JA_HAISHINKYOHI           HAISHINKYOHI
score    BODY_JA_HAISHINKYOHI           0.6

# BODY_JA_TOKO: 投稿 spam=5112/1325054, ham=37/1841092, ratio=0.00365
body     BODY_JA_TOKO                   /投稿/
describe BODY_JA_TOKO                   TOKO
score    BODY_JA_TOKO                   0.6

開発状況

スクリプトそのものについては,簡単に実装できそうなアイデアは取り入れています。
そのため,しばらくの間はスコアバランスの調整以外でこれ以上手を加えることはないです。

現在はこのスクリプトを使って作成したテストルールを評価して,スコアバランスの調整をしている段階です。

ちなみに,作成したテストルールも公開しています。

評価

今は自宅マシンの実運用環境でこのテストルールを試しています。

False Positiveを生じないようにhamデータに強烈に(10倍の)重み付けをしたためか,hamメールでは1〜2個のテストに偶に引っかかることがある程度です。スコアとしては1未満であるため,運用上問題はありません。

spamメールについては,本文が短い(5行程度の)メールや平仮名だらけのメールについては1〜2個くらいしか引っかかりません。文章が長いほどたくさんのテストに引っかかる傾向にあります。多いもので十数個のテストに引っかかっています。
出会い系サイトの勧誘メールはおおよそ6〜10行のものが多いのですが,4〜6個のテストに引っかかっています。1〜2のスコアが付いています。
露骨なアダルトサイト系のものは十数個のテストに引っかかりスコアが3〜4くらい付いています。

今後

SpamAssassinベイジアンフィルタの自動学習のためにはheaderテストでスコア3以上,bodyテストでスコア3以上の評価が行われる必要があります。
そのため,この日本語のテストだけでスコア3以上が付くのが望ましいです。
スコアを全体的に上げるとFalse Positiveの危険性が高まるのですが,現状ではFalse Positiveは生じていないので,各テストのスコアを0.1くらい底上げしてみても良さそうです。