参考文献

形態素解析エンジン

形態素

形態素(morpheme)とは文を構成する言語上の最小単位、あるいは、文中で意味を持つ最小単位といってもよい。 つまり、文は文法または発話的要請にしたがって語形変化した形態素が連なっているとみなすのである。 形態素は「単語」よりも小さい単位である。

形態素は、言語によってその形状は異なっている。 英語では、studying = study + ing(活用語) や kindness = kind + ness(形容詞の名詞化)、unfortunetely = un + fortunate + ly(形容詞の副詞化) などのように、単語は[語幹]+[接辞]のような形態素からなっている。 一方、日本語では、[食べる] =「食べ」+「る」(活用語)、[親切さ]=「親切」+「さ」(形容詞の名詞化)、[運悪く]=「運悪い」+「く」(形容詞の名詞化)、[大都市]=「大」+「都市」(複合語)などのように、単語では活用語、派生語、複合語として形態素が現れる。

欧文のテキストの解析では、形態素区切りを決定した上で、その品詞を定める作業が必要になる。 一方、日本語のテキストには、「単語」が空白で区切られて表記されている英語などの欧文文字言語とは異なり、「単語」が空白で区切られて表記されないという日本語文字表記上の大きな特質がある。 日本語テキスト解析の実施には、まずテキストに現れている文字列に対して適切な単語境界を見いだすことが必要で、そこから形態素に分解して、その品詞の活用形を定める作業となる。 テキストに対して形態素に分解・決定する作業を形態素解析(moriphological analysis)という。

日本語形態素

日本語テキストの情報処理のためには形態素を決定するためには、まず与えられたテキスト内の文字列を単語に分解する前処理が必要である。 この過程で必要な知識は、単語辞書と品詞や単語の接続可能性を表した可能性辞書である。 そして、それぞれの形態素がテキスト内でのどのような文法的役割を担っているのかという文の構文構造を判定する構文解析(syntax anaysis)が必要である。 これらの段階は言語の文法的解析である。 この段階を経て、格文法(case grammar)を援用して格構造を散りだして、形態素列が総体として担うテキストの意味解析に進む。 そもそも言語には文法的にも曖昧さが含まれており、したがって意味も与えられた文字列からだけで確定するようなことははなく、一般的には文脈から意味が生じているのが実情だ。

『ここではきのもをぬいでください』の形態素解析は本質的に曖昧にならざるを得ない。 「ここ/で/はきもの/を/ぬいで/ください」なのか「ここ/で/は/きもの/を/ぬいで/ください」なのかは、文が使われている状況や前後の文脈によってでしか意味を推定できない。

日本語では形態素を取り出すまえに、文字列から単語を切り出すこと自体が最初の関門である。 たとえば自動翻訳を目的とするのであれば、その形態素の切り出しと文法構造の決定は正確な他言語への翻訳のための大前提であることを思うと、形態素解析はテキスト情報処理の第一歩であると同時に重要な役割があることがわかる。 この形態素解析を行なうソフトウエアが形態素解析エンジン(Morphological Analyzer)である。

日本語全文テキスト検索において、文字に基づいたインデックス化処理を行っておけば、形態素分解を経ることなく大量のテキストから目的の文言を発見することができる。

MeCab 和布蕪

オープンソースの日本語形態素解析エンジンには幾つかのファミリーが知られている。 以前はChaSenが広く使われていたが、現在開発が留まっている。 今日ではさらに性能がよいとされるMeCab(和布蕪)がよく使われている。 MeCab(和布蕪)とは、 京都大学情報学研究科とNTTコミュニケーション科学基礎研究所とで開発されたオープンソース日本語形態素解析ソフトだ。

MeCabが形態素解析結果として返す情報は次のような内容である:

表層形  品詞  品詞細分類1  品詞細分類2  品詞細分類3  活用形  活用型  原形  読み  発音

MeCab/RMeCabのインストール

ここではMeCabをR環境から呼び出して使うインターフェースRMeCabを利用します。 RからMeCabを使うための環境をインストールを整えるのは難しくありません。

それぞれのOSでRMeCabをインストールする前にR環境(64ビット版が望ましいでしょう)をインストールしておきます(R projectからダウンロードして指示に従うと簡単にインストールできます)。 さらにRStudioをインストールするとR環境を多少簡便に利用することができます。

RMeCabのインストール全般については、石田基広氏のサイト RとLinuxと‥を参考にしてください。 まず、MeCabをそれぞれのOSにインストールすることから始めます。

さらに、R環境からMeCabを利用するためのインターフェース RMeCabをインストールする。 その詳細はRMeCabを参考。

形態素解析の実例

