2

ユーザーが他のユーザーにメッセージを送信できるRailsアプリがあります。問題は、偽のメッセージを送信する多くのスパマーを引き付けるタイプのサイトであるということです。

Akismet( rakismet経由)やDefensio(defender経由)のようないくつかのスパムサービスをすでに知っています。これらの問題は、ユーザーがすでに送信したメッセージを考慮していないように見えることです。私のサイトで見られるスパムの種類は、ユーザーが同じ(または非常に類似した)メッセージを他の多くのユーザーに送信する場所です。そのため、少なくとも少数の過去のメッセージと比較して、スパムと見なされないほど十分に異なっていることを確認できるようにしたいと思います。

これまでのところ、私が遭遇した最高のものは、2つの文字列間の差の数を計算するText::Levenshtein距離の実装です。差の数を文字列の長さで割って計算できると思います。特定のしきい値を超えている場合は、スパムとは見なされません。

私が遭遇したもう1つのことは、 Classifier :: Bayesです。これは、何かがどのカテゴリに分類されるかを最もよく推測します。まだこれについて熟考しています。

私は間違った場所を見ているだけかもしれないと感じています、そして多分そこにこのような何かのためのより良い解決策がすでにあるかもしれません。おそらく私はもう少し便利なものを見つけるために間違った単語を探しています。

4

1 に答える 1

3

このために独自のソリューションを試してみないでください。予想よりもはるかに複雑です。実際、暗号化のように、それを誰か/本当に得意なものにファームアウトする方がはるかに良いアイデアの1つです。ここにあなたのためのいくつかの背景があります。

レーベンシュタイン距離は確かに知っておくとよいことですが(類似度メトリックがいつ役立つかはわかりません)、この特定の問題に使用するのは適切ではありません。

ベイジアン分類器は、あなたが求めているものにはるかに近いものです。実際のスパム検出は、単純ベイズ分類器が途方もない仕事をすることができる場所のほぼ標準的な例です。スパムと非スパムに分類され、サイトで取得するメッセージの種類に類似した大量のデータ(メッセージ)のコレクションを見つける必要があると言っています。次に、分類器をトレーニングして、そのパフォーマンスを測定する必要があります。それを微調整し、過剰適合しないようにする必要があります。Classifier:: Bayesはまともな基本的な実装ですが、これに対する多くのサポートは提供されません。実際、Rubyは優れた自然言語処理ライブラリの欠如に悩まされています。Rubyには、PythonのNLTKと比較できるものはありません。

そうは言っても、akismetのようなサービスには、送信するものがスパムであるかどうかを判断するために使用するツールの1つとして、ベイズ分類器が確実に含まれます。この分類子は、非常に多くのデータにアクセスできるという事実以外の理由がなければ、自分で作成できるものよりもはるかに洗練されている可能性があります。彼らはまた、彼らが使用する他のタイプの分類器/アルゴリズムを持っている可能性があります、これは結局のところ彼らのコアビジネスです。

簡単に言えば、もし私があなたなら、Akismetのようなものをもう一度見てみよう。あなたまたはあなたのユーザーがメッセージをスパムとしてフラグを立てることができる施設をサイトに構築すると(たとえば、rakismetのspam!方法を介して)、このデータをakismetに送信できるようになり、サービスは特定の種類のメッセージを非常に迅速に学習するはずです。スパムです。したがって、ユーザーが同様のスパムメッセージを多数送信している場合、akismetがこれをすぐに受け取らなくても、これらのいくつかにフラグを立てると、残りはすべて自動的に受け取られるはずです。もし私があなたなら、私はあなた自身の解決策を転がそうとするのではなく、この方向で実験することに私の努力を集中するでしょう。

于 2011-08-13T15:19:58.523 に答える