形態素解析・構文解析入門

back

注意: このページの内容には、おそらく多くの間違いがあります。
リンクされているので残しておきますが、利用には注意してください。(2008年3月、新山)


目次

  1. 背景知識
  2. 形態素解析とは
  3. 構文解析とは
  4. 練習問題
  5. 言語処理関係の論文によく出てくる重要語

1. 背景知識

まず「形態素」、「構文」などといった用語は、ほとんどが 現在の科学的な「言語学」という分野に帰するものであることを 最初に知っておく必要がある。体系だった言語学は、おもに チョムスキー言語学の創始とともに始まった。

チョムスキーは 1960年代に、世界じゅうの数多くの言語には、 実はそのすべてに共通する「普遍文法 (universal grammer)」がある、と言った。 またチョムスキーはそのような文法を数学的な人工言語で 厳密に表現する方法をも開発した。彼によれば、言語にはその理想化された かたち (言語が言い間違われたり省略されたりしない場合) がある。そして 理想化された状況下では、言語というものはみな決まりきった規則の 適用からなる一種の「機械」によって生成された、出力結果であると いうのである。このような普遍文法は現在「変形生成文法 (transformational generative grammer)」と呼ばれる。 例をみてみよう。以下にしめす文脈自由文法 :

を考え、これらから生成される名詞節 (ほんとうは文をやりたいのだが、 めんどうなので名詞節にする) を考える。NP は名詞節 (Noun Phrase)、 n, v, pp, はそれぞれ 名詞 (Noun)、動詞 (Verb)、助詞 (PostPosition) をさす。 さいしょは NP から始めることにすると、

このゲームはいつまでも続けることができる。上の例では 次に展開する部分を下線で示したが、ひとつの NP はいくらでも 展開できる。上の例ではわざと「彼女が書いた」の部分を先に展開したが、 ここで「彼女が書いた試験」と読んだ人は少ないだろう。ここでは 「試験に落ちた青年の着いた駅」がひとまとまりになっており、「彼女が書いた」 は最後の「小説」にかかっている。つまりまんなかの名詞節 NP が入れ子に なっている。このような「入れ子」や「繰り返し」の構造は、世界中のどの 言語にもみられ、これこそがチョムスキーの発見した普遍文法であった。 文脈自由文法は現在コンパイラなどの文法記述にも使われているが、 もともとは自然言語の文法を記述するためにチョムスキーが考案した 方法だったのである。

さて、言語はすべてこのような規則で記述できる、と仮定したとしよう。 規則は言語に現れる記号 (文字とか、音とか) を操作し、 それらは数学的に厳密に記述されたものになっている。「科学的な」 言語学の誕生である。チョムスキーは「地球上の生物のなかで 人間だけが言語能力をもつのはなぜか?」という問いに対し、それは人間が このような記号生成マシーンを脳の中に持っているからであり、それらは いずれ実際に脳の一部として発見されるであろう、とさえ言っている。

現在、「言語学」という 分野は、次の 5つの階層に分けられた諸分野全体のことをいう。 最初のほうに出てくる分野はすでによく研究されており、 下に行くほど問題のレベルが高くなっていき、 まだ謎が解けていない部分が多くなってくる :

  1. 音韻論 phonology
  2. 形態論 morphology
  3. 構文論 (統語論) syntax
  4. 意味論 semantics
  5. 語用論 pragmatics

これらの分野について簡単に解説しておく。 音韻論とは、「あー」とか「ひょげ」とかいう音と文字の関係、 子音と母音の組み合わさり方などを明らかにするものである。 形態論が単語とか、品詞とかについて、その語形変化や並び方などを 研究する分野。語形論とも呼ばれる。構文論がチョムスキーの考えた 生成文法を研究する分野にあたる。語や文節がどのように「かたまり」を作って、 どのようにそれらが入れ子になったり、他の「かたまり」を修飾したり するのだろうか、といった研究である。意味論とは、ひとつひとつの 「単語」がどのような意味をもっているか、といった分野だが、この 分野はまだ構文論にくらべて研究が進んでいない。語用論はあるひとつの 文 (発話) をとりあげ、その発話が文脈の中でどのような働きをもっているか を研究する (たとえば依頼や婉曲、皮肉など)。こっちのほうはもっと 研究が進んでいない。ましてやこれらをとり入れた自然言語処理システムなど、 今のところ一つもない。

