bobuhiro11's diary

ナイーブベイズでネガポジ判定をする.

30 Oct 2012
[ナイーブ] [ネガ] [ベイズ] [ポジ] [判定]
2週間前ぶりの更新です.ナイーブベイズについて,メモっておきます. ナイーブベイズ分類器は,教師付きの学習をさせ,ベイズの定理を使って文章などを分類するものです.多変数ベルヌーイモデルと,多項モデルの2つがありますが,テキスト分類では多項モデルのほうが精度がいいみたいなので,多項モデルを使うことにします.ここでは,8つのツイートを学習の元にして,あるツイートがネガティブなものかどうかを判定するサンプルを書いておきます. 始めに学習用として,適当なツイートを取ってきて,自力でネガポジの判定をしておきます.
ポジ:twitterは良いものです.
ポジ:twitter最高やん.
ポジ:facebookも悪くはない.
ポジ:facebookは最高に良い.

ネガ:twitterは最高ではない.
ネガ:twitterは悪いのだ.
ネガ:facebookは良くない.
ネガ:facebookはもうダメだ.
そして,形態素解析をして,整理します.
ポジ:twitter 良い
ポジ:twitter 最高
ポジ:facebook 悪い ない
ポジ:facebook 最高 良い

ネガ:twitter 最高 ない
ネガ:twitter 悪い
ネガ:facebook 良い ない
ネガ:facebook ダメ
次にポジティブなツイート数(Np),ネガティブなツイート数(Nn)を数えます. また,ポジティブの中に含まれる単語の数(Nword,p)を全単語について数えます.ネガティブも同様に数えます.
Np= 4                   Nn = 4
Ntwitter,p = 2          Ntwitter,n = 2
Nfacebook,p= 2          Nfacebook,n= 2
N最高,p    = 2          N最高,n    = 1
N良い,p    = 2          N良い,n    = 1
N悪い,p    = 1          N悪い,n    = 1
Nない,p    = 1          Nない,n    = 2
Nダメ,p    = 0          Nダメ,n    = 1
そして,ポジティブな確率(Pp),ネガティブな確率(Pn),ポジティブという条件のもとでwordを含む確率(qword,p),ネガティブという条件のもとでwordを含む確率(qword,n)を求めます.(ホントはもっと複雑です.)
Pp = Np / (Np + Nn) = 4/(4+4) = 0.50
Pn = Nn / (Np + Nn) = 4/(4+4) = 0.50
qtwitter,p 
= Ntwitter,p / (Ntwitter,p + Nfacebook,p + N最高,p +N良い,p + N悪い,p + Nない,p + Nダメ,p )
= 2/10 = 0.20
qtwitter,n 
= Ntwitter,n / (Ntwitter,n + Nfacebook,n + N最高,n +N良い,n + N悪い,n + Nない,n + Nダメ,n )
= 2/10 = 0.20
おんなじように,全単語について求めます.
qfacebook,p= 0.20        qfacebook,n = 0.20
q最高,p    = 0.20         q最高,n     = 0.10
q良い,p    = 0.20         q良い,n     = 0.10
q悪い,p    = 0.10         q悪い,n     = 0.10
qない,p    = 0.10         qない,n     = 0.20
qダメ,p    = 0.00         qダメ,n     = 0.10
これで学習段階は終了です.ここでは例えば以下のようなツイートがネガティブなツイートかポジティブなツイートか判定してみます.
facebookもtwitterも悪くない.最高に良い.
Pp * Pd|p 
∝ qp * qtwitter,p * qfacebook,p * q悪い,p * qない,p * q最高,p * q良い,p 
= 0.50 * 0.20 * 0.20 * 0.10 * 0.10 * 0.20 * 0.20
= 8.0 × 10-6

Pn * Pd|n 
∝ qn * qtwitter,n * qfacebook,n * q悪い,n * qない,n * q最高,n * q良い,n 
= 0.50 * 0.20 * 0.20 * 0.10 * 0.20 * 0.10 * 0.10
= 4.0 × 10-6
この結果から
facebookもtwitterも悪くない.最高に良い.
というツイートはポジティブなツイートであることがわかります. ただ,変なこと書いているかも知れません.間違ってれば,教えてくれると嬉しいです. 参考 : 言語処理のための機械学習入門 (自然言語処理シリーズ) [単行本]

comments powered by Disqus < apacheに不正アクセス? 卒研中間発表 >