ベイジアンフィルターによるユーザー投稿フィルタリングエンジンishigroid
DESCRIPTION
サイバーエージェント様との勉強会の発表資料です。TRANSCRIPT
ベイジアンフィルターによるユーザー投稿フィルタリングエンジン Ishigroid
Kラボラトリー、研究開発部高田敦史
投稿フィルタリングの必要
EMA 認定がなければフィルタリング 「事業者は、ユーザー(会員・非会員)による投稿等サイト内
で公開される情報について、常時、目視・システム抽出確認等を実施し、規約違反投稿等について必要な対応(削除、注意・警告、経過確認等)を行わなければならない。また、ユーザー(会員・非会員)による問合せ・通報についての対応も常時、実施しなければならない。」コミュニティ運用管理体制認定基準
投稿監視 「 ユーザー(会員・非会員)による投稿等サイト内で
公開される情報について、常時、目視・システム抽出確認等を実施し、規約違反投稿等について必要な対応(削除、注意・警告、経過確認等)を行わなければならない」
コスト大!
ベイジアンフィルター簡単にいうと、単語の使用頻度で推定するメールフィルター
主に spamメールフィルターとして使われます
機械学習の分野では「ナイーブベイズ (単純ベイズ分類器 )」
EMAに抵触しそうな書き込みを自動抽出できないか?
bsfilter
Ruby によるベイジアンフィルターの実装 Paul Graham 方式、 Gary Robinson 方式、 Gary
Robinson-Fisher 方式をサポート 日本語のトークン抽出も、 bigram / mecab など
種々の方法を選択できる http://bsfilter.org/
コマンドラインから実行
Ruby Classifier
Ruby による単純ベイズ分類器の実装 http://rubyforge.org/projects/classifier
Ishigroid
自作ライブラリを実装 ベイジアンフィルターの仕組み自体はそれほど大き
なものではなく、数十~数百行のコード 日本語形態素解析には MeCab を使用
http://mecab.sourceforge.net/
ベイズの定理
Aという条件下で Bの確率 ものすごく単純に言うと、 P(A)の影響を受けないように、 P(A)で割ります
例 “hoge” を含む文書が NG である確率
NG ポストが hoge を含む確率
任意のポストが hoge を含む確率
NG ポストが hoge を含む確率 = NG ポスト中の hoge の数 / NG ポストの単語数合計
任意のポストが hoge を含む確率 = ポスト中の hoge の数 / ポストの単語数合計
結合確率
単語出現の独立を仮定 スパムである確率 1/2 を仮定
出現頻度を考慮
s: ポストが NGであるという期待に与える強さ n: 単語Wの出現頻度 n が大きくなればなるほど s の影響は小さくなる
フィッシャー方式
単語出現の確率分布を仮定
結果 success: 4413 / 5134
85.956369302688% negative(ok): 2446 / 2970
82.3569023569024% positive(ng): 1967 / 2164
90.8964879852126%
インターフェース http インターフェース (REST) を実装 Webrick
デモ
応用単純ベイズ分類器による文書の分類は、簡単で計算量も少ないのに高性能
コピペでもできるいろんな文書の分類に応用
自動カテゴリ分類? ログ解析? etc.
資料 スパムへの対策 ---A Plan for Spam
http://practical-scheme.net/trans/spam-j.html ベイジアンフィルタの改善 --- Better Bayesian Filtering
http://practical-scheme.net/trans/better-j.html ベイジアンフィルタ - Security Akademeia
http://akademeia.info/index.php?%A5%D9%A5%A4%A5%B8%A5%A2%A5%F3%A5%D5%A5%A3%A5%EB%A5%BF
Bayesian spam filtering http://en.wikipedia.org/wiki/Bayesian_spam_filtering
Spam Detection http://radio.weblogs.com/0101454/stories/2002/09/16/spamDetection.html
Segaran, 『集合知プログラミング』オライリー ,2008