スパム防止技術の最新技術はどのようなものですか?
ベイジアン フィルタリングに関する Paul Graham の記事は既に読みました。(スパムとより良いベイジアン フィルタリングの計画)
利用可能な最新の記事が他にもあるかどうか知りたいですか? (できればAI関連のもの)
スパム防止技術の最新技術はどのようなものですか?
ベイジアン フィルタリングに関する Paul Graham の記事は既に読みました。(スパムとより良いベイジアン フィルタリングの計画)
利用可能な最新の記事が他にもあるかどうか知りたいですか? (できればAI関連のもの)
スパムの単語や「fasdhusdhfi」などの文などを防止しようとしている場合は、単語とその同義語のデータベースを常に持つことができます。次に、入力にデータベース内の既知の単語が50%未満であるかどうかを確認し、フラグを立てることができます。オフラインデータベースを作成することもできますが、これはお勧めしません。または、いくつかのオンラインデータベースを使用することもできます。単語のリストについては、私は提案します
それらの単語の同義語のリストについては、私は提案します
どちらも使用できるAPI(synonyms.netの場合はこのページにあります)があり、返されたページを単語用に解析する必要がないため、これら2つはおそらく上記の目的に最適だと思います。
次に、ベイジアンフィルタリングなど、前述のように、これを他の方法と組み合わせることができます。
これはAIのニーズに実際には適合しませんが、さまざまなメッセージを防ぎます。
'AI'リクエストに合わせるために、おそらくALICEのSpam.aimlを適応させることができるかもしれません。AIML形式ですが、4シンボルスパムの順列が多数含まれています。これの問題はそれが遅いということです。
Spam.aimlに代わる可能性のある方法は、英語のルールを使用してスパムを検出し、それをフィルタリングすることです。次のルールを使用できます。
すべての単語には少なくとも1つの母音が必要です。このため、文字「Y」は母音と見なされます。
連続して3つを超える子音を持つ単語はありません。この目的のために、「TH」は1文字と見なされます(「streNGTH」のような単語を台無しにしないため)。
34文字より長い単語はありません。これに対する例外は、ここにリストされている単語です。
一部の文字の組み合わせは発生しません。この例としては、「R」と「C」の文字が、スラング以外の通常の会話で直接並んで表示されることはありません。
あなたは不可能な組み合わせのデータベースを持つことができます。私は6578語を含むデータベースに対して2文字のすべての順列を実行することによって小さなものを作成し、次の結果を思いつきました。
df bf kf gf jk kj sj fj gj hj lj sl
それらはすべて不可能な組み合わせです。もちろん、「zz」などの組み合わせは省略されます。それらは:
aa bb cc dd ee ff gg hh ii jj kk ll mm nn pp qq rr ss tt uu vv ww xx yy zz
「oo」は、「look」などの多くの単語に表示されるため、省略されています。
2文字より長く、連続して繰り返される文字列のセグメントには、スパムのフラグが付けられます。文字列「lololololol」では、繰り返されるセグメントは「lo」であり、スパムとしてフラグが付けられます。
同じ単語に含まれる3つ以上の同じ母音には、スパムのフラグが付けられます。例:「o」と「u」は3回以上繰り返された母音であるため、「oooouuuu」はスパムとしてフラグが付けられます。
1文字を超える単語は、母音だけで構成することはできません。この場合、「あなた」の誤検知を防ぐために、「Y」は母音とは見なされません。
これらの規制に15%以上(スペルミスのマージン)従わない入力は、スパムにリダイレクトされます。
ALICEのファイルを変更することにした場合は、ここでそれらの多くを入手できます。新しいバージョンは、ALICEのGoogleCodeページにあります。
スペルチェッカーを使用してスパム検出を支援することもできます。PyEnchant(Python用)などのスペルチェッカーに対して入力を実行し、提案を読むことができます。入力に提案がない場合は、ほとんどの場合、スパムであると安全に想定できます。
完璧ではありませんが、限られた範囲で行う必要があります。このようなスパムフィルタリングがどのような結果になるかを示すために、小さなプログラムを作成しました。これが出力です。
>>> fdsahjfsd
'fdsahjfsd' is spam since more than 3 consonants appear in a row
>>> fhsdjhfksd
'fhsdjhfksd' is spam since it has no vowel
>>> jfsdkjl
'jfsdkjl' is spam since it has no vowel
>>> dk
'dk' is spam since it has no vowel
>>> ddds
'ddds' is spam since it has no vowel
>>> uxxs
'uxxs' is not spam
>>> kd
'kd' is spam since it has no vowel
>>> ukd
'ukd' is not spam
>>> asdjaskljlaskjldkasjkljdklas
'asdjaskljlaskjldkasjkljdklas' is spam since it is too long
>>> hdjaskj
'hdjaskj' is spam since invalid sequences detected
前に述べたように、誤検知('uxxs'など)を返すため、完全ではありませんが、これはスペルチェックの実装で修正できます。
スペルチェックの実装によるバックドローは、スパム検出が辞書にある単語の量に基づいて行われることです。ほとんどのスペルチェッカーには最初の10,000語しかないため、一部の一般的でない単語はスパムとしてブロックされる可能性があります。ただし、入力の15%以上が無効であるかどうかを確認すると、これを解決できます。
あなたがそれがあなたを助けるかもしれないと思うなら、あなたは私がここから作った小さなプログラムを手に入れることができます。Pythonで書かれています。
また、ここで他の回答が述べているように、「最先端の」スパムフィルターにはさまざまな方法が必要です。
SpamAssasin、PyZor、Reverend、Orangeを使用できますが、おそらく最善の方法は、これらすべてを組み合わせることです。
これにLispを使用したい場合は、Lispでのベイジアンフィルタリングに関する優れた記事がここにあります。
ニューラルネットワークを介してこれを実行したい場合は、このCodeprojectの記事が役立つ場合があります。シンプルで使いやすいdllを利用しており、サンプルコードはスパムフィルタリングのタスクにほぼ直接使用できます。
最先端のアルゴリズムは、入力データの質と量に比べれば、特定のアルゴリズムではありません。最先端に到達するには、何十万ものアクティブ ユーザー、1 日あたり何百万ものメッセージが必要です。言い換えれば、Gmail、Yahoo、または Hotmail であるか、同様に大量のリアルタイム データを取得する手段を備えていることです。
可能な限り最後の瞬間まで評決を保存します。ユーザーがメッセージの一覧を要求する直前に、ユーザーの受信トレイからメッセージを引き出す準備をしてください。どのユーザーを信頼するかを判断し、その判断を他のすべてのユーザーのメッセージに適用します。できるだけ多くの外部入力 (ユーザーの判断、送信者の評価、URL の宛先分析など) を収集し、それらを機械学習機構にフィードします。
メッセージの内容だけに基づいてスパムをフィルタリングしようとするのは負けゲームです。スパマーは、ベイジアン分類器がノイズ以外のことをほとんど認識できないレベルまでメッセージを変更する方法を知っています。しかし、あなたは彼らに対してこれを使うことができます. SpamAssassin にはこれに関する多くの証拠がありますが、実際に成功させるにはリアルタイム データの動的分析が必要です。関連するインプットが十分にあれば、評決を作成するために使用する正確な方法は二次的な重要性を持つとさえ主張します。
これらの記事を見つけました:
他の人に役立つかもしれません。
私は (全くの怠惰から) SpamAssassinのベイズ実装をしばらく使用していましたが、パフォーマンスはかなり悪かったです。
数か月前、SpamAssassin を制御して、協調フィルタリング システムVipul の RazorとPyzorを武器庫に追加し、スパム スコアを上げました。私はスパムを半定期的に両方のシステムにフィードしています。まだ完全ではありませんが、私の電話は以前よりずっと頻繁にオフになりました。
「最先端」とは効果的な技術の組み合わせのようです。