中学生にもわかるかもしれないナイーブベイズ

 というわけでナイーブベイズのおさらいを,直感的な説明でしてみます.
厳密な説明は数多あるので,僕の出番はございません.
間違い等沢山あると思いますので,気づいた方はご一報をお願いします.


 ナイーブベイズは,データを分類します.が,今回はテキストを分類する文脈です.
たとえば,今受け取ったメールがスパムメールか,スパムじゃないかを判定(分類)するようなタスクを考えて下さい.
なんだか勘違いが多い気がしますが,ナイーブベイズは2種類に分けるだけじゃなくて,もっと沢山の種類にも分けられます.
スパムメール,彼女からのメール,お仕事のメール,とても人には言えない趣味のメールの4つに分類することも可能です.
ですが単純のため,以下では2種類に分けたい場合のみに焦点を絞りますね.


 分類しますといっても,何も情報が無いのに分類はできません.
そこで,ナイーブベイズでは,あらかじめ分類されたテキストをたくさん用意し,その中の単語を手がかりとして使います.
このような手がかりに使うものを学習用データだとか,学習用コーパスだとか言うのですが,
そんなわけの分からない言葉は使わず,手がかりデータと言っておきましょう.


 基本的なアイデアは簡単.
今,新しいメールが届きました.中身はこんな感じ.

"何時だと思っているの.早く帰ってきなさい.ママより."


コンピュータさんはアホなので,これが大事なメールなのか(スパムじゃない),どうでもいいメールなのか(スパム)分かりません.
そこで手がかりを使います.


スパムであるという手がかり  : "あの有名出会い系サイトが帰ってきた!"
スパムじゃないという手がかり : "今日は早く帰ってくるのよ.ママより"


なんだかスパムじゃない方の手がかりに文章が似ていますね.
コンピュータさんはこう考えます.
「"早く","ママより"という2つの言葉が,新しいメールと,スパムじゃない方の手がかりの両方にあるぞ.
けれど新しいメールと,スパムであるという手がかりに共通な言葉は,"帰って"という1つしかない.
ということは新しいメールが,スパムじゃないって方がそれっぽいな!」


という具合です.なんとなくイメージはつかめますか?本当はもう少し複雑ですが,それはおいおい説明します.




 それでは具体的な説明に移りましょう.
今回は手がかりデータとして,スパムメールがたっぷり入ったフォルダと,そうじゃないメールがたっぷり入ったフォルダを用意します.


 さて,手がかりデータの中身をちょっと考えてみましょう.
テキスト,つまり文章なので,単語の数と語彙(ごい)の数を数えることができますね.
語彙っていうのは単語の種類です.違う種類の単語がどれくらいあるかなということです.
たとえば,

"Lack of money is the root of all evil"

という文では,単語数が9個ですけど,語彙の数は8個ですね.ofが2回出てますね.


 では,先ほど用意した,スパムメールがたっぷり入ったフォルダの中にあるテキストについて,
単語の数を数えてみましょう.それから,語彙の数も数えてみましょう.
同じことを,スパムじゃないフォルダの中身についてもやりましょう.


 スパムフォルダ   : 単語の数がn1,語彙の数がv1
 そうじゃないフォルダ: 単語の数がn2, 語彙の数がv2



 次に,単語の確率というのを考えます.何でもいいので一つの単語について考えてください.
たとえばLoveという単語にしましょう.それでは,スパムフォルダの中で,Loveは何回使われているかを数えて下さい.
ここで,4回使われていたとしましょう.スパムフォルダにある全部の単語の数はn1個で,その中の4つがLoveだから,

「スパムフォルダでは,Loveの確率は4÷n1である」


と言えるでしょう.これをSPAM(Love)とでも書いておきましょう.
同様に,そうじゃないフォルダでは,Loveが2回使われていたとすると,


「そうじゃないフォルダでは,Loveの確率は2÷n2である」


といえますね.これはxSPAM(Love)とでも書きますか.
この確率というのを使って,「っぽさ」を計算するのがナイーブベイズです.



 この辺りで,もうあなたは手がかりマスターです.手がかりについてはとても詳しいので,
それを使って新しいメールを分類してしまいましょう.とにかくやってみましょう.
さて,新しいメールとして,こんなメールがやってきました.

"This is a penguin" (これはペンギンです.)


それぞれの単語の確率を先ほどと同様に計算できると思います.つまり,
スパムフォルダでは,SPAM(This), SPAM(is), SPAM(a), SPAM(penguin)が計算できるし,
そうじゃないフォルダでは,xSPAM(This), xSPAM(is), xSPAM(a), xSPAM(penguin)が計算できますね.


 次に,それっぽさの計算です.
スパムフォルダでのそれぞれの単語の確率を掛け算します.それとは別に,そうじゃないフォルダでの単語も掛け算します.
どちらの結果が大きな数字になりましたか?


 そうです.大きな数字の方が,「それっぽい」方,つまり分類されるべきフォルダなのです.


 と,言いたいところですがもうひとつやらなければいけないことが.
毎日毎日スパムに悩まされているので,スパムフォルダにはすごく沢山メールがあるんだけれど,
友達が少ないのでスパムじゃないフォルダにはほとんどメールが無いような場合を考えてみて下さい.
 スパムフォルダには沢山のメールがあるのだから,当然沢山の単語が詰まっているわけです.
一方スパムじゃないフォルダはちょっとしか単語が入っていない.
そうすると,n1がn2よりもずっと大きくなってしまいますね.これは何だか不公平です.是正しましょう.


 そのため,内容には関係なく,メールが着たらそれがスパムである確率を考えることにします.この計算は簡単で,


メールがスパムである確率 : n1 ÷ (n1 + n2)
メールがスパムじゃない確率: n2 ÷ (n1 + n2)


つまり,スパムフォルダの中にある全部の単語と,そうじゃないフォルダの中にある全部の単語がどれくらいの比率に
なっているかを考えてあげるのです.
そして,先ほど掛け算で計算したスパムフォルダっぽさの確率に,メールがスパムである確率,
そうじゃないフォルダっぽさの確率に,メールがスパムじゃない確率をそれぞれかけてやって,比べてみます.


 そうすると,不公平の無い,清く正しいナイーブベイズの出来上がりです.


 何だか色々なところをざっくりとやってしまいましたが,こんな風にナイーブベイズは計算していますよ,と.


 図とか入れて,本腰入れてで分かりやすくしようかなとも思ったのですが,
何だか当初の予定から大幅に軌道がそれてきているので,やめます.でもその内そういうことやりたいなぁ.



 というわけで,次回はスムージングとかの話でもしましょうか.