2005-01-15 [長年日記]

[Q3] スパムフィルタ (4)

英数字しか処理していないと「未承諾広告※」と書いてあっても素通りしてしまうので、英数字以外の処理についても考えてみました。色々と調べてみると、形態素解析をするとデータベースのサイズは小さくなるものの精度はそれほど上がらず(解析の精度が悪いと下がることも)速度も遅くなる*1ようです。形態素解析しないとすると、N-gramを使うというのが良くあるようで、2gramを使うケースが多いようです。

形態素解析するとなるとまず言語を判定しなくてはいけなかったりと何かと大変そうなので、N-gramで実装してみることにしました。手抜きなので以下のルールで行くことにしました。

  • US-ASCIIの英数字以外の文字はすべて区切り文字
  • 区切り文字以外のUnicodeで0x200以下*2の文字は区切り文字で区切られた単語をトークンとして扱う
  • それ以外の文字は2gramでトークンに分割する

ためしにクリーンを2500通程度、スパムを1000通程度学習させて見たところ、データベースのサイズは5M弱になりました。日本語のスパムも認識しているようです。

*1  これは形態素解析のエンジンにもよると思いますけど

*2  この数字はすごくいい加減です

[]