Rest Term

AS3でNaive Bayesによる文書分類

Pocket

自然言語処理は専門外なんですが、職種的(?にこの分野に精通している人がたくさん社内にいるので僕も少し影響を受け始めています。。

今回は単純ベイズ分類器(Naive Bayes:ナイーブベイズ)による文書分類を基礎の部分だけやってみます。単純(Naive)と呼ばれているのは、文書の出現確率を単語の出現確率の"積"で近似し、語順や単語間の相関関係を考慮しないためにそう呼ばれています。ベイズ理論については書籍がたくさん出ているのでそちらを参考にしてください。ここで説明するにはとても大変なので(というより正しく説明できる自信がない)。この理論の実社会における適用分野としてはスパムフィルタなどが有名です。

ナイーブベイズは他の分類器と比べるとマシンリソースをあまり必要としないので、Flash(ActionScript)でもある程度の文書量までならPlayerがタイムアウトせずに学習/分類が可能です。ちなみにWeb上だとPythonでのサンプルが多く見つかりますが、確かにPythonなら実装が楽そうですね。

ここでは文書はBug-of-words(単語の集合)として扱い、良い文書(good)と悪い文書(bad)という2つのカテゴリーに分類します。また、良い文書が悪い文書に分類されるのを防ぐためにしきい値を設定しています。これは例えば、スパムメールがたまに受信フォルダに入り込むのは我慢できるけど、重要なメールがスパムメールと判定されるのは大変困ってしまいます。なので悪い文書に分類される確率が良い文書に分類される確率よりもしきい値以上高い場合にのみ悪い文書に分類し、しきい値以下の場合はunknownに分類するようにしています。

Naive Bayes Classifier - wonderfl build flash online

補足)
'HTML5' と 'Flash' という2つの単語を含む文書は悪い文書(bad)である確率が高いが、しきい値(悪い文書である確率が良い文書である確率の3.0倍)以下なため分類は保留。再度学習を重ねてから再試行すると、良い文書である確率が下がってしきい値を超えるため悪い文書に分類される。

* GitHub
naive_bayes at master from wellflat/aslib - GitHub

* 分類テスト

* Naive Bayesクラス (ベースとしてClassfierクラスを作成)

ナイーブベイズ以外の分類器も後で追加しやすいようにクラスを分けて書いたのですが、AS3のDictionaryクラスが使いづらいので複雑になってしまいました。画像処理だと便利に使えるAS3ですが、描画系以外だとクラスライブラリやデータ構造が貧弱なのでやはり不利です。

このベイズ理論ですが、いきなりこれを勉強しても難しいと思うので、条件付き確率などの確率統計の基礎を固めてから勉強することを強くオススメします。僕は学部時代の教科書をひっぱりだして復習から始めましたがやっぱり難しいです。。この理論は確率的画像処理にも応用されているので、もう少し勉強してからチャレンジしてみたいと思います。

* 参考
入門ベイズ統計―意思決定の理論と発展
集合知プログラミング

あわせて読む:

Pocket

 

Tags: ,

Comments

No comments so far.

  • Leave a Reply
     
    Your gravatar
    Your Name