【言語処理】Perlでspamフィルタを作る
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/13(月) 18:19:03Perlでのより良いプログラミングの話以外に、spamフィルタ技術の話全般で
切磋琢磨したいです(切磋琢磨という表現はおこがましいとは思いますが。。)
一応動くものは作ったので上げたいと思うのですが
perlは初めて1ヶ月ほどな上、人に見せるつもりで書いたプログラムではないので
かなり読みにくいと思います。
(作っているものはbsfilterやPOPFileのようなベイズを基本にしたクライアント側のフィルタです)
0002デフォルトの名無しさん
2006/11/13(月) 18:26:32技術的な話なら書籍なり論文集なり漁れば良いじゃない
あとなぜに Perl?
0003デフォルトの名無しさん
2006/11/13(月) 19:03:32ネットに落ちている文書分類系のpdfなどを読んではいるのですが、
独学だと変なところでつまづいたり、時間がかかったりしますし、孤独です。
言語がPerlなのはそれ以外はCくらいしか使えないので言語を扱うにはPerlのほうがやり易すいかと思って、今書いている最中だからです。
あとGrahamさんやbsfilter製作者やその他みかけた多くの人がRubyを使っていましたが
メリットがどこにあるのかいまいち掴めなく、イメージ的に「Perlの兄弟言語」のように受け取り、
好評そうなPOPFileもPerlで書かれているのでPerlでいいかと思ったからです。
0004 ◆mR2RlX5cuk
2006/11/13(月) 19:40:20確率はRobinson方式で、モデルに与える確率変数はMecabでの形態素解析結果を、木はハッシュで作っています。
ttp://www.mediafire.com/?doqn1r5mqmk
0005 ◆mR2RlX5cuk
2006/11/13(月) 22:53:59式は間違ってないはずなのにbsfilterとくらべるとかなり精度が悪いです。
いろいろなサイトをとびまわって情報をかいつまんでわかったことは、
GaryRobinson式はほかの2つ(Graham,Robinson-Fisher)と比べてスパム確率が分散すること。
H = 1 - (1 - f(w1)) * (1 - f(w2)) *...* (1 - f(wn) )^(1 / n)はHUM性 、
S = 1 - (f(w1) * f(w2) *...* f(wn))^(1 / n) はスパム性を表わしていること。
でもなんでわざわざ1から差をとる必要があるのか。
H = (f(w1) * f(w2) *...* f(wn))^(1 / n)
S = (1 - f(w1)) * (1 - f(w2)) *...* (1 - f(wn) )^(1 / n)
でいいような気がするんですが・・・
0006デフォルトの名無しさん
2006/11/14(火) 19:11:47けど、誰も着いて来ない気が・・・w
00072
2006/11/14(火) 20:00:19ちゃんとまじめにやってるっぽいじゃないかw
今は忙しいから付き合えないけれど、自分も興味ある分野だから
暇になったらじっくり時間かけて追ってみるよ
って1居るのかな?
0008デフォルトの名無しさん
2006/11/15(水) 17:22:040009 ◆mR2RlX5cuk
2006/11/16(木) 03:40:20>>6
いやぁかなりごり押しプログラムです・・・。
初めて立てたスレなので
しばらく、「タイトルが悪かったのかなぁ」「板違いなのかなぁ。。」とか考えたり
夕日を見ながら削除依頼だしたほうがいいのかな。。とか思ってました。
>>7
ありがとうございます!!
>>8
むむ、pythonですか。まったく未知の領域です。
しらべた限りではおそらく例題によく出されているのであろうコンビーフのspamのことですね。
dbmとかいろいろpythonのほうが記述しやすい(コンパクト)ってことなんでしょうか?
あ、もしやたただのシャレ・・・。
wikipediaには
大雑把な位置付けは「Ruby」と同じく「Perlのオブジェクト指向版」ってありますね。
0010デフォルトの名無しさん
2006/11/16(木) 05:29:21インターフェース(ngワードの指定)部分はperlだぜ
内部はCかもれしれないけど
1が参考にするにはうってつけでは?
0011デフォルトの名無しさん
2006/11/16(木) 16:59:06プログラミングはPerlぐらいしかできませんが、興味あるスレだったので
これから眺めさせてもらいます!
0012デフォルトの名無しさん
2006/11/16(木) 17:07:190013デフォルトの名無しさん
2006/11/16(木) 17:09:500014 ◆mR2RlX5cuk
2006/11/16(木) 22:47:33スパムアサシンはPerlを使ってたんですねー。知らなかったです。
ありがとうございます。
オライリーで解説がでてる本というのはたぶん英語ですよね。
うーん、英語が読めないとそろろそ限界かもとは思ってはいるんですが。。。
スパムアサシンはCombineNaiveBayes.pmというファイルの中にRobinsonの式がありました。
ここでかなり衝撃的だったのはx(=0.6)とs(=0.16)の値が固定値だったこと(しかも想定外の値),
F(w)を求める式は頻度が少ないうちはxの値に近づけられて、その引きつける強さを表したのが
sなのでスパムアサシンはF(w)がf(w)から大きく変化はしないことになります。
それと
# Should we ignore tokens with probs very close to the middle ground (.5)?
# tokens need to be outside the [ .5-MPS, .5+MPS ] range to be used.
our $MIN_PROB_STRENGTH = 0.430;
とあるように0.07から9.53までのスパム確率をもつ単語は特徴的ではないとバッサリきり捨てています。
でもこれだと0頻度確率のx =0.6は切り捨てられるから意味がないような。。。
もうちょっと深くよんでみます。
ただbsfilterのほうが簡単そうなのでRubyで書かれてますが、こちらから攻めてみようかと
考えてます。
>>11
おおー仲間だーーー!
よろしくー
>>12
>>13
あ、すいません>>1です。うっかりしてました。。
0015 ◆mR2RlX5cuk
2006/11/17(金) 02:20:07xは各単語のスパム確率の平均値だとあるサイトに書いてあったのでプログラムは単純に平均をだして
xの値を更新するようになっているのですが、
これだとスパムのほうが非スパム(hum)より学習差がとびぬけて多いとx=0.9辺りになって
しまいます。
なんらしかの方法で最適化しない限りxは定数で与えてたほうがよいみたいですね。
というわけでプログラムを一部削除・・・知識データに総単語数を記述する必要もなくなりました・・・
0016デフォルトの名無しさん
2006/11/17(金) 12:13:40my $num1 = 3;
my $num2 = 4;
my $moji =tetra;
$data{$moji} = [ $num1, $num2 ];
print("%d",$data{$moji});
perl 実行
%dARRAY(0x85a7c28
何かよくわからない結果になってしまったのですが・・・
0017デフォルトの名無しさん
2006/11/17(金) 12:44:15print関数の使い方間違ってるし別に変な結果じゃないしスレ違いじゃね?
0018 ◆mR2RlX5cuk
2006/11/17(金) 23:38:15スレ違いですね。質問スレがあるのでそちらでどうぞ。
とりえずPerlは%dとかは使いませんよ。
0019デフォルトの名無しさん
2006/11/18(土) 00:11:01マルチ
0020 ◆mR2RlX5cuk
2006/11/18(土) 16:12:12この1週間くらいでなんとかbsfilterの中身を本(ASCII SOFTWARE SCIENCE Language 11 オブジェクト指向スプリクト言語 Ruby)
を片手に読んでみて、理解ができたらそれを自分のプログラムに反映させようと思います。
(オライリー[Perl]も読んでみて既存の部分ももう少しマシなものにしたいです。自分が勉強したのはCGIを目標とした本と基礎勉強サイトなので
複雑なデータ構造とかについては全く知らないんです。)
0021 ◆mR2RlX5cuk
2006/11/18(土) 16:20:160022デフォルトの名無しさん
2006/11/18(土) 19:59:260023デフォルトの名無しさん
2006/11/19(日) 02:00:220024 ◆mR2RlX5cuk
2006/11/20(月) 00:00:57参考になりそうなサイトをはっておきます。
Perl
ttp://digit.que.ne.jp/work/index.cgi?Perl%e3%83%a1%e3%83%a2%2fTips
ttp://www.site-cooler.com/kwl/perl/
ttp://takenaka-akio.cool.ne.jp/doc/perl_kiso/index.html
ベイジアンフィルタについて
ttp://www.tom.comm.waseda.ac.jp/~ike/column/0006.html
ttp://www.gohome.org/cgi-bin/viewcvs.cgi/cafoo/cafm-pg.el?rev=1.2&view=markup
ttp://radio.weblogs.com/0101454/stories/2002/09/16/spamDetection.html
ttp://www.linuxjournal.com/article/6467
A Plan for Spam(日本語訳)
ttp://level.s69.xrea.com/mozilla/spam/index.html
メールのMIME構造の解説
ttp://www.atmarkit.co.jp/fnetwork/rensai/netpro03/netpro01.html
0025デフォルトの名無しさん
2006/11/20(月) 03:30:07技術で貢献は出来ないけど影から応援してみる
0026 ◆mR2RlX5cuk
2006/11/20(月) 21:08:14記号も取り払ったほうがいいのだろうか。。。
助詞を取り除いて精度があがったという事実から考えられるのは、
SpamAssassinが0.07から9.53までのスパム確率の単語を切捨てているように
「中途半端な確率はノイズでしかない」
「ベイズは自分が思っていたよりも繊細な働きをしているわけではない
(というかそんな複雑なことをしないでも精度よくフィルタリングできるから
凄いんでしょうけども)」
ということです。
自分が考えていたベイズというのは、
スパムによく現れる単語と自分のよく使う単語が重複していると、その単語のspam確率をうまく下げてくれる。
自分の環境でよく使う単語であるにも関わらずspamメールの学習数のほうが圧倒的に多いせいで
spam確率が高い単語と認識されてしまう危険性も、spamメールとhumメールの学習数差を考慮して単語のspam確率を下げてくれるから何の心配もいらない、
でした。
でも実際はそう上手に確率を下げてくれるものではないようです。
となると本当に特徴的な単語というのは大半が名詞ですね、きっと。
そう考えると(平仮名を無視した)bigramと形態素解析の性能が大して違わないのもうなづける気がします。
0028デフォルトの名無しさん
2006/11/26(日) 00:57:24そんなわけS25Rお気に入り。
0029 ◆mR2RlX5cuk
2006/11/28(火) 16:41:36また学習数に関係なくhumをspamと誤判定することはありません。
さてここからどう進展させよう。。。。
今注目しているのは「画像を含むspam」です。ここ1年で急増しているらしいのですが
だいたいは画像とは無関係のテキストを張り付けていることが多いです。
で、これを画像解析せずにテキストだけでどう判定するか、です。
どこかから適当に持ってきた記事などを張り付けた場合、ほとんどが新出単語になります。
humメールに含まれる新出単語とspamに含まれる新出単語の特徴にはなにかしらの差があって
そこから判定できないか、と考えているのですが、はてさてうまくいくやら。。。
>>28さんが言う通りサーバ側も考えないといけないなと思っています。
S25Rを最近知ったぐらいサーバ側の知識がないのですが、サーバが勝手にユーザのメールを
誤判定で捨てることは許されないと思うのでベイズのような統計的な処理はサーバ側には置けないと考えます。
なのでS25Rのような確実な方法でフィルタリングしないといけないのですが、今はベイズで
手一杯ですね。。。自分でサーバを構築できた後に考えようと思ってます。
0030デフォルトの名無しさん
2006/11/28(火) 23:11:51面白そうなので思いつきで書いてみる.
>>29
思いっきりヒューリスティックに画像を含むものはspamである確率を上げる(画像なんて使わんもん)
いっそのこと辞書は空の状態からはじめて,未知である記号の列から
最長で一致するものを抽出していき,それを辞書に登録していくとかどうか.
abcdedcbabcba => abc
# 効率のよいアルゴリズムは思いつかないが
あとはその辞書を使ってベイズでも何でもいいけど普通に統計処理する.
うまくいくかは知らんが,新出単語とか気にする必要もないし,言語にも依存しないと思うがどうか.
0031 ◆mR2RlX5cuk
2006/11/30(木) 04:11:31辞書を空の状態からはじめるというのは、学習をさせずにいきなり判定を行うということでしょうか?
通常ならばある程度学習させてspam、非spam(hum)の両方の辞書をつくり、それを元に
「過去の結果から未来を推測する」ベイズで判定します。
もし無学習からはじめると未知である記号列(これから判定するメールの本文のことですよね)から
最長一致するものをとってきたとして、それをspam辞書に登録するのか非spam辞書に登録するのかが
わからなくなると思うのですが、私が何か勘違いしていますか?
それと最長一致だと同じことを言っている文なのに語尾が違うだけで違うものとみなされるという問題があります。
「無料で」「無料です」「無料!」の3パターンを覚えているよりは従来どおり形態素解析やbigramで「無料」とだけ覚えておくのが
良いと思います。
0032デフォルトの名無しさん
2006/11/30(木) 06:56:160033デフォルトの名無しさん
2006/11/30(木) 07:37:19噂では童貞には来ないらしい
0034デフォルトの名無しさん
2006/11/30(木) 18:26:14Spamassasinについてちょっとおもいだしたんですが
日本語対応が完全ではないらしく
日本語対応パッチを作った人がなんか苦労話を書いていたようなきがする。
まるごとPerl! Vol.1 (大型本)
Spamassassinの日本語スパム対応への取り組み
http://www.amazon.co.jp/gp/product/4844322893
がんばってねー
0035デフォルトの名無しさん
2006/11/30(木) 20:21:10俺童貞だけど来るぞ
Yahoo!メール使ってる
0036 ◆mR2RlX5cuk
2006/12/01(金) 02:25:03私もちょくちょく来ますけど多くはないですねぇ。
>>34
ありがとうございます!しかし敷居が高そうですねぇ〜先は長いです。
0037 ◆mR2RlX5cuk
2006/12/03(日) 02:25:27クライアント側ベイズフィルタリングで「spam」と判断されたメールには
「お宅のメールはspamと判定されましたよ」という内容のメールを送る。
そうすれば正当なメールをspamと判定してしまっても送信者が気づけば送りなおしてくれるのでは。
向こうが気づかなかったとしても(企業間メールを想定)
「メール送っただろ!」と怒られたとき「一応届いてないとの旨は送ったんですが。。。」くらいは言えそう。
それと送信者が偽装されていなければ、ゾンビPCのところには無視できない数のメールがくることになるので
ゾンビPCの使用者も異変に気づいて、かつ対処せざるを得なくなるのでは?と考えます。
書いた後になんですが、よくよく考えると「単にベイズとチャレンジレスポンスを組み合わせた」だけなので、
もうとっくにあるんでしょうねぇきっと
0038 ◆mR2RlX5cuk
2006/12/04(月) 22:31:33MTAでフィルタリング?するチャレンジレスポンスと受信してからフィルタリングするベイズだと
チャレンジレスポンス→ベイズはできますが逆はできないです。
うーん、できないのかなぁ・・・。できたら便利だと思うんですが・・・
0039 ◆mR2RlX5cuk
2006/12/06(水) 16:44:12しかしベイズではないですが↓に同じことが書いてあります。
ttp://k2net.hakuba.jp/rgrey/
結局私が言っていたことは「フィルタの誤判定を再送で救済」ということなので・・・。
やはり大体のことは先人が考えているんですねぇ。
チャレンジレスポンスとGreylistingって何が違うのだろう・・。
Greylisting(再送要求)とtarpitting(返答の遅延)の違いはわかるんですが。
0040デフォルトの名無しさん
2006/12/06(水) 17:53:15>>1だけのときちらっと見て以来だな。
>>5
f(x)ってのは何を表してるの?
とりあえず確率では1から差を取るということはよくやると思う。
0041 ◆mR2RlX5cuk
2006/12/07(木) 01:40:49ttp://www.tom.comm.waseda.ac.jp/~ike/column/0006.html
このサイトでは、hum性がP、spam性がQを表しているので>>5でのH、Sにあたります。
まずgary方式の単語スパム確率であるp(w)を下記の式でロビンソン方式の単語spam確率f(w)にします。
f(w) = ((robs * robx) + (n * p(w))) / (robs + n)
robxはspamでもhumでもないときの確率(0.5付近に設定)でn(単語の出現回数)が少ないときは
p(w)は信頼性なしとみなされrobxの確率に近付くようになり、回数が増えると本来のp(w)の値に近付きます。
robsは近付ける強さを表します。
で、ここから後が問題なのですが(>>5で言ったことは忘れてください。。)
(nはメール内に含まれていた単語の種類数)
H = 1 - (1 - f(w1)) * (1 - f(w2)) *...* (1 - f(wn) )^(1 / n)
だと1から各単語spamでない幾何平均をひいているのでこれはspam性を表すSで、
同様に
S = 1 - (f(w1) * f(w2) *...* f(wn))^(1 / n)
はhum性を表すHなのでは、、と思うのです。
そしてもっとわからないのが
I = (H - S) / (H + S)
です。
H∧Sでなければ上の式はまったく意味がないように思うのですが、H∧Sになる理由がわからないのです。。
A Plan for Spam(garyの式解説)
ttp://level.s69.xrea.com/mozilla/spam/index.html
ロビンソンの式解説(本人のところ)
ttp://radio.weblogs.com/0101454/stories/2002/09/16/spamDetection.html
0042デフォルトの名無しさん
2006/12/07(木) 03:36:02とりあえず上のサイト見たけどHに当たるものががスパム性で
Sに当たるものがノンスパム性(hum性)って書いてあるよ。よく読んでみれ。
んでIの式だけどノンスパム性が低いorスパム性が高いと1に近づくように
人為的に設定した式だと思う。
こういう風に大まかな挙動を考えて式を発見するってのは結構よくやる。
あくまでもこれは確率の式なので事象が同時に起こるとかそういうのは
気にしなくていい。
0043 ◆mR2RlX5cuk
2006/12/07(木) 04:18:38人為的な式ということでIの式はあんま気にしないほうがよいんですね
0044デフォルトの名無しさん
2006/12/07(木) 10:37:39ノンスパム性>>>>>スパム性の時-1に、スパム性>>>>ノンスパム性のとき1に
ノンスパム性=スパム性のとき0になるような式を作ったという感じだね。
例えばノンスパム性がきわめて低いメールであっても、それ以上にスパム性の
低いメールであればスパムでないメールとして判定できるようになってる。
0045 ◆mR2RlX5cuk
2006/12/08(金) 23:57:42画像スパムをどうしたものか・・・辞書をあらされるのが一番怖いです
0046デフォルトの名無しさん
2006/12/09(土) 08:20:490047 ◆mR2RlX5cuk
2006/12/09(土) 22:06:23証拠は私のプログラミング能力の無さですかね・・・w
0048 ◆mR2RlX5cuk
2006/12/13(水) 01:03:480049デフォルトの名無しさん
2006/12/13(水) 03:02:41LispならPerlより速いし
0050デフォルトの名無しさん
2006/12/13(水) 20:28:276つぐらいよく来るホストを指定したら2/3ぐらいに減ったよ。
ただ最初学習させるのに間違うと大変なことになるから自動処理には向かないかもしれない。
0051デフォルトの名無しさん
2006/12/13(水) 20:49:520052デフォルトの名無しさん
2006/12/13(水) 22:15:19>>48
PerlならHTML::Parserで本文だけを取り出すべき
0053 ◆mR2RlX5cuk
2006/12/14(木) 01:50:31「文字列処理はPerl」というつもりでPerlで書いているんですが、関数型の方が
速いのも確かですし、メインのところはCかLisp(経験無し)で書いたほうがいいんですかねえ。
文字列とモジュールが使えるところはPerlということにして。
50>>
今の画像spamは「画像中に描かれている文字を読み取る」か「ヘッダ情報」を用いて判定するらしいのですが、
画像解析をするつもりは今のところないので、そうするとヘッダと本文(1行文やどこかの記事のコピーを貼り付けたもの)
から判断するしかありません。(ヘッダspam確率*本文spam確率)
で、ヘッダはあまり工夫の余地がないと思うので、本文のほうの精度をなんとか上げられないかと思っているんです。
>>51
webで日本語訳をちらほら読んだことはあるんですが、やっぱり買って一読したほうがよいですかね〜
>>52
なるほどー。
こんなのもありました。
ttp://www.din.or.jp/~bigstone/cgilab/guide/mime.html
MIME.pmで必要な部分だけ取り出して、HTMLが混じっていたときはHTML::Parserって感じでしょうか。
0054デフォルトの名無しさん
2006/12/15(金) 20:11:16(MIME.pmは添付ファイルのデコードまでしてる)
自作した方がいいんじゃない?
正規表現使えばすぐだし。
あと本格的なSPAMフィルタを作りたいならこれにくわえて
2chの串規制でも使ってるDSBLもかますといいかもね。
0055 ◆mR2RlX5cuk
2006/12/16(土) 05:40:26DSBLはサーバ側に実装すると問い合わせが多いのでむちゃくちゃ重かったような気がします。
クライアント側だと大丈夫かな??(千や2千なら・・)
0056デフォルトの名無しさん
2006/12/16(土) 11:29:46perl詳しくないけど、速度はどうなんだろ。
MIMEはツリー構造をまじめに解析したらかなり面倒だと・・
0057 ◆mR2RlX5cuk
2006/12/23(土) 01:02:55MIMEも必要なところ以外無視するようにすればなんとかなりませんか?
MIME.pmもtext/**とmessage/**以外は無視のようです
0058 ◆mR2RlX5cuk
2006/12/26(火) 03:15:33画像スパムの中に、wwwから画像をリンクしているものがあったのですが、
スパムが読まれたかどうかを調べるもののようです。
生きているアドレスを調べることができるそうですが、個人的には
どこに何通送ったら何通読まれていた、という市場調査が可能なのが嫌な感じです。
0059デフォルトの名無しさん
2006/12/27(水) 04:15:42そういう漏れに言わせると、perlを使いこなせるかはCPANライブラリを使いこ
なせるかと同義だ。
なので極力モジュールに任せられるところは任せるようにしたほうがいいぞ。
あと>>4のソースいまさら眺めてみたが、jcode.plはさすがに古いのでやめとき。
Jcode.pmかEncode使うよろし。
それからPerlをマルチバイト文字で書くときは、encodingプラグマ使うといい
ぞ。
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
perlに慣れて来たら、strictプラグマも使うといいぞ。
ttp://iandeth.dyndns.org/mt/ian/archives/000617.html
これは自分に手枷はめてミスをふせぐためのもんだから、慣れないとめんどく
さく感じるだろうけどな。
ちなみに>>58で言ってるのはウェブビーコンとかウェブバグとか言われる奴な。
古典的な手だ。
外部のファイル読みに行くUAが悪いんだけどな。
0060デフォルトの名無しさん
2006/12/27(水) 09:34:52テストとコードの精査とか断片書くのなら手伝うでよ。
0061デフォルトの名無しさん
2006/12/27(水) 15:22:02encodingはやめたほうがいいと思う。よっぽど注意して使わないとバグの元になるから。
strictとwarningsはワンライナーならともかく、ある程度の規模のもの書くなら必須。
0062デフォルトの名無しさん
2006/12/27(水) 16:35:2537で書かれている主旨とRgreyは少し違うと思います。
37でやりたいのはfalse positiveかもしれないものの送信者へwarningを送るということですよね。
Rgrey等は、複合的条件で判断することでfalse positiveを減らす、というのが主旨なので。
チャレンジレスポンスとGreylistingでは、人が判断するかシステムが自動で返すかが違います。
もっと簡単に言うと、GreylistingはまともなMTAから送信されているかをチェックするものです。
Greylistingは確認をしてもらうためではなく、あくまで再送チェックによるフィルタなのです。
そういう意味ではTarpittingも同じです。
チャレンジレスポンスするのは、送信者アドレスの偽装があるため、難しいというか
迷惑になる可能性が高いのでやめたほうが良いかと思います。
アドレスが偽装されてる場合、ゾンビPCにメールを届けることは出来ませんよね。
SMTPセッションが張られている間にベイズで判断してGreylistingさせるとかを
考えられてるのだとすると、こちらの論文が一部参考になるかも。
http://info.ipsj.or.jp/01kyotsu/award/funai_bp/2006_pdf/LL_008.pdf
0063デフォルトの名無しさん
2006/12/27(水) 16:41:21画像スパムに対してベイジアンだけで対抗するのは難しいのではないでしょうか。
送信元の特徴と、添付画像サイズや数などの特徴の複合条件で、その可能性が高い
という判断が出来るまででは。
それ以上に完全に判定するには、やはり画像から文字認識させるしかないと思います。
0064 ◆mR2RlX5cuk
2006/12/28(木) 02:32:00とりあえず自分の言いたいことだけ言います。
その1
とりあえベイズだけだと難しいので、画像もみてみようと思います。手始めにエッジと
色の距離をとってみれば、同じ画像や背景色を変えただけのものはわかると思います。l
「いろいろ色を混ぜてある背景に、(OCRを意識して)ぐにゃぐにゃした文字が書いてある」くらいまで
わかるようになれば、、、と思っています。
その2
サンプルデータがない(humの)
今のプログラムは本文テキスト部しかみてないのですが、ちょっと改造してヘッダをみるようにしたのですが
環境が違いすぎて判定率が良過ぎるんです。
humメールは全部日本語で、HTMLを使ったメールは1通もないし、Outlookを使っている人間もいない。
対してspamは英語で、HTMLを使いまくり、ソフトはだいたいOutlookという状況。
コンテスト用にサンプルデータとかあったりするんだろうか。。。
その3
ここしばらく携帯で見れなかったのですが、大丈夫なようなので年末年始もいますw
0065デフォルトの名無しさん
2006/12/28(木) 09:58:24その1の方向は、SpamAssassinのFuzzyOCRがやってるので、そちらを参考にされてみては。
FuzzyOCRは禁止ワード登録という手法なので、FuzzyOCRで検出された語句をベイジアンに
渡すという方向でやってみるのも面白いかと。
あと、文字を認識するのではなくて、画像の種類を認識させる
(文字っぽいのか写真っぽいのか文章っぽいのか、といった感じで)というのもいいかと思います。
それなら、FuzzyOCRの判断と組み合わせて使うことも出来て有用ですから。
その2の点ですが、英語のMLに入っておくと良いと思います。
HTMLメールは、取りたくなくてもメールマガジンを入っておいて、HTMLで受けるにしときましょう。
出来れば、英語でHTMLメールの画像入りまくりなメールマガジンを取りたいところですが
手頃なそういうメールマガジンを知らないので、合ったら教えて下さい。
0066 ◆mR2RlX5cuk
2006/12/29(金) 02:19:55CPANライブラリはついつい(後回しにして)避けてしまうんですよね。
でなければ自分でトライ木?を作ったりはしなかったと思います。
jcode.plは古かったんですかっ。直しておきます。
encodingプラグマとstrictも勉強してみます。
1つのファイルに長々とコードを書いるくせに変数名はその場で適当に決めてますから。。
ウェブビーコン、wikipediaに結構詳しくのってますね。古い手でもまだ流通しているんですねぇ。
統計的にはかなりspam寄りだろうに。。。
>>60
bsfilterも何気に多機能だったりしますからねw
しょぼいコードの指摘をお願いしますm(_ _)m
>>61
扱いが難しいんでしょうか、とりあえず使えそうなら使ってみようと思います。
痛い目に実際にあったほうがよくわかるだろうし。。。
0067 ◆mR2RlX5cuk
2006/12/29(金) 02:58:18ふむふむ、理解しました。
チャレンジを受け取った相手は自分の送信履歴と照合して、一致しなければ削除、みたいな
ことをすれば大丈夫かなとも思いますが、相手が整備していることを前提のシステムはだめみたいですね。
SMTPセッションまでは考えていません。今のところコンテンツフィルタメインです。
ただspam対策の決め手はやはりそちらだろうと思います。
論文読みました。なるほどー。強制切断がミソですね。
正直分散協調型はどうなんだろうと思っていてあまり関心がなかったのですが、面白いです。
>>63
今のところ画像を解析するのは処理が重すぎて大規模サーバでは使えないので
OCRはクライアント側ですることになることになるのかもしれませんが、spamがクライアントに届いた時点で
spammerの目的は半分達したことになると考えています。
(spamの広告文句にひっかかる人はおそらくフィルターは入れていないので)
なのでなんとかして極力、画像を解析する数を減らすのが重要ではないかと。
>>65
「画像の種類を認識」
そう、これをやりたかったんです!
OCRは自分で作るつもりはなかったのであまり気にしていなかったのですが
てっきり認識した文字はベイズにかけるものだとばかり思っていました。
禁止ワード登録はちょっとやりすぎですね。
そろそろ教えてもらったことを血肉にしなければっ
0068 ◆mR2RlX5cuk
2006/12/29(金) 03:02:31spamに近い構造のメールを送ってくるグレーなMLが理想ですねw
ハッカーと画家購入!
0069デフォルトの名無しさん
2006/12/29(金) 11:22:07怪しいものに対してだけチャレンジ・レスポンスで確認するFairUCEというのがあります。
alphaWorks : FairUCE : Overview
http://www.alphaworks.ibm.com/tech/fairuce
自分はチャレンジ・レスポンス自体に否定的なので、ちゃんと試してないけども。
そうそう。OCRは重すぎるので、荒く画像の種類を認識して、怪しいのだけをOCR掛ける
というようなイメージです。
ただ、FuzzyOCRもいろいろと負荷下げるための工夫が施されているようなので
実はすでにそういう荒いフィルタでの選り分けも、実装されてるのかもしれませんが。
0070 ◆mR2RlX5cuk
2007/01/03(水) 23:31:41携帯で書き込みできなかった。。。
最近になってスパムアサシンのすごさがわかってきたので勉強したいと思いますm(_ _)m
新しい案を。
今まではメールの内容を「野球」「サッカー」「株」などの分野分けをしてフィルタリングしていましたが、
これを「このメールは確率的に野球の話」から「このメールは確率的にホワイトリスト内のAさんが書いたもの」
という風にするのはどうでしょうか。
個人の文章の書き方でフィルタリングするということです。(普通のベイズフィルタの後に)
私なら「まぁ」や「。。。」を多用し、一人称は「私」、使う顔文字も割りと限定的です。
ホワイトリストの人数分だけ特徴を記憶しておいて、実際の判定時には閾値を超えた
人物が現れたら、そこで判定を打ち切ってhumにしようと思っています。
正直うまくいくとは思えなかったりもするのですが、OCRに持っていく数を少しでも減らせたらという考えです。
0071デフォルトの名無しさん
2007/01/04(木) 01:36:40いきなりhtmlメールで画像の添付ファイル送られて来たりしないからな
htmlメール全部禁止するだけで99%解決なんだが
0072デフォルトの名無しさん
2007/01/04(木) 10:35:54それよりも単に、オートホワイトリストを使ったほうがいいような気がします。
SpamAssassinでは、メールアドレスとIP(の上2つぶん)でオートホワイトリスト作ります。
ただ、オートホワイトリストのポイントが高ければ、他のフィルタを通さないで素通り
とは出来なかったと思うので、そのへん出来るとOCRへの負担を減らせるように思います。
0073 ◆mR2RlX5cuk
2007/01/06(土) 21:38:06ホワイトリストにいるような知人が違う環境から送ってきた場合とかに有効かなと思いまして。
>html99%禁止
実際そうなんだと思います。HTMLが使えること自体が歯がゆい感じです。
メールでHTML可能なメリットって何があるんでしょうね。。。
私の聞いたことのあるトラブルとしては、普段からやりとりしている顧客先からのメールが
その時だけたまたまHTML設定(おそらくoutlook・・)になっていて弾かれていた、というものがありました。
>>72
段階的にフィルタリングするという発想ですね。
SpamAssassinのことはあまり知らなかったのですが、最終的なスコアで判定するんですね。
私は段階的にフィルタリングするほうが良いような気がします。
>オートホワイトリスト
段階的にフィルタリングするのですから信頼性の高いものは最初のほうのフィルタで
humにしてやったほうがよいと思いますが、それが終わったあとに>>70のようなのを入れてみたいと
思うのですがどうでしょうか
0074 ◆mR2RlX5cuk
2007/01/11(木) 16:32:20http://www.iajapan.org/anti_spam/event/2005/conf0510/program.html
0075 ◆mR2RlX5cuk
2007/01/15(月) 13:54:59振り分けるというやりかたを思い付いたのですが、これもすでにあるんでしょうか。
特徴的でない単語を確率値をみて3つに別けると、spam確率が低めの単語の数が
多いものはやはりhumであることが多いようです。
実際にどれくらい有効なのか試してみます
0076デフォルトの名無しさん
2007/01/16(火) 05:57:34送る方もフィルタの抜け方研究してるんだろうな
0077デフォルトの名無しさん
2007/01/16(火) 08:58:28やっぱり限界があるな。
0078デフォルトの名無しさん
2007/01/17(水) 12:28:060079 ◆mR2RlX5cuk
2007/01/19(金) 00:57:23[spam]と記述するようになってる、、のだと思います。
今回試してみたのが特徴的な単語($F<0.1,$F>0.9)をどれだけ含んでいるのか
ということなのですが、普段受け取っているメールに近いものは特徴的な単語をかなり多く
含んでいるので、単純にこの頻度で閾値を設定するだけで今までフィルタリングをすり抜けていた分をグレーゾーンに
もっていくことができそうです。(もちろん今までにないタイプのhumはグレーです)
ただもう少しテスト用のメールがほしいですが。。。
今回はhum20通、spam400通を学習して、画像spam250通でテストしました。
英語のhumは集めにくいです。
>>76
ぱっと見て、ここがspammerの工夫、と気づくような点はありましたでしょうか?
>>77
どうしてもコンテンツフィルタに限界はありますね。。。
ただ画像spamもそうですが、対応しなければいけないメールは次々でてくるので
それに対処はしていこうと思うのです。
根本的にspamをなくすにはやはりネットワークの部分でしょうね・・・。
>>78
規制というか新しいルール作りに関しては良いとも悪いとも判断つきかねる感じです。
判断できないのは知識が足りないのも大きいですが・・・
0080デフォルトの名無しさん
2007/01/19(金) 02:42:51>規制というか新しいルール作りに関しては良いとも悪いとも判断つきかねる感じです。
おまえ日本語読解力全然だめだな
0081デフォルトの名無しさん
2007/01/19(金) 08:57:01spamassassinはルールファイルに従いスコアを算出して、それがある閾値(これも指定出来る)
を越えたら[spam]とフラグを立てることができます。
だからグレーという判断ではなく、スパムという判断です。
捨てるかどうかは、その後段のprocmailとかのフィルタで行います。
あと>>78のものは、動的IP(のような名前のところ)から出されたものをスパムとして一時拒否する
というものです。>>39で書かれていたRgreyでは一時拒否をgreylistingサーバへ回すことで
対応しているわけです。
ベイジアンフィルタで利用するには、このパターンにマッチしたものは動的IPのものとして
フラグを立てて、それを学習させると良いと思います。
0082デフォルトの名無しさん
2007/01/19(金) 09:27:33まりがとう
0083 ◆mR2RlX5cuk
2007/01/20(土) 02:22:21「メール中継サーバからのメールだけを受け取るというポリシー」
という部分が、それ以外からメールは送れないという暗黙のルールを強いることになると思ったのでそう表現したのですが、
そういうことでもないんでしょうか。。。
>>81
ありがとうございます。
はやくそういった基本的な話以外ができるようにします。
0084デフォルトの名無しさん
2007/01/20(土) 07:42:070085デフォルトの名無しさん
2007/01/20(土) 14:18:37というか、>>29でS25Rについて返答してるやん。
0086デフォルトの名無しさん
2007/01/20(土) 14:36:170087 ◆mR2RlX5cuk
2007/01/21(日) 22:29:26主張をころころ変えると信頼もなくしますし、ダメダメですね・・・
人に説明できるようになるのが一番良い方法かな、と思うのですが
これを説明してみろっとか、この手法がわからないとかがあったらお願いします。調べた結果を書いてみます。
0088 ◆mR2RlX5cuk
2007/01/21(日) 22:44:50かなり分かり易いです!
一度みたことはあったのですが素通りしてました。
ありがとうございました。
0089デフォルトの名無しさん
2007/01/31(水) 03:15:07まだまだアルゴリズムの理解ができていませんが。
ところで、humではなくてhamだと思います>>1
0090デフォルトの名無しさん
2007/02/01(木) 20:52:43こわー
>>89
human mailでは?とりあえず本質とは関係ない。
0091デフォルトの名無しさん
2007/02/01(木) 23:56:09いや、humはおかしいだろ。
っつーかhuman mailってなんだよ。
span = アメリカの Hormel Foods 社が製造するブタ肉のランチョンミートの缶詰
ham = 豚のもも肉/ハム
hum = 鼻歌
英国 BBC が放映したコメディー番組「モンティ・パイソン」(Monty Python's Flying Circus)のコントで、
ある夫婦がレストランに入ったところ、ほかの客が "Spam! Spam! Spam!" と大声で何度も繰り返し、
スパム入り料理を注文せざるを得なくなった。そのしつこいスパム攻撃のイメージから。
おまえ>>1だろ
0092デフォルトの名無しさん
2007/02/01(木) 23:56:440093デフォルトの名無しさん
2007/02/02(金) 01:54:10human
の
人気
に
shit
>>90はスパムメールです
0094 ◆mR2RlX5cuk
2007/02/03(土) 00:14:15語源はわからないです。spamは諸説あるみたいですが。
>>90
なのでホワイトリスト併用が必須です。
0095デフォルトの名無しさん
2007/02/03(土) 12:11:320097デフォルトの名無しさん
2007/02/04(日) 22:37:12スレの本質とはずれるが誤解っていうレベルじゃないだろ.
人としてどうかとおもうぞ.
0098 ◆mR2RlX5cuk
2007/02/17(土) 23:02:50text/**の**の部分(副題?)がないと取得してくれないとかいろいろ問題が発生しました.
spamassassinもHTMLParser使ってますね.
あと単語数が増え続ける辞書は自動削除が必要になってくると思うのですが、どういう風にすれば
よいでしょうか?案が浮かばないです。。。
0100デフォルトの名無しさん
2007/02/25(日) 22:06:06要望やら展望やら出してちゃんと要求をまとめようぜ。
いったほうがわかりやすいですかね?
0102デフォルトの名無しさん
2007/04/03(火) 09:20:040103デフォルトの名無しさん
2007/04/03(火) 09:52:46やる気なくしてるんなら、降参して消えてくれ。
0104デフォルトの名無しさん
2007/04/23(月) 18:09:13http://mixi.jp/view_bbs.pl?id=17607679&comm_id=1401396
Perlに関すること、cgiに関すること
なんでも質問できるコーナーです(たとえばApacheとかでもOKとします!)
(Web系であればOK)
ルール:
Google検索で調べてわかるようなことでも質問してもOKです
(初心者のうちは、どの情報を取捨選択したらイイのかわからないと思うので)
回答してくださるかたは、暖かく質問者を迎えてやってください
o(^^o) (o^^)o
0105デフォルトの名無しさん
2007/04/26(木) 19:30:52■ このスレッドは過去ログ倉庫に格納されています