最終的には、自然言語処理システムはこれらすべてをとり入れたものに なるかもしれない。しかしたいていの工学的構造物がそうであるように、 システムはいくつかのレベルに分けて設計し、ひとつひとつのモジュールを 積み重ねていくことが望ましい。このシステムを言語学と同じように分割すると すれば、最終的なシステムは次のようなモジュールが必要になるだろう :

  1. 音素解析モジュール (いわゆる音声認識)
  2. 形態素解析モジュール
  3. 構文解析モジュール
  4. 意味解析モジュール
  5. 談話 (discourse) 解析モジュール

これらのモジュールのうち、現在研究が進んでいるのは 形態素解析モジュールと構文解析モジュール、せいぜい意味解析モジュール までである。そしてこの形態素解析と構文解析という 2つの技術こそが、 現在の自然言語処理技術の中核をなすものでもあるのだ。では、 次にこの 2つの技術をみていこう。


2. 形態素解析とは

さて、すでに予想がついただろうが、「形態素」という ことばは上にあげた形態論の「形態」と関係がある。日本語の活用をみれば わかるように、ある語はいろいろな形態に変化する。これは英語でも そうだし、ほとんどの言語にみられる現象である。形態素とは 文字どおりその形態の「素」、つまり語のなかで変化しない最小単位をさす。 これは単語と呼ばれているものに近いが、日本語ではもっと細かく分類される。 たとえば、文

「来られないようだが」
は、次の形態素に分解される (以下の例は 形態素解析ツール chasen によって解析した、これらの使い方はいずれ 別の研修でやるであろう) :
来      コ      来る    動詞-自立       カ変・来ル      未然レル接続
られ    ラレ    られる  動詞-接尾       一段    未然ナイ接続
ない    ナイ    ない    助動詞  特殊・ナイ      基本形
よう    ヨウ    よう    名詞-非自立-助動詞語幹           
だ      ダ      だ      助動詞  特殊・ダ        基本形
が      ガ      が      助詞-接続助詞            
このように形態素解析 (Morphological analysis) とは、 与えられた文を形態素に分ける作業のことをいう。 この作業には、それぞれの形態素がどの品詞に対応するかという対応づけも 含まれる。形態素解析はのちに述べる構文解析の材料となる品詞列を 提供し、構文解析の足場をつくる。 こんなことがなぜ計算機に可能かというと、それは日本語には 単語のどの品詞がどの品詞とつながるか、という厳密な規則があるためである。 たとえば「来られないようだが」は日本語として可能でも、 「来だないがようられ」は許されない。形態素解析の技術は、 自然言語処理の中ではもっとも基本的な技術であり、現在のところ唯一実用で 普及しているものである (かな漢字変換)。 では、次のような問題をやってみよう :

問 : 次の文をかな漢字変換せよ。

“うらにわにはにわにわにはにわにわとりがいる。”

この問題は思ったより単純でない。今までに聞いた知識から

「裏庭には二羽、庭には二羽、鶏がいる。」
という答えがうかぶが、これだけではない。たとえば、
「裏庭に埴輪、庭に埴輪、鶏がいる。」
さらには、こんなふうにもとれる。
「裏にワニ、葉にワニ、環に埴輪、鶏がいる。」

これらはいずれも意味は不明だが、日本語として許されないわけではない (追加研究としては ここ を参照)。 どれが妥当かはその文の意味によって決まるし、さらには文脈や相手の意図までも 考慮に入れなければ完璧な正解は出せない。ここに、自然言語解析の 難しさがある。形態素解析にしろ構文解析にしろ、そのレベルの 規則だけですべてなんとかなるといったことはなく、 最終的には意味まですべて考慮に入れなければ正しい正解は出せない のである。しかし今のところそんなに技術は発達してないので、 とりあえずここでは「複数の解答がある」とするしかない。 このように解答が複数あって、どちらとも決定できない状況を 言語処理の分野では「曖昧である」と言う。またそのような曖昧な 解答をたくさん出す可能性のことを「曖昧性」という。この 2つの 用語は研究室でもしょっちゅう使われるから、覚えておくこと。

