日本語の構文解析
なんの説明にもなっていないが、日本語の構文解析とは、日本語処理における、「日本語表現の構文要素どうしの関係を推定するための技術」である。
英文のように、「語句単位で空白で区切られており、語順によって『述語』『係り』『受け』が示される言語」である英語などと違い、膠着語であり語順も自由な日本語においては、欧米語に対する構文解析技法は それほど有効ではないため、世間で思ったようには発達していない。
概要[編集]
日本語の構文解析において、いまのところ頼りになるものは三つくらいしかない。
すなわち、
- 述語と文法格の一意性
- シソーラス
- 非交差則
である。
「述語と文法格の一意性」とは、述語が要求する文法格を持つ体言節はひとつしかない、ということである。
「私はラーメンと餃子を喰う」の場合、「私はラーメンを餃子を喰う」とは言わない。動詞(述語である)「喰う」が要求しているのは主格を担う語と対格である語であるが、要求するのはただ一語であり、「ラーメンと餃子」は一語とみなされる。「ラーメン」と「餃子」を個別に立てると、文法格の一意性に反する。
このとき、「どの単語がどの文法格を要求するか」といった辞書的な情報が必要となる。
「死ぬ」は主格のみを要求するため、「何を死ぬ」「何に死ぬ」は無意味である。「雪山に死ぬ」は「雪山で死ぬ」の言換えでしかない。
非交差則は、「係り受けの関係は、入れ子構造になっていて、交差することはない」という規則である。
ラーメンと餃子は「食べる」ものであり、ビールは「飲む」ものなので、「私はラーメンと餃子を食いビールを飲む」は文法的だが、「私はラーメンと餃子をビールを食い飲む」は、「食う」と「ラーメンと餃子」の係り受け関係と「飲む」と「ビール」の係り受け関係が交差しているので非・文法的である。
残念ながら、真面目にシソーラスを構築しようという企業は少なく、従って他の二つもなおざりになっているので深層学習などに逃げているのが現状であり、マスコミがそのブームに銀蠅のように集(たか)っているだけの話でしかなく、それに乗っかる企業も企業なら、それに乗っかる公共団体も公共団体ではある。
述語と文法格[編集]
述語とは、単文の核となる「単文において唯一の語」であり、フランスの数学者ルネ・トムは「原子文章」と呼んでいる。いわば「単文の原子核」である。
日本語において述語になりうるものとしては、動詞・形容詞・助動詞「だ/です/である」の三つがあり、それぞれ(主に主要な三つの)文法格を一意に(体言節に対して)要求するが、「文法格」のそれぞれについての命名については議論がある。
たとえば「です」は直前に体言(または体言節)を要求するが、そうなると文法的には「京都です」は正だが「京都までです」は誤である、という話になってシステムに叱られる。「(私の目的地は)京都です」は述語「です」の要求を満たしているために文法的には正であり、「(私は)京都まで(移動する当該人物)です」もまた正である。
主格[編集]
すべての述語が要求する文法格として、主格がある。
ところが、日本語においては省略されることが多く、述語との関係において推測する以外に方法がない。
「主語を表す格助詞」として学校で教えられるのが「は」「が」であるが、実際には「格助詞」ではなく「とりたて詞」とされる(反対する人も多いため論争が続いている)。
たとえば「象は鼻が長い」は、主語として「象」「鼻」の二つがあり、「長い」が述語だとすると「述語は一意に文法格を(体言節に対して)要求する」という前提は誤りである、いう主張がある。これに対し、「強調転置」という法則があるという主張があり、「長い鼻の」の「鼻」が「とりたて」を受けて前後関係が転置され、同じ連体形である「鼻が長い」になったという説がある。したがって、「象は鼻が長い」は「象は長い鼻の(動物である)」と同義であると考えると、「象」と「長い鼻の動物」は「である」に係っていると解釈でき、構文的に不都合は起きない。
こういった議論の果てに「『は』『が』は『格助詞』ではなく『とりたて詞』である」ということになり、「主格の格助詞は“存在しない”」というのが日本語処理業界では定説になったが、人材の入れ替わりにより継承が途絶えつつあるという。
対格[編集]
格助詞は「を」。「食べる」は「誰が」「何を」なので、「食べる」は主格と対格を要求すると謂える。
ただし、「を」は省略されることもあり(「ラーメン食べる」など)、とりたて詞「は」「が」が接続すると省略される(「をは」「をが」は使われない)。
与格[編集]
格助詞は「に」。「与える」は「誰が」「何を」「誰に」なので、「与える」は主格と対格と与格を要求すると謂える。
「に」が省略されることはあまりないが、とりたて詞「は」では省略されない(「には」)が、「が」が接続すると省略される(「にが」は使われない)。
主要三格以外の格[編集]
「文法格は、述語から一意に要求される」というテーゼには強くは縛られず、とりたて詞による格助詞の省略などもない。
たとえば動詞「行く」では主格は必須であるものの、「大阪から」(格助詞「から」。出発格)・「京都まで」(「まで」。到達格)・「新幹線で」(「で」。具格)などはあまり厳しくはチェックされない。いわゆる「取っ散らかった文章」は、このあたりの整理がついていないケースが多い。
なお、与格の「に」と同音同表記の助詞の「に」があるので、「千鳥ヶ淵に桜を見にゆく」は文法格の一意性を犯してはいない。
補助動詞[編集]
日本語には三つの補助動詞がある。
- 「行く(ik, yuk)」
- 「おく(ok)」
- 「いる(i)」
である。いずれも動詞の連用形(現在時制または過去・完了時制)に接続詞、動詞を作る。
「行く」と(「持ってゆく」など)「おく」(「取っておく」など)の解析は、さほど難しくはない。この省略形(「持ってゆく」→「持ってく」、「取っておく」→「取っとく」)も同様である。
ただし、「いる」の省略形(「持っている」→「持ってる」)は特別な配慮が必要となる。「いる」の語幹にあたる「い」は「いる」の連用形現在時制「い」と同じ形をしている。これは連用形なので、用言である動詞にも係ることができるので、「持ってる」が「持って(い)(い)(い)(い)……」という無限連鎖の解析に入りこんでしまい、作業領域を使い果たしてシステムがダウンしてしまう。そこで語尾「て」「で」の定義に「いる」の活用形をくっつけて文法定義をし、この無限連鎖を回避するといった工夫が必要になる。もちろん実行時にチェックすることも可能ではあるはずだが、実行速度が落ちる可能性がある。
無限連鎖は文法定義が循環していても起こるが、こちらは処理の対象となるデータに依存して起きたり起きなかったりするわけではないため、手作業によるチェックで対処できる。
シソーラス[編集]
動詞において「どの動詞がどんな文法格を要求するか」と、文法格の担い手である体言について「どの体言が、どのカテゴリーに属すか」という階層構造を併せたものをシソーラスという。たとえば「食う」は対格を要求するが、「ラーメンを喰った」「人をくった」「割をくう」では同じ「くう」であっても対象のカテゴリーは異なる。
体言のカテゴライズ[編集]
「象は鼻が長い」は「象は長い鼻の何かである」と同義であるが、その「何か」をコンピュータに推定させるには、そのカテゴリーに関するデータが必須である。「象」は「生物」カテゴリーの「動物」カテゴリーの「哺乳類」カテゴリーに属すというデータがないと、「何か」の推定の精度が落ちる。「ゾウミジンコ」は甲殻類であり、「ゾウムシ」は昆虫であり、「エレファント・ノーズ」は魚類である。
このカテゴライズは必ずしも木構造をしてはおらず、コンピュータ・サイエンスにおける「多重継承」を許している。数学的には「束構造」をなしているといえる。
たとえば「正方形」は「長方形」の下位カテゴリーであるとともに、「台形」「平行四辺形」「菱形」の下位カテゴリーである。「正方形は長方形である」「長方形は台形である」「長方形は平行四辺形である」「正方形は菱形である」はすべて正しいが、日本語処理システムのユーザーはあまり意識していないと思うので、「そこは指摘してくれよ!」というコアなユーザの要求に応えるためには、そういった手当を行なう必要はある。
誤用などへの対応[編集]
誤用(あるいは慣用)においては、しばしば不正確なものもある。これは辞書的に解決できなくもないが、各項目が相互に関連している場合は、その関連性をシソーラスで吸収したほうが利便性が高くなりそうに思う。
たとえば「独壇場(どくだんじょう)」は「独擅場(どくせんじょう)」が「土壇場」の影響を受けて誤用が広まったと推定されるが、ユーザによる確認も同意もなく(問答無用で)“修正”してしまうのはシステムとしては出しゃばりすぎである。そこは注意喚起と説明と確認のプロセスを踏まなければならない。「それ以上でもなければそれ以下でもない」は「それは存在しない」と同義なので、「それを越えないしそれ未満でもない」に修正してよいか、などの問題がある。
非交差則[編集]
係り受けの関係は交差しない。すなわち、係り受けの関係は入れ子になっており、他の係り受けの関係の中にあるところに入りこんだり、中から外に出たりしない。
「餃子」は「食べる」もので「ビール」は「飲む」ものだとすると、「餃子を食べビールを飲む」は正だが「餃子をビールを食べ飲む」は、非交差則を犯しているため誤となる。
こうしたチェックにはシソーラスに依存するため、シソーラスの出来のよしあしが解析精度に直結する。これは深層学習などでは解決できないので、Chat GPT 程度では歯も爪も立たない。とりあえず人間と対話できるシステムを構築して、シソーラス(知識フレーム)を構築することが重要である。
活用[編集]
活用には、「どのような語に係るか」を表す「活用形」と、「活用形の変化のパターンの型」を表す「活用型」の二側面がある。「かつようけい」「かつようがた」と呼びわけることがある。
活用形[編集]
一般的には「未然・連用・終止・連体・仮定・命令」の六種と教えられるが、あまり正確ではない。
たとえば「連用形と連体形」「現在時制と過去または完了時制」の関係は直交しており、計四種類となる。
文語では使われたが現代語ではあまり使われないものもある。終止形である。文語の動詞・形容詞の活用表には載っているが、現代語では「連体形と同じ形をしている」ことになっている。それをうっかり信じてしまうと、構文解析の手間(文法記述にしろ処理系の実行にしろ)が増える。ここは「連体形の終止用法」と考え、文末が連体形で終わっていたら「『のだ』が省略されている(のだ)」と判断する(のだ)。そうしないと、「準体助詞の『の』」と「述語の助動詞『だ/です』」を取りこぼすことになり、構文解析木が整わない。
文語と現代語では活用形の名前が異なっているものがある。現代でいう「仮定形」は、文語の「已然形」であり「生起順序」を表すが、仮定形は「前提と結果」を表す。
「柿喰へば鐘が鳴るなり法隆寺」は「柿を喰ったから鐘が鳴った」を意味しない。「智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ」も仮定形ではなく已然形であり、「智に働いたら角が立った。情に棹さしたら流された。意地を通したら窮屈な思いをした」という主人公のボヤキである。仮定形は、「海ゆかば水漬く屍」「死なば諸共」「毒を喰らわば皿まで舐れ」「寄らば斬るぞ」などであり、現在でいう仮定形とは「ゆけば」「ゆかば」、「死ねば」「死なば」、「喰らえば」「喰らわば」、「寄れば」「寄らば」と形も違う。これだけで活用形は十種となる。
別枠としては「ござる」の連用形「ござり」が「ござい」、「なさる」が「なさり」「なさい」と変化する例がある。「おはようございます」「お帰りなさいませ」など、あいさつ文などで使われることも多いが、構文解析など考えずに定型表現の辞書にでも押しこんでおくという手もある。
「活用型」は、構文解析ではなく日本語の形態素解析の領域の話なので、そちらの記事に譲る。