時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

自然言語のナイーブベイズ分類を考えてみた

こんにちは,今日もコロナ社から出版されている自然言語シリーズの自然言語のための機械学習入門を読んでみましたので簡単に内容をまとめたいと思います.

初めに

 
 分類問題は事前に定義されたグループに分類対象を振り分ける処理のことを言います.たとえば,迷惑メールのフィルタリングみたいなものです.迷惑メールの文章からどのような文章が迷惑メールなのかを学習し,迷惑メールかどうかの判断をします.この分類はいくつか提案されていますが,ここでは,ナイーブベイズ分類,SVMを用いたもの,対数線形モデルを用いたもののうちのナイーブベイズ分類について解説したいと思います.

ナイーブベイズ分類とは?

 ナイーブベイズ分類は文章の出現頻度をモデル化することによって分類を行います.ナイーブベイズのモデル化はベルヌーイ分布を用いたものと多項分布を用いたものがあります.ベルヌーイ分布は文章内に単語が存在しているかいないかで分類をおこないますが,多項式分布は文章内に単語がどれほど存在しているかで判断しています.そこで,今回は認識精度の面から多項分布でのモデル化について解説します.

問題の数式化

 
 まず初めに求める問題を定式化します.分類ですので,ある分類したいクラスC(スポーツや政治)に文章dが当てはまるかどうかが重要になります.つまり,文章dが与えられたときにクラスCである確率を求めます.そして,以下のようにベイズの法則からCを求める式を算出します.

{
P(c|d) = \frac{P(c)P(d|c)}{P(c)}
}

{
c_{max} = \displaystyle \arg \max_c \frac{P(c)P(d|c)}{P(c)}
      = \displaystyle \arg \max_c P(c)P(d|c)
}

ほんとうは,P(c|d)を求めたいのですが,dは文章ですので組み合わせが膨大になります.そこで,P(d|c)という問題へと変換しました.

多項モデル

多項式分布を覚えていますか?多項式分布では発生確率を持つ単語が文章内に複数回発生したときの文章の発声確率をモデル化できました.これをクラス内単語の発生確率が複数回発生したとして文章の発生確率をモデル化しものが多項モデルです.文章dの中に単語wが{n_{w,d}}回起こる確率は,多項分布を用いて以下のように決まります.ここで,{q_{w,c}は属するクラスがcであったときに単語wが発生する確率です.

{
\frac{(\displaystyle \sum_w n_{w,d})!}{\displaystyle \prod_{w \in V}n_{w,d}!} 
\displaystyle \prod_{w \in V} q_{w,c}^{n_{w,d}}
}

これで,クラス内にある単語が発生する確率を求めることができたので,クラスCに単語が属する確率P(d|c)は以下のようになります.

{
P(d|c) = P(K=\displaystyle \sum_w n_{w,d}) \frac{(\displaystyle \sum_w n_{w,d})!}{\displaystyle \prod_{w \in V}n_{w,d}!} 
\displaystyle \prod_{w \in V} q_{w,c}^{n_{w,d}}
}

つまりは,これを用いると,以下の式を最大にするようなクラスCが文章dの属するクラスということになります.

{
c = \displaystyle \arg \max_c P(c)P(d|c) 
= \displaystyle \arg \max_c P(c)P(K=\displaystyle \sum_w n_{w,d}) \frac{(\displaystyle \sum_w n_{w,d})!}{\displaystyle \prod_{w \in V}n_{w,d}!} 
\displaystyle \prod_{w \in V} q_{w,c}^{n_{w,d}}

}

実際には最尤推定を用いて確率の値を求めていきます.今回は解き終わった結果を見てみたいと思います.

{
P(c) = \frac{N_c}{\displaystyle \sum_c N_c} \\
q_{w,c} = \frac{ n_{w,c} }{\displaystyle \sum_w n_{w,c} }
}

P(c)はあるクラスに属する文章の数を全体の文章の数で割っていて,{q_{w,c}}はクラスcに属するある文章の出現回数をクラスcに属する全ての文章の出現回数を割っていて,直観的だとわかります.

おわりに

分類問題は自然後処理の中でも特に応用範囲が大きいものだと思います.迷惑メールの他にも品詞の分類などがあります.ナイーブベイズ分類は分類問題の中でも直観的にわかりやすいモデルになっています.そのため結果の原因の特定が容易にできるためいまもよく使われているみたいです.今回は最尤推定を使って分布の確率を求めましたが,ある確率が0になってしまい全体として正常に動作しない問題が発生することもあるため,実用の場合はMAP推定を用いてディクレ分布を事前分布として計算すると良いそうです.

ゲームに用いるなら

プレイヤーがNPCと話せると仮定したときに,話した内容で相手がどう感じるのかを分類器として作成して置いたら,感情で会話できるようなシステムができるかなって感じました.そうしたら,ボスまでの道を教えてくれる情報屋さんをどう懐柔するかなど,ゲームにおける会話の幅が広がると感じました.