形態素解析
形態素解析(けいたいそかいせき、Morphological Analysis)とは、文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。
自然言語処理の分野における主要なテーマのひとつであり、機械翻訳やかな漢字変換など応用も多い(もちろん、かな漢字変換の場合は入力が通常の文と異なり全てひらがなであり、その先に続く文章もその時点では存在しないなどの理由で、内容は機械翻訳の場合とは異なったものになる)。
もっぱら言語学的な観点を主として言語学で研究されている文法にもとづく解析もあれば、コンピュータ上の自然言語処理としてコンピュータでの扱いやすさに主眼を置いた解析もある。以下は後者のためのツールを用いた例で、「お待ちしております」という文を形態素解析した例である (「茶筌」を使用した)。
自然言語以外の場合では、プログラミング言語などの場合は字句解析が相当する。
英語の文は日本語とは異なり、予め単語と単語の区切りがほとんどの箇所で明確に示される。このため、単語分割の処理は日本語の場合ほど複雑である必要はなく、簡単なルールに基づく場合が多い。
例えば「It's a gift for Mr. Smith.」という文を解析することを考える。単語分割をすると以下のようになる。
it / 's / a / gift / for / mr. / smith / .
文全体を小文字化し、単語の位置(文頭かそれ以外か等)により単語が区別されてしまうことを防ぐ
it's や don't 等の省略形を分割する(it's → it / 's 、 don't → do / n't)
文末のピリオドを前の単語と切り離す(この際、Mr. などに使われる文末とは関係ないピリオドは切り離さない)
it's の分割として it / 's にするか it / is にするかはしばしば議論の対象となるが、所有格末尾の 's が誤って is になることを防ぐために、 's にすることが多い。
品詞付与はルールに基づくものから統計に基づくものまで利用される(下記の例は  による)。
英語の場合と異なり、文節を得るのが目的となることが多い。大まかに言えば文から切り出した単語が属する品詞を辞書(自然言語処理用の)を用いて調べていき、結果得られた並びから正しく文節が構成される並びであるものを正解であるとするといったような方法を取る。
日本語文法では、たとえば動詞のあとに格助詞がくることはできない(「ドアを開けるを」などは不可)といったように、ほとんどの付属語について「このようなものの後には付く」「このようなものの後には付かない」という規則性があり、また動詞の活用はその後に来る品詞を制限することがある(たとえば連体形の後は名詞)。このような性質を利用することによって単語の境界の判別を行う。具体的にこの性質を利用する方法には以下の2つがある:
長尾真らの1970年代後半の研究では、次のようなアルゴリズムによる形態素解析処理を構築した。
事前に用意しておいた辞書や規則をテーブル形式で読み込む。
入力文を読み込む。
慣用句テーブルとのマッチングを行う。最長一致法を使う。マッチングした部分は固定され、以降の解析では変更されない。
句読点と字種の変わり目(基本的にひらがなから漢字に変わる箇所)で、文節を切り出す。これは文法上の文節ではない。
切り出された文節の中で、慣用句にマッチングしていない箇所について、ひらがな書き自立語テーブルなどとのマッチングを行う。このとき、接続条件を考慮せず、全ての可能性を洗い出す。
以上で出てきた慣用句や単語を接続条件に基づいて連鎖させていく。複数の連鎖がありうる場合、全てを出力する。
結果をファイルに書き出す。
未処理の文節があれば、5 に戻る。
前提として、漢字で書かれた部分は基本的に切り分けず、そこが自立語(あるいは自立語の語幹)になると想定している。従って、漢字で書かれた自立語の辞書(テーブル)は持たない。このとき使われるテーブルには、次のものがある。
活用語尾テーブル -
情報テーブル - 上記テーブル内の各項目に対応した辞書的情報
接続テーブル - 形態素間の相互接続関係を記述したテーブル。接続カテゴリ(品詞)毎に、その前に出現可能な形態素のカテゴリや活用形が記されている。
この中で、接続テーブルが規則に相当する。形態素解析における品詞の接続関係は必ずしも通常の文法通りではなく、解析の効率や、形態素の切り分けがなるべく100%となる(切り分け不能とならない)よう考慮して設計される。このような規則を「文節構造モデル」と呼び、首藤公昭らの研究がある。
昨今の日本語や英語などの形態素解析では統計的な手法が利用される。主な手法に「ラティス上の経路予測」と「点予測」が存在する。
ラティス上の経路予測では、事前に生成可能な単語列 (ラティス) を辞書を使って網羅的に列挙し、各単語間の連結部において両単語が連結して出現する確率に相当するスコアを付与する。文全体でこのスコアの合計がもっとも高くなるような品詞列を答えとする。スコアの計算は隠れマルコフモデル (HMM, Hidden Markov Model) や条件付き確率場 (CRF, Conditional Random Field) などによりモデル化する。
次に点予測 (Pointwise prediction) による手法がある。点予測ではすべての文字の境界に対し、分割可能かどうかをサポートベクターマシン (SVM, Support Vector Machine) 等の分類器により判定する。分割可能な場合はその点が単語区切りとなる。分割判定には、分割点の周りの文字やその種類、部分文字列が単語辞書に含まれるかどうかといった情報が与えられる。品詞推定においても、ある判定箇所について、その単語と周りの単語から SVM などにより判定する。
点予測は、辞書を使って単語ラティスを生成する必要がないというメリットがある。このため、入力文中の単語が辞書に無い場合 (未知語を含む場合) でも、周りの文字列を使って単語らしい部分を識別可能な場合があり、辞書が貧弱でも比較的高い精度で解析できる。さらに、ラティスの生成には原理的に文の長さをnとしてO(n2)の時間を要するが、点予測では各文字間について判定するだけのためO(n)の時間で済む。
いずれの手法でも、ある特定の言語の全世界における全文章データを元にモデルを作成することは事実上不可能であるし、さらに、そもそも文章化されたデータからモデルを学習したとしても、それが元となる文章の解析には最適であるものの、それ以外の(たとえばモデルから見ればまったく手付かずで未知の、今から解析しようとする)文章には適しているかどうかは保証が無い事などから次の節で述べるような問題も発生する。
日本語を形態素解析する際においては、以下の4つが大きな問題となる:
単語の境界を判別することはかな漢字変換の基礎となる技術である。しかし、単語の境界判別を正しく行うためには与えられた文以外の様々な知識、情報が必要となる場合があり、そのため解決が困難である。
たとえば「うらにわにはにわとりがいる」という文には、以下の様に(意味的には解釈に失敗しようとも)文法的に正しい異なる読み方が存在する(本当はもっとある):
裏庭 / には / 鶏 / が / いる
裏庭 / には / 二 / 羽 / トリ / が / いる
裏 / に / ワニ / は / 鶏 / が / いる
裏庭 / に / 埴輪 / 取り / が / いる
上記最後の文の意味解釈は、"埴輪取り"と呼ばれる人あるいは物が存在したという特殊な状況下では意味的にも解釈に成功するだろうが、一般にそんな例は全くといっていいほど無い。しかしそれは"埴輪取り"なるものが実際には存在しないという経験的な知識による人間らしい判断であって、コンピューターなどの計算機を用いた解析では、文法や単語の辞書的データを超えるようなそういった知識も導入したとすると必要な知識が膨大に用意される必要があり、現実的ではない。この文の様に、完璧な正解を得るにはその文がおかれている文脈や書き手の意図等の背景をくみとらねばならないため非常に難しい。
品詞判別の困難さは日本語よりも英語で顕著である。たとえば単語 "time" は「時間」という名詞としての意味のほかにも「 - 倍する」という動詞としての意味もあるため、これをどちらの意味にとるかによって文の文法的構造や導かれる意味がまったく違うものになってしまう。
品詞を見分けることは形態素解析の次の段階である構文解析にとって非常に重要であるが、英語では品詞の種類が文の構造と密接に関連しているため、これらを同時に行う方法も研究されている。
形態素解析は普通、その言語の単語を収めた辞書を用いておこなわれる。解析対象の文中の辞書に含まれない単語を未知語と呼ぶ。日本語では漢字の列やカタカナの列はたとえ未知語であってもある程度単語として認識することができる。しかしそれが使えない場合、代表的な方法は「知っている単語が現れるまで読み飛ばす」というものだが、これは後の解析を狂わせてしまい、結果として頑健な解析(より多くの文を解析可能であること)ができなくなってしまう恐れがある。
話し言葉や電子メールなどで使われる言葉は、(たとえば小中学校で習うような)ある特定のモデル化された文法による日本語からはかけ離れたものが多い。たとえば「そんなことは知らないでしょう」が「んなこた知らんしょ」に変化しうる。また電子メールなどでは形態素解析に用いられる辞書には載っていない略語やフェイスマークが使われていることも多い(しかもそれらは一般に常用されるがために日々増えている)。
また、こういった文は校正が不十分なため、書き手の誤りが入っている場合が多くある。しかも、こういった誤りが繰り返されれば正用とみなされる場合すらある。このような文に対応した解析手法を頑健な解析と呼ぶ。このような文に対応するためには、正しい文が入力されるという前提の設計に基づく現在の形態素解析の手法を、誤りが含まれる様な文にも対処可能なように根本から見直す必要があるが、言語資源の不足のためあまり研究はされていない。
英語を含む多くの言語では、単語はふつう空白によってわかち書きされる。このため文を形態素に区切るのは日本語に比べると比較的簡単である (合成語の品詞や、形態素の品詞を見分ける問題は依然として残る)。ドイツ語では複数の単語から合成された名詞が空白による区切りのない一つの単語として表現されるため、わかち書きを行う必要がある。中国語でも単語間の空白がないため、日本語と同様にわかち書きを行う必要がある。また英語や日本語では活用する品詞の種類が少数に限られるため、単語の活用形も含んだものをすべて辞書に収めることができるが、ロシア語、フィンランド語などでは活用はほぼすべての品詞が起こすため、これらの言語では辞書に活用形を全て収めるのは非現実的である。
Stanford POS Tagger、
フリーなライセンスで、自由に入手出来る。
ChaSen(茶筌)、 (ラティス上の経路予測、HMM)
JUMAN、
KAKASI(kanji kana simple inverter)、
KyTea(キューティー)、 (点予測、線形分類)
MeCab(和布蕪)、 (ラティス上の経路予測、CRF)
NMeCab(MeCabの.NETへの移植)、
Sen(MeCabのJavaへの移植)、、
Igo (MeCab互換、Java形態素解析器)、
Janome (Python)、https://pypi.python.org/pypi/Janome
Kagome (Go)、 (ラティス上の経路予測、辞書の切り替えで韓国語の形態素解析も可能)
Rosette形態素解析システム、
Amazon、MSN、楽天などで利用されており、世界で最も利用者の多い形態素解析エンジンであると言える。
形態素解析エンジン言語郎、
大規模な辞書を持たず、1000語程度の学習モデルのみで未知語、新語、流行語、略語、話し言葉に対応する。
日本語形態素解析Webサービス(Yahoo!デベロッパーネットワーク)、
形態素解析API(gooラボ)、
IBM Watson Explorer (旧 IBM Watson Content Analytics)
:ChaSen用辞書。
:ChaSen,MeCab用の辞書。
:MeCab用の辞書。