こんにちは、AI研究所の見習い研究員マサミです。
今回は、ベイズ統計を用いた機械学習の手法であるナイーブベイズを使って確定申告のFAQシステムを作ってみたいと思います。
ベイズの定理とは?
まずは、ベイズの定理について解説します。
ベイズの定理は、トーマス・ベイズによって示された、条件付き確率に関して成り立つ定理です。
式で表すと以下のようになります。
式だけでは分かりづらいと思いますので、よくベイズの定理を解説する際に使用される病気の罹患率の問題で解説していきます。
・ある病気の罹患率を0.1%とします。(事前確率)
・この病気に罹患しているかどうかを検査する方法Xがある。
・検査Xは、罹患している人は95%の確率で陽性と診断される。
・検査Xは、健康な人が2%の確率で陽性と誤診される。
以上のような条件でこの検査で陽性と診断された時、病気に罹患してる確率をベイズ定理を使って計算してみると、
のようになります。
続いて、以下のような条件のもと再検査を行います。(ここからがベイズの定理の面白いところになります。)
・先ほどの結果で陽性反応が出た(事前確率4.5%)。
・この病気に罹患しているかどうかを検査する方法Yがある。
・検査Yは、罹患している人は80%の確率で陽性と診断される。
・検査Yは、健康な人が10%の確率で陽性と誤診される。
この検査で陽性と診断された時、病気に罹患してる確率を同じようにベイズの定理を使って計算してみると
のようになり、2回目の検査でも陽性が出た場合、今度は無視出来ないくらいに大きな確率になったことがわかります。
複数回の検査で繰り返し陽性が出た場合、検査の精度がどんな悪いものでも、最終的に確率が100%に収束する事が証明されています。
つまり、ベイズの定理では、複数回検査を行うことで精度を高めることができるということがいえます。
ナイーブベイズ分類を利用したスパムメール判定の仕組み
ナイーブベイズ分類は、上記のベイズの定理を利用した分類手法の一つです。
ベイズの定理では、(A)の後で(B)が起きる確率を求めることができました。
これを利用し分類を行います。
例えばメールスパムの判定(分類)であれば、メール(A)が来た時にそのメールがスパム(B)であるかの確率を計算し分類します。
ナイーブベイズ分類を使ってメールスパム判定をする場合は、メール内の単語の出現頻度をもとに分類します。
簡単な例を使ってナイーブベイズ分類を利用したスパムメール判定の仕組みについて説明していきます。
今回は以下のようなメールの件名を学習させてみたいと思います。
[訓練データ]
・これは迷惑メール(これ, 迷惑, メール):スパムメール
・これは業務メール(これ, 業務, メール):ハムメール
・AIメール(AI, メール):ハムメール
・お買い得メール(お買い得, メール):スパムメール
・人工知能メール(人工知能, メール):ハムメール
※ ハムメールとはスパムメールの反対です。
まずは、訓練データを単語に分割しそれぞれの単語にIDを振り分けます。
このような処理を「BoW(bag-of-words)」と呼びます。
[Bag-of-words]
・これ→word_1
・迷惑→word_2
・メール→word_3
・業務→word_4
・AI→word_5
・お買い得→word_6
・人工知能→word_7
次にそれぞれの分類(スパムorハム)の単語数をカウントします。
これが
[単語数]
・スパムメール:5個
・ハムメール:7個
以上の訓練データをもとに新たにメールが来た時にメールスパムの判定を行います。
例えば、「AI業務メール」という件名のメールが送られてきた場合、同じようにBoWをします。
[Bag-of-words]
・メール→word_3
・業務→word_4
・AI→word_5
そして、ナイーブベイズ分類の式に当てはめます。
事後確率 = (クラスの総数/訓練データの層数) * (クラスにWord_iが出てきた回数/クラスの総単語数)
スパムの事後確率 ∝ (2/5) * (2/5 * 0/5 * 0/5) = 0%
ハムの事後確率 ∝ (3/5) * (3/7 * 1/7 * 1/7) ≒ 0.52478%
よって、「AI業務メール」はハムメールと分類することができました。
ナイーブベイズを利用した自動FAQシステムの構築
それでは、上記を踏まえた上でもう少し実践的なシステムを作ってみます。
国税庁のホームページにある「確定申告期に多いお問合せ事項Q&A」を抜粋・編集しナイーブベイズを使って学習させ、自動FAQシステムを作ってみたいと思います。
利用した訓練データはこちらにアップしておきました。
先ほどと同じように、テキストを単語に分けカウントします。
単語に分ける方法は、以前の記事「形態素解析をして日本語の文章を単語区切りにする方法」を参照してください。
新たに質問がきた時に訓練データをもとにきちんと分類できるか試してみます。
以下のような質問を入力したところ
「確定申告の期限はいつからいつまでですか?」
「確定申告のやり方がわかりません」
「還付金がいくら戻ってくるか知りたいです」
どれもきちんと正しく分類してくれました。
ナイーブベイズは教師あり学習のアルゴリズムの中で最も基本的なもので、様々なケースでオールマイティに活躍出来るロバストなアルゴリズムと言われています。
最近注目を浴びているニューラルネットワークよりも一般的には性能は劣ることが多いですが、単純なアルゴリズムなので計算時間が早く、どういう規則が出来たのかが理解しやすいという利点もあります。
興味ある方は是非試してみてください!
AI入門ブログの中の人
AI研究所 研究スタッフ
通称:マサミ
アメリカ・サンフランシスコにある情報メディアの専門学校を卒業。大手金融会社での事務経験を経て、2016年9月よりAI研究所に入所。見習い研究員として、AI技術を日々勉強中。
最新記事

2018.12.14 AI(人工知能)の作り方
Pythonを学ぶにはこの書籍10選

2018.11.27 AI(人工知能)の豆知識
AI(人工知能)同士は会話できるのか!?

2018.11.22 AI(人工知能)のイベント
AIを理解する最短コースを探せ!AI研究所セミナーの内容を紐解く

2018.11.08 AI(人工知能)の作り方
AIが抜けのある画像を自動補完?!SIGGRAPH論文の画像補完プログラムをやってみた

2018.11.07 AI(人工知能)のイベント
[アンケート結果]AIセミナーのアンケート結果

2018.11.05 その他