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

自然言語処理学習結果

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

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

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

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

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

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

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

Bitly
スポンサーリンク

単語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をコピーしました