
ベイズの定理を用いて方言を分類してみた
初めまして、Aidemy研修生の尾熊です。 突然ですが、皆さんも大学や就職で自分の地元以外の人と会話をしたとき自分は普通だと思っていたのに方言だったー!!なんてことはありませんか??
今回は方言をベイズの定理を用いて方言を分類してみたいと思います。
目次[非表示]
環境
- Anaconda 1.6.14 環境開発に使います
- Jupyter 5.4.0 プログラムを実行できます、実行結果が分かりやすいです。
- Tokenizer 形態素解析に使用します。
ベイズの定理の説明
『条件付き確率』に関して成り立つ定理でP(A) > 0 のとき次の式が成り立ちます。P(B|A)=P(A|B)P(B)/P(A)
P(A)とは、Aが起こる確率 P(B)とは、事象 A が起きる前の、事象 B の確率 P(B|A)とは事象 A が起きた後での、事象 B の確率 式で書かれただけでは意味が分かりづらいのですね・・そこで例をひとつ示します A(P)を雨が降る確率だとし、B(P)を友達が約束の時間に遅れる確率とすると P(B|A)は雨が降っていた時に友達が約束の時間に遅れる確率となります。ナイーブベイズ分類
ベイズの定理では、Aを入力文章とすると、Bはどこの方言であるかということになります。 ナイーブベイズ分類では、ある文章を方言ごとに分けるのに、文章中の単語の出現率を調べます。
ナイーブベイズ分類は全ての方言の確率を計算し、その中で一番確率の高い方言を結果として出力します。 そのためとてもシンプルな分類です。 しかし、少ないトレーニングデータでも正しい結果が出る。重要でない特徴量の影響を受けにくいなどの特徴があるので今回の分類に使用します。
形態素分析
さて、長かった前置きが終わりました、これから実際に文章を分解し解析をするコードを示します。 まずは形態素解析に必要なTokenizerをインストールしておきます。方言を分類する
方言を分類するために単語をスコア化し方言ごとに分ける。方言ごとのスコアを計算した時に、確率を掛け合わせ続けると値が小さくなりすぎる可能性があります。 なので、log関数を使用して対数を求めています。
学習
ベイジアンフィルタは機械学習の教師あり学習になるため最初にいくつかの文章を学習させる必要があります。 今回は広島弁、大阪弁、博多弁、沖縄弁、北海道弁の5つに分類できるようにしました。 一つの方言につき20個の例文を学習させています。実行結果
学習には使用していない文章を使ってどの方言か分類できているか検証してみます。 文章は大阪弁を使っているので、結果に大阪弁が表示されると正解になります。出力結果の解説をすると 左が方言名で、右の数字が単語の出現率となっています。出現率はマイナスなので、値が小さいほど出現率は高くなります。 今回は大阪弁の出現率が一番高いので、ちゃんと大阪弁に分類されていますね‼︎ 他の方言でも試してみましたが、分類できました。
まとめ
最初はMLP(多層パーセプトロン)で分類をしようと思っていたのですが、方言で書かれた文章は以外に少なく断念しました。 良く考えると方言で話すことはあっても、文章を書くことは少ないのでデータが少なかったのかなと思いました。
学習させる文章を変えると分類に成功する確率が変わってきて面白かったです。 簡単に実装できるので興味が湧いた方はぜひやってみてください
参考文献
books.google.co.jp
PythonやAIプログラミングを学ぶなら、オンライン制スクールのアイデミープレミアムプラン。
「機械学習・ディープラーニングに興味がある」
「AIをどのように活用するのだろう?」
「文系の私でもプログラミング学習を続けられるだろうか?」
少しでも気になることがございましたら、ぜひお気軽にAidemy Premium Planの無料相談会にお越しいただき、お悩みをお聞かせください!
このほかにも、Aidemy MagazineとTwitter(@AidemyMagazine)ではたくさんのAI活用事例をご紹介しています。どちらも要チェック!