一般に形態素解析の結果は一通りではなく、かなりの曖昧性がつきまとう。 これは構文解析でも同じことである。形態素解析に曖昧性があり、 その候補が多数出力されると、当然それを使う構文解析はもっとたくさんの 曖昧性を生ずることになる。つまり形態素解析モジュールは構文解析モジュールの 下に位置するために、この足場があやういと、構文解析までが難しくなるので ある。構文解析では 10の20乗もの 正解「候補」が出されることさえある。いろいろな手法を用いてこれらの 候補から間違っているものを除き、正解を見つけることを 曖昧性の解消と呼ぶ。現在の自然言語処理の最大の問題は、 まさにこの莫大な「曖昧性」をいかにして減らすか、ということにあるのである。 計算論で NP 完全問題などの概念を習ったと思うが、これを解決しなければ その先にある文の意味を細かく議論することができない、とされている。 少くとも現在の方法論ではそうである。

ちなみに田中・徳永研究室で研究されている MSLR 構文解析は、 形態素解析 (M) と 構文解析 (S) を同時に行うことができる LR構文解析の 手法である。


3. 構文解析とは

さっき、文脈自由文法を使って日本語の名詞節を生成するということを やった。構文解析 (Syntactic analysis) とはこの「生成」の逆で、 与えられた文 (これはすでに形態素解析はされていて、 単語の区切りと品詞の種類はわかっていると仮定してよい) が どのような規則によって生成されたかを逆に算出する作業のことをいう。 これがわかれば、文がどのような「入れ子構造」をもっているのかを 知ることができる。

例として、次のような文法が与えられているとしよう :

ここで次の文、
「美しい(ADJP) 水車小屋(NP) の(pp) 乙女(NP)」
を解析する。この文は、どのような規則の適用によって作られたものであろうか? これを明らかにすることを「文を構文解析する (文を parse する)」とよび、 構文解析する機械 (プログラム) のことを parser とよぶ。

上の文を構文解析した結果は、たとえば次のように表される。

NP(ADJP(美しい) NP(ADJP(NP(水車小屋) pp(の)) NP(乙女)))
これは Lisp などでよく見られる S式で解析結果を表したものである。 NP(A, B) とあるのは、NP から AB の 列が導出 (生成) されたということを表す。さすがにこれでは見にくいので、 上の S式をもうすこし見やすく書くと、こうなる :
  NP(
     ADJP(美しい)
     NP(
        ADJP(
            NP(水車小屋)
            pp(の)
           )
        NP(乙女)
       )
    )
こうして見てみると、この文は先にあげた規則を次のような順序で 展開していったということがわかるだろう :

もちろん、これ以外にも正しそうな候補はあるが。 さて、このような規則の展開は、数学的には「木 (tree)」構造で 表すことができる。これは学部時代にすでに「オートマトンと言語」 といった講義で習ったことだろう。構文解析の結果を表したこのような 木は「構文解析木」あるいは「構文木 (syntactic tree)」と呼ばれる。 つまり与えられた文を構文解析するとは、厳密に言えば、 その文に「付与される」構文木を算出することなのである。

形態素解析の項ですでに述べたように、この構文解析にもほとんどの 場合 複数の候補が存在する。つまり、構文木が複数付与できるような文が 多々あるのである。先の例文だと、以下のように 2通りの構文木が 考えられる。それぞれ、日本語として意味を考えた場合に異った意味を もっている。

tree1.gif

構文木 1 (水車小屋が美しい場合)

tree2.gif

構文木 2 (乙女が美しい場合)

これらの曖昧性も、やはり文脈などを考慮しなければ最終的には 解消できない。しかし、こういった修飾の関係は、「何が、何を修飾しているか」 を見ぬけば、解決できることもある。たとえば「建設中の水車小屋の乙女」 だったら、乙女を建設するとはいえないから、我々は自然に 「水車小屋が建設中なのだ」という結論にたどりつく。しかしこのような 解決は計算機にとってはむずかしい。問題を解決するにあたって、膨大な 一般常識が必要となる。しかし最近は文法にこのような制約を 与える研究もなされている。

