自然言語処理勉強結果「形態素解析のコスト推定」

自然言語処理学習結果

前回は、形態素解析には二つの段階があることと、
その前半のラティス構造について解説した。

後半として、コストを推定し、
その最小経路を探す部分が残っている。

今回は、そのコストを推定する部分について
解説していこう。

このあたりは前回も書いた通り、
実際にはツールで行ってくれる

しかし、その中で何が行われているか
把握しておきたい、ということだった。

なお、本講座は以下の本を参考に進めている。

もしよかったら、中身を覗いてみて欲しい。

Javaで学ぶ自然言語処理と機械学習 | 徹, 杉本, 志乃, 岩下 |本 | 通販 | Amazon
Amazonで徹, 杉本, 志乃, 岩下のJavaで学ぶ自然言語処理と機械学習。アマゾンならポイント還元本が多数。徹, 杉本, 志乃, 岩下作品ほか、お急ぎ便対象商品は当日お届けも可能。またJavaで学ぶ自然言語処理と機械学習もアマゾン配送商品なら通常配送無料。
スポンサーリンク

単語N-gramモデル

これを説明する前に、
単語N-gramというものを解説しておこう。

単語N-gram

単語N-gramとは、
文中に連続して出現する\(N\)個の単語の組のことだ。

本記事では、断りがない限り、
単語N-gramと言ったら、\(w_1, w_2, …, w_N\)で表すとしよう。

例えば、「ラーメンを食べる」という文に対する
単語N-gramを見てみよう。

これを、1-gramから3-gramまで並べてみる。

  • 1-gram : (ラーメン), (を), (食べる)
  • 2-gram : (ラーメン, を), (を, 食べる)
  • 3-gram : (ラーメン, を, 食べる)

こんな感じだ。

単語N-gram確率

次に、これと確率を関連付けてみよう。

また新しく、単語N-gram確率という言葉を定義する。

これは、N-1個の単語\(w_1, w_2, …, w_{N-1}\)が
この順で出現するという条件で、
その次に単語\(w_N\)が来る確率だ。

そう、これも条件付き確率となる。

記号としては、\(P(w_N | w_1, w_2, …, w_{N-1})\)としておこう。

条件付き確率については、
以前別記事の中で紹介している。

よかったら、そちらも参照してほしい。

ナイーブベイズ分類器を理解するための数学「確率」 | Shino’s Mind Archive

もう一つ、コーパスという言葉を説明しておこう。

コーパスとは、実際に書かれた、あるいは
話された言葉を集めた言語データ
のこと。

機械学習で言うところの学習データのようなものだと
思ってもらっていいだろう。

では、単語N-gram確率を求めていこう。

とはいえ、そんなに難しくない。

コーパス中に含まれる、
単語列\((w_1, w_2, …, w_k)\)の出現回数を、
\(count(w_1, w_2, …, w_k)\)と表現する。

このとき、単語N-gram確率は、

$$P(w_N | w_1, w_2, …, w_{N-1}) = \frac{count(w_1, w_2, …, w_{N-1}, w_N)}{count(w_1, w_2, …, w_{N-1})}$$

で求めることができる。

要するに、最後の1文字以外が出てきた回数を分母に、
それも含めた回数を分子に置いているだけだ。

ただ、これはNが2以上のものの場合だ。

Nが1の場合は、単にコーパス全体の単語量で、
その単語の出現回数を割ってあげればいい。

さっきのラーメンの例で、
具体的に計算をしてみよう。

あるコーパスに、1万の単語が含まれていたとしよう。

その中で、注目する単語N-gram
以下の出現回数だったとする。

単語N-gram出現回数
(ラーメン)20
(を)400
(食べる)25
(ラーメン, を)10
(を, 食べる)20

このとき、単語1-gram確率は、
単に1万で割ればよかった。

  • ラーメン : 0.002
  • を : 0.04
  • 食べる : 0.0025

次に単語2-gram確率、
これはちょっと丁寧に計算してみよう。

まず、(ラーメン, を)というものについて。

式をそのまま書き換えると、

$$P(を | ラーメン) = \frac{count(ラーメン, を)}{count(ラーメン)}$$

こうなる。

表から、分子は10、分母は20と分かるので…

$$P(を | ラーメン) = \frac{10}{20} = 0.5$$

となる。

同じように計算すると、
(を, 食べる)については0.05と分かる。

これが、単語N-gram確率だ。

そして、ようやく章タイトルの
単語N-gramモデルというものの説明に入る。

単語N-gramモデル

