前回は、自然言語処理のうち、
解析の部分に焦点を当てていた。
その中でも、特に構造的な解析を行う
二つの解析を紹介した。
- 形態素解析
- 構文解析
今回は、このうち、形態素解析を具体的に
どうやっているのかというお話をしよう。
実際にはツールでやってくれるのだが、
その原理を知っておきたい。
なお、本講座は以下の本を参考に進めている。
もしよかったら、中身を覗いてみて欲しい。
本編の前に
前回解説した形態素解析と構文解析を行う
プログラムを作ってみた。
以下ページになるので、
よかったら色々な文を入力して試してみて欲しい。
使い方は簡単、
解析したい文を入力欄に入れ、
「解析」ボタンを押すだけ。
そうすると、入力した文を
形態素解析と係り受け解析してくれる。
ただ、今のところ一度に入力できるのは1文のみ、
かつ最後に句点「。」が必要となる。
仕様としては、Yahooで用意されている
日本語形態素解析と日本語係り受け解析の二つを
やってくれるAPIに入力文をそのまま投げ、
結果を表示しているだけだ。
今後、余力があれば複数文にも対応しようと思う。
形態素解析の詳細
では、ここから本題だ。
形態素解析には、大きく二つの段階がある。
- ラティス構造の作成
- 経路の選択
それぞれ、詳細を見ていこう。
ラティス構造の作成
まず、入力された文について、
考えられる単語の列全てを含むようなグラフ構造を作る。
この構造のことを、ラティス構造と呼ぶ。
先に、グラフの説明をしておこう。
ある集合を頂点集合、
その二つの組を辺とし、
その集合である辺集合を考える。
この二つの集合からなる構造を、
グラフ構造と呼ぶ。
なお、今回の辺には
向きを考える有向辺を用いる。
このように、通常使う棒グラフのようなグラフとは
完全に違うものなので注意してほしい。
で、ラティス構造なのだが…
具体例を見てもらった方が早そうだ。
というわけで、
入力を「日本を出発する。」としたときの
ラティス構造の例を出そう。
![](https://i1.wp.com/shinoarchive.com/wp-content/uploads/2020/06/74fed02acccf944beec2f79813e5a10d.png?fit=1024%2C150&ssl=1)
まず、最初にいきなり分岐する。
「日本」という単語か、「日」という単語だ。
「日」に分岐した後は、「本」が次に来るが、
その品詞によってさらに分岐する。
といった形で、
考えられるパターンを全て分けていくのだ。
これで、いずれかの矢印を文頭から文末まで辿ると、
その経路が形態素解析の結果となる。
となると、次にどういった経路を辿るか、
という問題になる。
経路の決定方法
これも大きく二つの考え方がある。
- 経験的な手法
- 統計的な手法
経験的な手法
これは最長一致法や分割数最小法などがある。
最長一致法とは、
分岐時に単語が最長となるものを選んで進む方法。
分割数最小法は、
経路の長さ(=辿る単語の数)が最小になるよう進む方法。
これらでも、ある程度正しい結果が得られるが、
常に正しいとは言いづらい。
そこで、統計的に見てみよう、というお話になる。
統計的な手法
参考となるデータをもとに、
どのようなものが正しいかを計算するのが、
この統計的な手法だ。
代表的なものに、コスト最小法がある。
単語自体や、それらの間にある矢印にコストを付与し、
それが最小となるルートを辿るという考え方だ。
単語コスト\(cost(w)\)は、
単語\(w\)の出現頻度が小さいほど大きくなるように、
接続コスト\(cost(w, w’)\)は、
単語\(w\)と\(w’\)が繋がりにくくなるほど
大きくなるように設定される。
このとき、文\(S=w_1 w_2 … w_n\)の
総コスト\(cost(w_1, w_2, …, w_n)\)は、
以下のように求めることができる。
$$
\begin{eqnarray}
cost(w_1, w_2, …, w_n) & = & cost(w_1) + cost(w_2) + … + cost(w_n) \\
& + & cost(w_1, w_2) + cost(w_2, w_3) + … + cost(w_{n-1}, w_n) \\
& = & \sum_{i=1}^n cost(w_i) + \sum_{i = 1}^{n – 1} cost(w_i, w_{i + 1})
\end{eqnarray}$$
やっていることは非常に単純で、
各単語と、単語間それぞれのコストを
全部足しているだけだ。
で、単語コスト、接続コストが分かればいいのだが、
そこが問題だ。
というわけで、これらを導出する方法として、
以下のようなものがある。
- 単語N-gram
- 隠れマルコフモデル
さらに、これらのコストを求めた後に、
コストが最小となる経路を求めるアルゴリズムの例として、
ビタビアルゴリズムがある。
これらの詳細に進んでもいいのだが…
ちょっと長くなりそうなので、一旦ここで切ろう。
おわりに
今回は、形態素解析が具体的にどのように行われるかを見てきた。
とはいえ、まだ概要レベルだ。
最初に、考えられる可能性全てを持つ
ラティス構造というグラフを作る。
その後、各単語や関係のコストを求め、
その最小となる経路を出す、という流れになる。
というわけで、次回はちょっと名前を出した、
具体的な考え方を見ていこう。
色々と解説しているので、
全体像のうち、今どこにいて何をしているのか
を意識しておくようにしよう。
コメント