構文解析に発生する曖昧性は莫大なもので、それをいかに少なくするか といった研究テーマは田中・徳永研究室でも多い。それには文法の制約 と呼ばれるものがカギになる。つまり、文法規則をうまくつくると、 解析結果が何通りも現れないようにできるのだ。日本語の文法は、 数百からなる規則の文脈自由文法でだいたい表現することができるが、 この「文法規則を書く」 という作業はちょうどプログラムを組むのに似ている。ある文法が、どれくらい 多様な構造の文を生成できるかを、その文法の「能力」という。 実際、同じ能力をもつ文法には何通りもの書き方があり、解析するときには 曖昧性の発生の仕方がまるで違うといったことが生じる。 研究者はこれらの文法をさして「いい文法」とか 「わるい文法」と呼んだりする。それを使って構文解析するときに 曖昧性がなるべく発生しないような文法が、かれらのいう「いい文法」である。 現在いくつもの解析用の日本語文法が作られ、使われている。

構文解析にあたっては、その計算量に関する研究も行われている。 チョムスキーは変形生成文法をその生成アルゴリズムの複雑さによって 4つのレベルに分けた。これはすでに学部でやったと思うが、ここでもう 一度まとめておく。

0型言語 -
生成規則にどのような終端記号、非終端記号を入れても許される。 チューリングマシンでなければ解析できない。それはつまり この言語の計算能力がチューリングマシン (= 数論) と同等であるという ことで、計算量を形式的に決定するのは不可能である。
1型言語 -
いわゆる「文脈依存言語」。ここでいう「文脈」とは、 aXb → aABCb などの規則において、「X」を展開するための、周囲にある a や b などの文字のことである。 これによって、たとえば aXb なら X が展開できるが、 pXq なら展開できない、といった場合分けができるので 「文脈依存」と呼ぶ。ちなみに、これを使った構文解析は計算量が 非常にかかるので、まだほとんど研究されていない。
2型言語 -
いわゆる「文脈自由言語」。自然言語の解析にはほとんど この文脈自由言語が使われている。文脈依存と違い、生成規則の 左辺に許される非終端記号はひとつだけなので、つまり「どのような 文脈で」これが出現しても展開できる、ということで「文脈自由」と 呼ばれる。文脈自由文法は最悪計算量 O(n^3) で解析できることが 数学的に示されているが、よく使われているアルゴリズムが必ずしも O(n^3) オーダーだとは限らない。O(n^3) で解析する アルゴリズムとしては などがある。田中・徳永研究室でよく研究されている 一般化 LR(GLR)法は、厳密には O(n^3) でないのだが、 平均計算量が低いため結果的には高速なアルゴリズムとなっている。 これらのアルゴリズムの詳細はいずれ輪講で詳しく解説されるだろう。
3型言語 -
いわゆる「正規言語」で、これは最悪でも O(n^2) のオーダーで 解析が可能。これは自然言語の解析用としてはほとんど使われない。

4. 練習問題

次の練習問題は、やる気のある人だけやればよい (たぶん誰もやらないと 思うけど)。解答はとくに用意していないが、新山まで聞いてもらえば相談にのる。

  1. 先にあげた「美しい水車小屋の乙女」の例で、先の文法で あの文に対してあれ以外の構文解析木は可能か? 可能でないとしたら、 それを数学的に証明するにはどうすればよいか。
  2. 同じく先の文法で、今度は「美しい水車小屋の乙女」ではなく、 「乙女の美しい水車小屋」という文を解析してみよ。この文には 曖昧性があるか、あるとしたら、それらは全部で何種類になるか。
  3. George Zipf という人は 1949年に「ジップの法則」と呼ばれるものを 考え出した。これは、ある文章に出てくる単語の出現回数 (頻度) は、 その順位が n 倍の数になると 1/n になるというものである。 たとえば文中に出てくる 第1位の単語の出現回数が 100 回である場合、 第5位の単語の出現回数は 1/5 の 20回になる、といった具合である。 どこかからすこし長めの英文ファイルを拾ってきて、その中に含まれている 単語がジップの法則を満たしているか確認せよ。また、この法則は 日本語の形態素に対しても成り立つか。ファイルから単語を切り出すには awk か perl を使えばできる。単語の回数を数えて順位づけする方法は 自分で考えること。日本語の形態素解析は juman や chasen を 使えばできる。この使い方に関しては、だれか知っていそうな人に 訊くこと。UNIX にある程度習熟していないとできないから、これがもし 技術的に「ムリ」だと感じた人は、まだまだ UNIX の操作を 勉強する必要がある。

5. 言語処理関係の論文によく出てくる重要語


Last Modified: Fri Mar 21 19:59:25 JST 2008
Yusuke Shinyama