このブログを始めてからずっとスパムコメントの処理は WP SpamFree に任せていました。これまでに投稿されたスパムの数は全部で2,542通。そのうち 2,531 通は WP SpamFree がスパム判定していました。11通だけが WP SpamFree を逃れて投稿されたコメントです。しかも、WP SpamFree を逃れて届くスパムコマントは先月まで皆無でした。
仕方がないから、別のスパムフィルタを導入したという話です。
現在、カテゴリ「spam」の投稿記事を表示中です。
このブログを始めてからずっとスパムコメントの処理は WP SpamFree に任せていました。これまでに投稿されたスパムの数は全部で2,542通。そのうち 2,531 通は WP SpamFree がスパム判定していました。11通だけが WP SpamFree を逃れて投稿されたコメントです。しかも、WP SpamFree を逃れて届くスパムコマントは先月まで皆無でした。
仕方がないから、別のスパムフィルタを導入したという話です。
一年前は毎日、ちょぼちょぼやってくるコメントスパムに悩まされていました。標記の WP-SpamFree プラグインを入れてから、その悩みから完全に開放されました。よく働いてくれるもので、そろそろ退治したスパムコメントの数が1,000の大台に乗るところです。ということで、しばらく WP-SpamFree のカウンタをサイドバーに表示してみることにしました。
今日、東工大の認証基盤に関する会議に出席してきたのですが、そのあとで東工大メールについての面白いお話しをいろいろと伺いました。
東工大で最も多くのスパムを受け取っている人はだれか?なんと私みたいなんです。あるいは、同じ専攻のW辺先生かもしれないけれども、この二人が東工大の双璧をなしているのだそうです。なんか、褒められたみたいでちょっと嬉しいです。
2/21の日記に書いた閾値の設定方法は佐藤くんがずいぶん試行錯誤をしてくれたものの、うまくいかなかった。彼の努力の副産物として、HTMLメールに対する検出能力がかなり向上したようです。
手作業で閾値を調整すればわりとうまくいくということなので(佐藤くんご苦労さまでした)、仕切り直し。ハムメッセージ集合(H)とスパム集合のそれぞれに含まれるメッセージについて評価値を計算し、それぞれの集合ごとに平均値MH、MSと標準偏差σH、σSを求め、閾値をMH + (MS-MH)/(σH + σS)σHと定めてみる。
中身がほとんど見えない Gmail のスパムフィルタなのですが、ちらりと書かれてたのでリンクしておきます。
しばらく前に佐藤くんが株式取引に関わるスパムは検知が難しいと言ってました。普通のスパムの目的は、ウェブページへの誘導だと言われています。あらかじめ用意されたウェブページを見せることが目的なので、スパムにはそのウェブページのアドレスが含まれます。大量に類似したウェブアドレスが出現すれば、それがスパムのサインと言えるのです。
一方、株式取引に関わるスパムの目的は情報を撹乱させることにあります。「ある株が上がりますよ」という情報を流して、実際にその株が上がったときに売り抜ければラッキーということになります。この場合、スパムにはさきほどの例のようなウェブアドレスは現れません。変質的な語彙が使われているわけでもないので、株取引に関わる情報をメールで得ているような人の場合には、Bayes 方式のようなコンテンツを眺める方式もあまり有効ではないでしょう。
Gmail もこのようなメッセージは見落とすことになるでしょう。そして、多くのユーザが「迷惑メッセージとして報告」してくれたときに、何が起きるのか?これを評判情報として、協調フィルタリングをするのか、それとも Google の技術者が特製のフィルタを書くのか。。。今日のブログを見ると、その両方をやっているように思えます。かなり人手でがんばっていると。
増井さんのブログにPPM (Prediction by Partial Matching) と呼ばれるデータ圧縮の方法とそれを応用したスパムメッセージの発見法 (CACM 2月号)が紹介されていました。データ圧縮によってスパムを発見するという手法については、以前、佐藤くんが論文を紹介してくれたんだけど、なんだったかな。。。
Bayesianスパムフィルタにおいて、スパム判定の閾値を自動的に設定する方法について。
教師データとしては、スパムあるいはハムとラベル付けされたメッセージの集合(M)を用いる。ここで教師データのうち、スパムメッセージの集合を S、ハムの集合を H とする。Bayesian スパムフィルタは、各メッセージについてスパム性の指標となる [0, 1] な数値を割り当てる。p : M → [0, 1]
実用的なスパムフィルタには、false positive*1が限りなく0に近く(< 0.1%)、false negative*2がかなり0に近いこと(< 5%)が求められる。
スパム性の指標について、どのような閾値を与えれば、この要求に答えられるかを提案する。本当は統計的な考察をすべきだが、やんごとない理由から、極めていいかげんな議論になる点をお許しいただきたい。
| max({p(h) | h in H }) + Δ1 < min({ p(s) | s in S }) のとき | max({ p(h) | h in H }) + Δ1を閾値とする。
このように設定した閾値を用いた場合、教師データをに対して false negative と false positive をともに 0 に設定することができる。
ここで、s5%は、s (in S)のうち 5% 番目(つまり、0.05×|S|番目)に小さな指標を得たスパムメッセージである。この心は、5% の false positive は我慢するというものである。ただ、このままでは下手をすると false negative を与える可能性があるので、それだけは避けるというものである。
さきほどの打合せでここまでを決めて、現在、佐藤くんがコーディング中。夕方からの新四年生歓迎コンパの間に、この結果が出るはず。
n人の仮想ユーザのそれぞれ(ui)が受け取るメッセージの集合をMjとする。全ユーザをU = ∪ ui、メッセージ全体M = ∪ Mjとする。すべてのメッセージをすべてのユーザのフィルタに与えた評価値を収集する。
各評価値を得て、スパム性判断の閾値の学習を行い、一定以上の false positive/negative を基準にフィルタ利用可能性について評価を行う。
フィルタ利用可能性はU2上の二項関係として与えられる。これに対して神のクラスタリングを作り、メモリ共有の効果を評価する。
時系列的なフィルタの変動、クラスタの再構成については別途実験する。