単語N-gramモデルとは、
上で説明したような内容を使う確率のモデルだ。

「文中の各単語の出現確率は、
直前のN-1個の単語の組み合わせに依存する
という考え方に基づいている。

この考え方を、N-1マルコフ過程と呼ぶ。

例えば、Nが1の場合は、直前の単語に依存しない。

そのため、\(k\)個の単語列について、
その順番で出現する確率を求めると…

$$
\begin{eqnarray}
P(w_1, w_2, …, w_k) & = & P(w_1) \times P(w_2) \times … \times P(w_k) \\
& = & \Pi_{i=1}^kP(w_i)
\end{eqnarray}
$$

となる。

それに対し、Nが2の場合は、
直前の1個が関連しているという考え方なので…

$$
\begin{eqnarray}
P(w_1, w_2, …, w_k) & = & P(w_1) \times P(w_2 | w_1) \times P(w_3 | w_2) \times … \times P(w_k | w_{k – 1}) \\
& = & P(w_1) \times \Pi_{i=1}^{k-1}P(w_{i + 1} | w_i)
\end{eqnarray}
$$

このように、一個前の条件を考えた条件付き確率
求めることができる。

これで、先ほどのラーメンの文を見てみよう。

まず、1-gramモデルの場合は…

$$0.002 \times 0.04 \times 0.0025 = 2.0 \times 10^{-7}$$

となり、2-gramモデルの場合は…

$$0.002 \times 0.5 \times 0.05 = 5.0 \times 10^{-5}$$

と求められる。

このNが大きくなればなるほど精度が高くなるが、
同時にコーパス中に出てくる数も減ってくるので、
信頼性が低くなってしまう

そのため、通常は2か3で行われることが多い。

これを使って、マルコフモデルというものを考える。

マルコフモデルとは、
解析結果候補となる単語列の中から、
単語N-gram確率が最大となる候補を選ぶ方法のことだ。

さて、前回の記事で、形態素解析を行う際には、
単語コスト接続コストを考えると紹介した。

ちょっと、前回の記事も貼っておこう。

自然言語処理勉強結果「形態素解析の詳細」 | Shino’s Mind Archive

そのうち、単語コストにあたるのが、
この単語N-gram確率となる。

例えば、Nが2の場合は、上で紹介した
以下式が最大となるものが選ばれるのだ。

$$
\begin{eqnarray}
P(w_1, w_2, …, w_k) & = & P(w_1) \times P(w_2 | w_1) \times P(w_3 | w_2) \times … \times P(w_k | w_{k – 1}) \\
& = & P(w_1) \times \Pi_{i=1}^{k-1}P(w_{i + 1} | w_i)
\end{eqnarray}
$$

では、接続コストを考えよう。

これも、単語2-gram確率を使って考えることになる。

二つの単語\(w\), \(w’\)における
接続コスト\(cost(w, w’)\)は、

$$cost(w, w’) = -\log P(w’ | w)$$

と設定する。

こうすることで、
確率が高いほど小さい値を取るようになり、
このコストが最小となるものを選べばいいことになる。

これを使って、
k個の単語列\(w_1, w_2, …, w_k\)の接続コストの和を求めると…

$$
\begin{eqnarray}
\sum_{i = 1}^{k – 1}cost(w_i, w_{i + 1}) & = & cost(w_1, w_2) + cost(w_2, w_3) + … + cost(w_{k-1}, w_k) \\
& = & -\log P(w_2 | w_1) -\log P(w_3 | w_2) – … – \log P(w_k | w_{k-1}) \\
& = & -\log(P_(w_2 | w_1) \times P(w_3 | w_2) \times … \times P(w_k | w_{k-1})) \\
& = & -\log(\Pi_{i=1}^{k-1}P(w_{i+1} | w_i))
\end{eqnarray}
$$

こうなる。

これが、単語N-gramモデルを使ったマルコフモデルの考え方だ。

おわりに

コストを決定する考え方としてはもう一つ、
隠れマルコフモデルというものがある。

こちらは、品詞などの単語の分類から、
どのように遷移するかをモデル化し、
その確率によってコストを決定するもの。

こちらの説明もしたかったのだが…
ちょっと長くなるので、一旦割愛しよう。

まずは一通り最後まで形態素解析しようと思うので、
次回は求めたコストを最小にする経路を探索する
ビタビアルゴリズムを紹介しよう。

ここまでできれば、一旦形態素解析が可能となる。

かなり長くなっているが、ゆっくり理解していこう。

コメント

タイトルとURLをコピーしました