ベイジアンフィルタ

ベイジアンフィルタ (Bayesian Filter) は単純ベイズ分類器を応用し、対象となるデータを解析・学習し分類する為のフィルタ。学習量が増えるとフィルタの分類精度が上昇するという特徴をもつ。個々の判定を間違えた場合には、ユーザが正しい内容に判定し直すことで再学習を行う。 現状ではスパムメール（いわゆる迷惑メール）を振り分ける機能を持つソフトウェア（フィルタリングソフト）で、スパムフィルターでのスパム判定に利用されることが多い。最近ではWeblogのトラックバック用フィルタ（トラックバックスパム対策）にも利用されるようになるなど、その利用範囲は徐々に広がりつつある。 ベイジアンフィルタでは、初期状態である程度までの振り分けができるように設定されている。振り分け対象となるデータ（迷惑メールなど）の学習量が増えると振り分ける精度（分類精度）が高くなるといった特徴を持つ。個々の判定を間違えた場合にはユーザが判定し直すことで再学習を行う必要があるが、振分け精度が上がると再学習の頻度は少なくなる。 従来型のキーワード指定によるフィルタとは異なり、対象データの内容をフィルタが学習して自動的に分類する為、ユーザーが煩雑なキーワード指定を行う必要が無い。そのため適切なキーワード指定ができない初心者に向いている。 また、個々の迷惑メールの内容が変化した場合にも統計的に解析するため、大量の迷惑メールを受信する場合などにも向いている。 補足用機能として、特定のキーワードやアドレスのメールはフィルタに優先して受け付けるなどの機能を有するものもある。 従来のフィルタリングソフト（あるいは電子メールクライアントに組み込まれたフィルタリング機能）では、受信を拒否するアドレスや、受信した電子メールに記載された題名や本文に含まれる特定の単語（例えば「広告」「SEX」「交際」などといったキーワード）を一つ一つ設定する必要があるため、使用するためには煩雑な初期設定（条件設定）が必要であった。また、登録したキーワードの一文字を伏字（例えば "s*x"）にしたようなケースではフィルターを潜り抜けてしまうなど、キーワードやメールアドレスが可変的に付けられている迷惑メールに対してはほとんど無力であった。 このような問題に対応するため、迷惑メールの特徴を確率統計的な手法を用いて分析し、分類に利用する方法として登場したのがベイジアンフィルタである。ベイジアンフィルタでは妙な伏字を多用したメールはスパムメールの顕著な特徴であるため、下手な工作はかえってベイジアンフィルタによって排除されやすくなる。 ベイジアンフィルタは2002年にポール・グレアムが発表した論文“A Plan for Spam”が元になって開発された。さらに改良されたアルゴリズムは“Better Bayesian Filtering”に発表されている。 ベイジアンフィルタの解析は、単語単位でその数値を計算する。そのため、フィルタでデータを解析する前に、対象となる文章を単語単位に分解しておく必要がある。英語を含む多くの言語では、単語は普通空白によってあらかじめわかち書きされるため、単語単位に分解し直す必要はない。しかし、日本語のように単語を区切るための印がない言語の場合、そのままフィルタで解析を行っても、適切な解析結果が得られない。したがって、日本語の文章を適切な形に分解してから、ベイジアンフィルタに解析させる必要がある。 このように、言語の種類によって単語単位に分解する方法が異なるため、分解する方法の違いによってフィルタ精度が変化してしまう。 このような問題に対応するため、日本語に対応するベイジアンフィルタでは、形態素解析などの自然言語処理が追加されていることがある。 もうひとつの問題として、日本語のメールにおける文字コードの問題もある。通常日本語でのメールであれば、ISO-2022-JP文字コードを使うのが一般的である。しかし、MIMEによる文字コード指定 (charset) が適切であれば、別の文字コードで送ることも原理上可能である。そのため、MIME charsetを見て、文字コードを認識しないといけない。 さらに、日本語のspam（迷惑メール）では、ベイジアンフィルタ等をすりぬけるためか、MIMEによるキャラクタセットと実際の文字コードをわざと違うものにする（MIMEではISO-2022-JPと指定しておきながら、実際はShiftJIS等）こともある。そのため、本文のコードから文字コードを推定することも求められてしまう。この問題は、メールの送受信を行うソフトウェアが文字コードに関して寛容になりすぎていることも原因の一端であろう。 POPFile Proxy型のベイジアンフィルタ。 Shuriken ジャストシステムの電子メールクライアント。ベイジアンフィルタの機能はShuriken Pro4/R.2より搭載。 Mozilla Application Suite ウェブブラウザ、電子メールクライアント機能などをもつ統合ソフト。 SeaMonkey Mozilla Application Suiteの後継ソフト。 Mozilla Thunderbird Mozillaの内蔵メール機能、およびスパムフィルタ機能を抜き出した単体電子メールクライアント。 Eudora 電子メールクライアント。学習型のスパムフィルタはバージョン6.2Jより搭載。 Becky!2（電子メールクライアント）専用のスパムフィルタ BkASPil for Becky!2 Becky! メールセキュリティ SpamSieve macOS用。 JunkMatcher macOSの電子メールクライアントメール用。 bsfilter Rubyで書かれたベイジアンフィルタ。 bogofilter SpamAssassin CRM114 SPAMBlock 設定によりベイジアンフィルタを有効にできる。 sbcayes メールフィルタリングツールscmailに同梱されている。 Web上に「ベイジアンフィルタを使っている」との情報があるが、メーカーサイトの公式情報にはその記述が無いもの Norton AntiSpam McAfee SpamKiller ^ a b c Russell Kay (2005年2月7日). “スパム対策に欠かせないベイズ理論とは？ (1/2)”. ITmediaエンタープライズ (ITmedia). http://www.itmedia.co.jp/enterprise/articles/0502/07/news069.html 2016年5月14日閲覧。  ^ (Graham 2002) ^ (グレアム 2005) ^ (Graham 2003a) ^ (グラハム 2003a) ^ 青木大我 (2004年4月13日). “米NAI、「McAfee SpamKiller」にベイジアンフィルタリングを採用”. INTERNET Watch (インプレス). http://internet.watch.impress.co.jp/cda/news/2004/04/13/2763.html 2016年5月14日閲覧。  Graham, Paul (August 2002) (英語), A Plan for Spam, http://www.paulgraham.com/spam.html 2016年5月14日閲覧。  ポール・グレアム; Shiro Kawai (2005年2月8日). “スパムへの対策 ---A Plan for Spam” (日本語). Practical Scheme. 2011年7月24日時点のオリジナルよりアーカイブ。2016年5月14日閲覧。 Graham, Paul (January 2003) (英語), Better Bayesian Filtering, http://www.paulgraham.com/better.html 2016年5月14日閲覧。  ポール・グレアム; Shiro Kawai (2003年8月15日). “ベイジアンフィルタの改善 --- Better Bayesian Filtering” (日本語). Practical Scheme. 2011年7月24日時点のオリジナルよりアーカイブ。2016年5月14日閲覧。 Graham, Paul (August 2003) (英語), Filters That Fight Back, http://www.paulgraham.com/ffb.html 2016年5月14日閲覧。  ポール・グレアム; Shiro Kawai (2003年8月11日). “反撃するフィルタ --- Filters That Fight Back” (日本語). 2011年10月18日時点のオリジナルよりアーカイブ。2016年5月14日閲覧。 Graham, Paul (May 2004), Hackers and Painters: Big Ideas from Computer Age, O'Reilly Media, ISBN 978-0-596-00662-4, http://shop.oreilly.com/product/9780596006624.do  Paul Graham 『ハッカーと画家 コンピュータ時代の創造者たち』 川合史朗 監訳、オーム社、2005年1月。ISBN 4-274-06597-9。 単純ベイズ分類器 電子メールフィルタリング ベイズ推定 ベイズの定理 各spamフィルタリングツールに対する評価・意見 スパム対策の基本技術解説：綱引きに蛇口当てゲーム？！ 楽しく学ぶベイズフィルターの仕組み (1/4)