形態素解析の難しさは、だれでも経験することであるが、次の2点を挙げることができる。 第一点目は、テキストに使われている言語やその文法それ自体をよく知らない場合がある。 この例として、源氏物語「桐壺」冒頭を取り上げよう。 あまりにも有名なためかわかったような気になっているが、筆者の古文の素養ではよくわからない (^^; 。

「いづれの御時にか女御更衣あまたさぶらひ給ひける中にいとやんごとなき際にはあらぬがすぐれてときめき給ふ有けり」
第二点目は、文が環境に大きく依存して曖昧な場合があることである。
「ここではきものをぬいでください」

では、RからMeCabにアクセスして(デフォルト辞書を使っている)、これら二つの形態素分析を実行してみよう。 関数 RMeCabC( ) は、MeCabに渡す文字列(二重引用符「"」で挟む)の形態素解析結果をリスト形式で返す。 表示させると結果を縦に並べて多数の行数を要するので、ここでは unlist( ) を使ってその結果をベクトル表示させている。

> library(RMeCab) <-- MeCabインターフェース RMeCabライブラリの読み込み
> kiri <- RMeCabC("いづれの御時にか女御更衣あまたさぶらひ給ひける中にいとやんごとなき際には
あらぬがすぐれてときめき給ふ有けり")
> unlist(kiri)
          動詞           助詞         接頭詞           名詞           助詞           助詞 
      "いづれ"           "の"           "御"           "時"           "に"           "か" 
          名詞           名詞       フィラー         接続詞           助詞           動詞 
        "女御"         "更衣"           "あ"         "また"           "さ"         "ぶら" 
          動詞           名詞           動詞           名詞           助詞           副詞 
          "ひ"           "給"       "ひける"           "中"           "に"         "いと" 
        形容詞           名詞           助詞           助詞           動詞         助動詞 
"やんごとなき"           "際"           "に"           "は"         "あら"           "ぬ" 
          助詞           動詞           助詞           名詞           名詞           動詞 
          "が"       "すぐれ"           "て"     "ときめき"           "給"           "ふ" 
        接頭詞           名詞 
          "有"         "けり" 
この形態素結果が厳密な意味で確からしくない(筆者にはそれすらわからない (^^; )のは、MeCabにこの時代の和文日本語文法と語彙を考慮して実装していないことと、利用する辞書が十全でないためだ。

MaCab結果をテキストに照らし合わせて検討すると、注目している単語の取り扱いが不十分な場合が頻発することがわかる。 正確な形態素解析を実行するためには辞書の整備が必要となり、独自に辞書定義して常時ブラッシュアップしなければならない。 また、形態素解析に基づいて何らかの結論を主張する場合には元のテキストに戻って検証することが欠かせない。

ここではデフォルトの辞書の範囲だけで形態素解析をおこなうために、正確なテキスト解析とはならないことをあらかじめ断っておく。

ちなみに、文字列 "xxxx" に対して RMeCabC("xxxxx", 1) のように、オプションとして第2引数に 「1」 を指定すると形態素原型を返す。

次の例をみてみよう。

> kokode <- RMeCabC("ここではきものをぬいでください"))
> unlist(kokode)
      名詞       助詞       助詞       名詞       助詞       動詞       助詞       動詞 
    "ここ"       "で"       "は"   "きもの"       "を"     "ぬい"       "で" "ください" 
どうだろうか、思った結果となっただろうか。 ここでのポイントは、文字列中の部分文字列「はきもの」をどこで区切るのかである。 ここでの結果のように「は+きもの」であるなら、『ここでは着物を脱いで下さい』という意味となる。

一方、形態素分析において仮に「はきもの」と区切った場合、(構文解析を経て)『ここで履き物を脱いで下さい』という全く違った意味になる。 この両者の解釈を区別するいかなる手がかりも与えられた文字列には存在せず、どちらを採用すべきかはこの文字列のその側に発話状況文脈に完全に依存する。 かくのごとく、テキスト処理は簡単ではなく、今日においても人工知能の中心的テーマであり続けていいる。

ただし、言語を獲得したヒトは、このような形態素分析を行いながら構文解析を実行し、次いでテキストの意味を逐次的に理解しているわけではない。 脳内の言語処理、そもそもヒトが言語をどのように獲得するのかというプロセスについてN.Chomskyの大胆な仮説「普遍文法」があるのだが、脳レベルにおける高次機能としての言語解明にはほど遠い。 言語は依然として未知のベールに覆われており、言語科学には多くの挑戦的な課題が沢山ある。

sky_squareVery Tiny part of Formal Language Theory

一方、コンピュータを使った言語情報処理では、文字列集合であるテキスト(あるいは音声集合)に対して、単語を切り出してその文法的属性を決定し、構文解析を経て意味を抽出する「正攻法」のアプローチが人工知能の文脈で研究されてきた。 一方、意味属性を割り当てながら文字列・音声からなる膨大なデータベースを作成して、入力した言語情報に対するパターンマッチを実施するブルートフォース方式も今日ではきわめて有効である。 実際、Google VoiceApple Siriなどのリアルタイム音声サービスは後者の技術である。 この場合、確かに人知を越えることがあるのだが、そのように処理されるプロセスは「知的」といえるのだろうか。