Upload
azusa-onishi
View
2.112
Download
1
Embed Size (px)
DESCRIPTION
2009/11/20に開催された(Perl) Casual-Talk #1の発表資料です。Algorithm::NaiveBayesを使ったベイジアンフィルタの実装についてお話しました。
Citation preview
青虫の生態について大西 梓(aomushi510)
2009年11月24日火曜日
aomushiの生態• 五反田系perl女子
• 監視ツール開発チーム
• casual-perlのIRCに入って、声をかけて頂きました
2009年11月24日火曜日
aomushiの生態
• 思いがけずJPAの会報誌に><
2009年11月24日火曜日
最近はまっていること
• Algorithm::NaiveBayesを使って投稿内容をOK/NGとカテゴライズすること
2009年11月24日火曜日
Algorithm::NaiveBayes• http://search.cpan.org/~kwilliams/Algorithm-NaiveBayes-0.04/lib/Algorithm/NaiveBayes.pm
• ベイズ理論を使ったカテゴライズのモジュール
• AI::Categorizerとか、Lingua::JA::Categorizeで使われて
2009年11月24日火曜日
ベイジアンフィルタ
分かち書き 学習
分かち書き 判定
2009年11月24日火曜日
分かち書き
• まずMecabで分かち書きをする
aomushiは発表で緊張しているのでプリンが食べたくなった。
2009年11月24日火曜日
分かち書き
• まずMecabで分かち書きをする
aomushiは発表で緊張しているのでプリンが食べたくなった。aomushi 名詞,固有名詞,組織,*,*,*,*
は 助詞,係助詞,*,*,*,*,は,ハ,ワ,,
発表 名詞,サ変接続,*,*,*,*,発表,ハッピョウ,
ハッピョー,,
で 助詞,格助詞,一般,*,*,*,で,デ,デ,,
緊張 名詞,サ変接続,*,*,*,*,緊張,キンチョウ,キンチョー,,
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ,,
て 助詞,接続助詞,*,*,*,*,て,テ,テ,,
2009年11月24日火曜日
分かち書き
• NaiveBayesは分かち書きをしたトークン数の比率を取る
• ノイズを除くため名詞だけ抽出
aomushiは発表で緊張しているのでプリンが食べたくなった。aomushi 名詞,固有名詞,組織,*,*,*,*
発表 名詞,サ変接続,*,*,*,*,発表,ハッピョウ,
緊張 名詞,サ変接続,*,*,*,*,緊張,キンチョウ,キンチョー,,
プリン 名詞,一般,*,*,*,*,プリン,プリン,プリン,,
2009年11月24日火曜日
分かち書き 28 for (my $node = $self->mecab->parse($text); $node; $node = $node->next) { 29 my $info = $node->feature; 30 my $word = $node->surface; 31 next unless $info; 32 if ( $info =~ /^名詞/ ) {
33 next 34 if $info =~ /数|非自立|語幹|代名詞|接尾|副詞可能/;
35 next if List::MoreUtils::any { $word eq $_ } @{ $self->_skip_word }; 36 $data->{$word}++; 37 } 38 } 39 return $data;
2009年11月24日火曜日
mecabの辞書• naist-dicとwikipedia
• deepnekoさんの記事を参考にさせて頂きました
• http://deepneko.dyndns.org/kokotech/2009/06/mecabwikipedia.html
• オリジナルNGワードも辞書に追加
2009年11月24日火曜日
学習• 学習ワード数
• NGワードを最初に学習する
• OKとNGを同じくらいの比率で学習すると良い
• それぞれ10000語くらい学習してみた
2009年11月24日火曜日
学習 59 while ( my ( $label, $ref ) = each %$categories ) { 60 my $words = $self->_get_words($ref->{display}); 61 foreach (@$words) { 62 my $tokenizer = MyFilter::Util::Tokenizer->new; 63 my $word_set = $tokenizer->tokenize(\$_, $self->threshold); 64 65 $brain->add_instance( 66 attributes => $word_set, 67 label => $label, 68 ); 69 } 70 $brain->train; 71 } 72 $brain->save_state($save_file) if $save_file;
2009年11月24日火曜日
判定
31 sub categorize { 32 my ($self, $word_set) = @_; 33 34 return $self->brain->predict( attributes => $word_set ); 35 }
2009年11月24日火曜日
判定
• badの確率が閾値を越えた場合、非表示とみなす
「今日はこんなに働くつもりじゃなかったのに。働くほどに時間単価が下がるとかクソくらえだよ」$result = { good => 0.092, bad => 0.996,};
2009年11月24日火曜日
問題点• 隠語に絵文字が入っているとうまく分かち書きができない
• つのだ☆ひろパターン
• ao★shiパターン
• 監視基準が難しい案件は文脈判定が難しい
2009年11月24日火曜日
一旦完成したので
• データがほしい・・・・><
2009年11月24日火曜日
そして
• 今日の参加者のみなさんのこともっと知りたい・・・><
2009年11月24日火曜日
てか
• 欲から入るプログラミングもありだと思うし
2009年11月24日火曜日
というわけで
2009年11月24日火曜日
P-1
2009年11月24日火曜日
P-1グランプリ ルール説明
• ついったーの過去200投稿のうち、NGとひっかかった(ぴー!の)投稿数を競います!
• 一番のかたには「セクシープレゼント」がっ☆
2009年11月24日火曜日
第3位
2009年11月24日火曜日
第3位
ぴー!
2009年11月24日火曜日
第2位
2009年11月24日火曜日
第2位
ぴー
2009年11月24日火曜日
第1位
2009年11月24日火曜日
第1位
ぴー
2009年11月24日火曜日
まとめ
• ベイジアンフィルタ
• Algorithm::NaiveBayes使うと簡単
• mecab辞書に工夫
• yusukebeさんはすごい
2009年11月24日火曜日
ありがとうございました☆
2009年11月24日火曜日
参考にさせて頂きました
• Algorithm::NaiveBayes
• http://search.cpan.org/~kwilliams/Algorithm-NaiveBayes-0.04/lib/Algorithm/NaiveBayes.pm
• mecab辞書にwikipediaのタイトル名を追加
• http://deepneko.dyndns.org/kokotech/2009/06/mecabwikipedia.html
• Lingua::JA::Categorize
• http://search.cpan.org/~miki/Lingua-JA-Categorize-0.01001/lib/Lingua/JA/Categorize.pm
2009年11月24日火曜日