spam判定をするためにはどれくらい学習が必要なのかというのは良くわかりませんが、参考までに僕のところではどれくらい学習させているか管理画面のスクリーンショットを掲載しておきます。
spamというのがspamであるデータに含まれる単語。hamというのがspamでないデータに含まれる単語をあらわしていて、それぞれの単語が含まれる確率を用いてspamであるかどうかを判断します。これらのデータは自分で投入することもできますがNP_SpamBayesでは簡単にフィルタを賢くできるような機能が備わっています。
例えば、ブロックしたトラックバック*1を元にspamであることを学習させることができます。また、公開されているコメント*2や公開されているトラックバック*3を元にspamでないことを学習させることもできます。
迷惑メール振り分け技術として良く使われているベイジアンフィルタを用いたspam避けプラグインです。きちんと学習させればおそらく最強のspam対策プラグインであることは間違いないと思います。
反響が予想以上に大きかったので、さっくりと作ってしまいました。もともとローカルのMecabを使って形態素解析をしていたのですが、この部分を誰もが導入可能なようにごっそりとYahoo!のウェブサービスに置き換えたものです。
† あくまでベータ版です
とりあえず動作可能*1ではありますが、あくまで人柱版という位置づけです。
技術的な問題に関しては積極的に対応していきますが、それ以外のサポートはあまりする予定がありません。また、日本語はきちんと処理できますがインタフェイスは英語のままです。
※使い方についてはplugins:spambayesjp[Nucleus CMS Japan Wiki]にまとめる予定です。
動作確認はNucleus 3.3(UTF-8)、PHP 4.4.7環境で行っています。
動作確認報告、バグ報告はこのエントリへ、コメント・トラックバックをお願いします。
以前にちょっと調べて作りかけだったreCAPTCHAプラグインを完成させてみました。これは自分のサーバー上でGDを使わないのでGDが使えないサーバでも利用することができますし、GDが使えるサーバでも負荷の軽減になります。
で、一人で喜んでいたんですが、そこに罠が待っていました。
reCAPTCHA Resourcesを見ると先日まで存在していなかったNucleus用のプラグインがいつのまにかリストされていました。混同しないように自分のプラグインはNP_ReCaptchaJPとしましたが、もう公開する必要はないかもしれませんね。ちょっとショックです。。。。。。。
いちおうAkismetの時のように導入チュートリアルとか書くと嬉しい人とか多いのかなぁ。
プラグインオプションで設定できるテンプレートの変数を調整しました。その他軽微なバグ修正を行っていますが、現状で特に不具合が出ていなければアップグレードは必須ではありません。v1.15からのアップグレードはファイルの上書きのみで可能になっています。
※インストール等は付属のNP_Paintヘルプを参考にしてください。
動作確認はNucleus 3.3(UTF-8)、PHP 4.4.7環境で行っています。
動作確認報告、バグ報告はこのエントリへ、コメント・トラックバックをお願いします。
実はかなり前から発生を確認しているのですが、NP_TrackBackというUserAgent騙るトラックバックspamツールが出回っています。
NP_TrackBackがspamの発信源かのように取り扱われている記述も散見されるようなので、jp版の現メンテナとしての見解を述べておきます。ちなみにどんなアクセスかというと下記のようなものです。
このログの一番最後の"NP_Trackback/2.0.3"という部分がUserAgentなのですが、なぜこれが偽装されているのか見破れるかというと、このUserAgentは本当のNP_TrackBackには存在しないものだからです。
katsumiさんがNucleusのSQLクエリ実行回数とメモリ消費量を測っていたので、うちでもまねしてみました。
ここでは同時に、メモリの消費量を見るためにmemory_get_usage()関数の戻り値も表示している(PHPのコンパイル方法によっては、この関数は使えないので注意)。
memory_get_usage()、こんな関数あったんですね。うちではメモリ使用量はキャッシュヒット時で800k弱、キャッシュミスヒット時で1.1Mくらいでした。
実はクエリの実行回が多いことについてはずいぶん前からわかっていて、僕のところでは最悪で500程度の数値が出ていました。これらについては後述の方法で実行したクエリの内容を保存しておいてそのクエリの内容を分析してチューニングしたりしていました。
オリジナルの2.0.3と2.1.0のdiffを取ってみて詳細がわかってきました。
細かい部分としてはmysql_query()がsql_query()になっていたりとか、ちゃんとしたUAを名乗るようになっていたりとかするみたいです。
Nucleus Support :: View topic - NP_TrackBack 2.1.0
This new version added the following functions:
- Added delete all blocked trackback function in admin menu
- Harden tb URL, add tbkey which timeout and ignore unknown/expired tb ping (likely spams), the key valid for ~ 3 hours
- Fixed send ping blocked by NP_BadBehavior
- Re-instate ping form for item to allow user to manually ing another post (which url, etc are automactically filled)
前回良くわからなかった最後のヤツはトラックバックの手動送信用フォーム(自分のサイト→他のサイト)機能のようです。
日本語版ではトラックバックの手動送信はすでに<%TrackBack(sendpinglink)%>でサポートしているのでこの機能の導入は必要なさそうです。オリジナル版では1.x系の頃のように送信画面を別途追加してしまったようなのですが、また、日本語版では管理画面にある手動送信フォームを再利用するようになっているので、こちらのほうがちょっとスマート*1です。
Rico.jsがバージョンアップしていたのですが、これを使うとNP_TrackBackに一括処理が追加できそうだったのでちょっとやってみたらすぐにできてしまいました。自画自賛でちょっとアレですが、かなり使いやすいです。ちょっと思ったんですが、多分これと同じようにコメント管理なんかができるとかなり便利かもしれません。
まだ実装とかメッセージはかなりやっつけなのでもう少し整理してから公開します。あとやりたいのは検索対応かなぁ。2.1.0の差分取り込みもしないといけませんね。
Nucleus本が出たので僕の周りでも新規に導入したという話を聞く機会も多くなりました。Nucleusをそれなりに使うためには大なり小なりプラグインを入れないといけなくなってくるわけなのですが、公式サイトのWikiのプラグイン一覧だと数が膨大すぎて読む気になれないらしく、「いくつくらいプラグインを入れているんですか?」という質問を最近何度も受けるようになりました。
プラグインはたくさん入れていますが、実は自分自身でもいくつ入れているのかわかっていないので参考までにまとめておきたいと思います。
オリジナル版のNP_Trackbackがバージョンアップして2.1.0になっていました。
Nucleus Support :: View topic - NP_TrackBack 2.1.0
This new version added the following functions:
- Added delete all blocked trackback function in admin menu
- Harden tb URL, add tbkey which timeout and ignore unknown/expired tb ping (likely spams), the key valid for ~ 3 hours
- Fixed send ping blocked by NP_BadBehavior
- Re-instate ping form for item to allow user to manually ing another post (which url, etc are automactically filled)
機能的な部分でjp版に取り込まなければならないことを考えてみると、最初のブロックしたトラックバックの一括消去についてはjp版ではすでに実装済み。2番目のtbにキーを持たせておいて一定時間より古いURLを使ってトラックバックしてくるものを排除するという機能については、うちのサイトの実績から正直spam対策としての効果が疑問なので実装はちょっとpending。3番目のNP_BadBehaviorについてと4番目については正直何を言っているのか詳細がわからないのでこれは要調査。
とりあえず、内部的な変更点についてはdiffをとってみるしかないですね。