もっとも身近なビッグ(?)データ
迷惑メールフィルタは非常に簡単な理論でできていて、いつの間にか利用している機械学習のよいサンプルです。迷惑メールフィルタといっても、携帯電話のキャリアが提供しているようなドメインを指定して受信するかどうかを決めるような、迷惑メールフィルタではありません。Gmailに付いている自動で振り分けをしてくれる迷惑メールフィルタです。
今回は、迷惑メールフィルタがどのように判別するのか、そして機械学習とどう関係しているのかを解説してみたいと思います。 実際にはパラメータの推定には最尤法を使っていたり、 今日話すことよりももっともっと複雑なことをしているはずですが、シンプルな最小構成での例として聞いていて下さい。
この原理を理解するにはベイズの定理というのがわかるとなおよいです。ベイズの定理については軽くだけ触れておきましょう。
ベイズの定理
非常に古くからある理論で、250年程前に発表されました。日本では「すずめの子 そこのけそこのけ お馬が通る」で有名な小林一茶が生まれたとされている年です。そんな頃に発表された理論がいまも現役で生きている、そんなにもシンプルな理論です。
Wikipediaによると、
P(B) = 事象Bが発生する確率(事前確率, prior probability) P(B|A) = 事象Aが起きた後での、事象Bの確率(事後確率,条件付き確率, posterior prob ability,conditional probability) とする。 ベイズの定理によれば、P(A) > 0 の条件の下、 p(B|A) = P(A|B) P(B) / P(A) が成り立つ
(出展:Wikipedia)
こんな数式で書かれてもよくわからないですね。
この定理で注目すべきは、「今あるデータでの統計からするにどうこう」ということではなく、「これまでの確率から言ってこれはこんな感じだろう」というような、人間の経験則に近いものを表しているところです。
迷惑メールフィルタへの適用
ベイズの定理を迷惑メールに当てはめてみると、このメールにはこんな単語が入ってるから多分迷惑メールだろうな。というような感じになります。
それを判断させるために、迷惑メールに含まれる単語と、迷惑メールじゃないメール(以下普通メールとします。)に含まれる単語がそれぞれ何回ずつ出てきたかなどを覚えさせます。ある程度のデータが溜まってくるとこの単語が含まれているのは迷惑メールだな、とか普通メールだなという判断が正確になってきます。なんだか人間と似ていますね。
迷惑メールをよく受信してしまう人は、なんとなく迷惑メールには「無料」とか「援助」ってコトバとか、他にもここには書けないような単語が入ってるんだろうなというのは想像できると思います。そのような単語が入っていたり、普段から仕事で使うような会社名や、「御見積」、と言ったような言葉が入っていたりする文章を総合的に判断して、これは迷惑メールだなとか、これは営業のメールだなという判断をしているはずです。