
こんにちは、ぱるです。みなさんの中で、「自然言語処理って何?」という質問に自信を持って答えられる人はどれくらいいるでしょうか?
よくわからないけど、つまり言語に関連したAIでしょ?なんて思っている方も多いのではないでしょうか。もし、自然言語処理という言葉を一度も聞いたことがない、という方でも、日常生活においてこの技術に全くお世話になったことがない人はほとんどいないと思います。例えば、コンピュータでキーボードを使ってかなを入力した後に漢字交じり文へ変換を行う、「かな漢字変換」や英語の文を翻訳するために「機械翻訳」を利用したことはありませんか?
このように、みなさんにとって自然言語処理はとても身近な技術で、気づかないうちに日常生活に多大な恩恵を与えているのです。
ということで、今回はみなさんにこの記事を読んでいただくことで、自然言語処理をもっと身近なものに感じ、「自然言語処理とはね・・・」と語れるくらいになっていただきたい、と思います!
自然言語とは
そもそも、自然言語とは何のことでしょうか?実は、読んで字のごとく、「私たち人間が日常書いたり話したりしている日本語や英語のような、自然な言語のこと」です。そして、これと対比した言語が、プログラミング言語です。この二つの言語の違いは、言葉の曖昧性にあります。自然言語には、文の意味や解釈が一意に決まらない曖昧性があります。例えば、以下のような例を考えてみてください。
「黒い目の大きい少女」
これは、少なくとも以下のような二通りの解釈が存在します。
- [黒い[目の大きい]少女]
→ 目が大きくて、肌が黒い少女 - [[黒い目の][大きい少女]]
→ 目が黒くて、体が大きい少女
このように、自然言語には言葉の曖昧性が存在していることがわかります。
確かに、日常的に会話してて、どっちの意味?って尋ねることは往往にしてありますね。
一方で、プログラミング言語でも同様に以下のような例を考えてみてください。
「4 * 6 + 1」
これは、「4と6を乗算したものと1を加算する」という一つの解釈のみしか存在しません。プログラミング言語は、コンピュータを制御するためのプログラムを記述する言語であり、コンピュータが同じ表現を常に同じように解釈して、同じように制御するような作りになっています。よって自然言語のような言葉の曖昧性が存在しません。
改めて、プログラミング言語とは、と考えてみると“自然”言語と対比する“人工”言語だったことがわかりました。確かに、同じプログラムを書いたのにコンピュータによって違う挙動になったら困りますね。
自然言語処理とは
以上のように、プログラミング言語とは異なり、自然言語には言葉の曖昧性が存在します。この言葉の曖昧性を踏まえて、自然言語を使って書かれた膨大なテキストデータを実用的に扱うために自然言語処理という技術が使われているのです。
人間でも意味をきちんと定義しにくい自然言語について、コンピュータに処理させるのはとても難しそうですね。しかし、それができたら言葉の曖昧性も解消できるのではないでしょうか?
では、これから自然言語処理の流れを簡単に説明していきます。
自然言語処理の仕組み
機械可読辞書とコーパス
初めに、言語処理を行う前段階として必要になるのが機械可読辞書とコーパスの構築です。
機械可読辞書とは、
「コンピュータが語彙を理解するときに必要な辞書のこと」
です。多くの場合、これは人間が使う一般的な辞書とは区別されています。
そしてコーパスとは、
「言語の使用方法を記録・蓄積した文書集合のこと」
です。コーパスの分析によって、状況に適した言葉の使い方や特徴を捉えることができます。近年では、コンピュータの処理性能や記憶容量が向上したことで、大規模なコーパスを利用した言語処理が行われるようになりました。
最近では、SNSなどによって気軽に個人の発言ができることや、日々大量の言葉のやり取りなども行われるようになりました。それらのデータを収集したらもっと大きなコーパスが作成できますね。
形態素解析
機械可読辞書とコーパスが用意できたら、ここからが言語処理の主な流れに入ります!(いよいよ)
まず初めに行われるのが、形態素解析と呼ばれる作業です。
形態素とは、
「文字で表記された自然言語の文において、意味を持つ最小の言語単位」
のことです。文は、形態素、または、複数の形態素から構成されています。
これだけ聞いてもよくわからないですよね。
では、実際に例を使って形態素解析が担う処理を見てみましょう!
形態素解析処理
例えば、先ほど挙げた「黒い目の大きい少女」というフレーズを考えてみます。
1.形態素で分割

ここで行われているのは、先ほど説明した形態素という単位で、文を分割するという作業です。
こうすることで、
- 文の形態素分割 → 意味のある情報の取得
が可能になります。
このような、「文章において語の区切りに空白を挟んで記述する処理」は、わかち書きと呼ばれています。
一方で、今回は例として日本語の文を扱っていますが、英語の文を解析する場合は挙動が少し異なります。一般的に、英語の文は初めから単語間にスペースが設けられているため、日本語と比べると容易に単語分割の処理を行うことができます。このように、「単語分割」処理は言語によって少し違いがあります。
2. 形態素ごとに品詞を付与

ここで行われているのは、先ほど分割した各単語に適切な品詞を割り当てるという作業です。これによって、例えば、文章中から“名詞”のみを抽出してキーワードの集合を作ることが可能になります。
ここで、どれほど詳細な品詞を付与するかは、形態素解析器によって異なります。以下のサイトでは、JumanとChasenと呼ばれるメジャーな形態素解析器で使われている品詞体系についてまとめてありますので、気になる方はご覧ください。
3. 形態素ごとに語形変化の解析
ここでは、形容詞や動詞がどのように語形変化しているかについて調べています。この結果を辞書に当てはめることによって、より正確な単語分割結果が抽出できます。
例えば、“走る” が、 “走ります”という語形変化などがあります。
以上のような流れに沿って文の解析をし、形態素解析という処理が行われています。このように行われた解析結果は、一つに定まるでしょうか?実はそんなことはありません。以下の例を見てみてください。

これは、「かれがくるまでまつ」という文について形態素解析を行った結果をグラフで表したものです。このように、結果としての候補が複数挙げられることは往々にしてあります。その中からどれが適切な形態素解析の結果としてふさわしいかを判断する方法はいくつか存在します。今回はその中から、「最長一致法」について説明します。
最長一致法
これは、「文頭から候補として挙げられた形態素を比較し、形態素が最長のものを優先する方法」です。例えば上記の「かれがくるまでまつ」という文では、3語目の文字数が多い「彼が車で待つ」が最適結果となります。

「最長一致法」以外にも「二文節最長一致法」、「形態素数最小法」などといったヒューリスティックな知識を用いた手法や、単語の共起関係について系統的に調べる手法などもあります。
構文解析(係り受け解析)
次に行われるのが、構文解析という作業です。係り受け解析とも呼ばれます。ここでは、形態素解析で得られた単語間の関係性について解析を行います。再び「黒い目の大きい少女」というフレーズを例として考えます。
上記で説明したとおり、このフレーズには二通りの解釈が存在します。これらを構文木と呼ばれる表現方法を用いて構文解析の結果を出力したものが下のようになります。


このように構文木を使うことで、単語間の係り受け関係が可視化され、文法的にどのような構造をしているのかを調べることができます。
意味解析
そして、構文解析をした文から正しく意味内容を解釈するために行われるのが、意味解析です。先ほどまでのように、構文解析の時点では二つの構文木はどちらも正解となり、一つの文に対して解釈の仕方が複数存在することになります。この中から正しい解釈を選択するために、意味解析はとても重要な処理なのです。
意味解析を行うためには、“意味”という概念がわからないコンピュータに、プログラムを使ってうまく自然言語文の意味を表現する必要があります。しかし、ある一つの単語にも意味は複数存在し、その複数の意味から、他の単語間とのつながりなどを考慮して適切な一つを選択しなければいけません。そのような処理によって、候補となった複数の構文木から正しい1つに絞ることができるのです。
文脈解析
最後に行われるのが、文脈解析です。これは、複数の文に対して形態素解析と意味解析を行い、文を超えたつながりについて分析します。文脈は、文章中に現れる語の関係や文章の背景に隠れた知識などといった複雑な情報が必要になるため、意味解析以上に難しい処理となっています。
このような難しさが未だ存在していることから、文脈解析を行うシステムはまだ実用化されていません。
ここでは、この文脈解析を行うための解析について紹介します。
照応解析
照応解析とは、代名詞や指示語などといった照応詞の指示内容の推定や、ゼロ代名詞と呼ばれる省略された名詞句を補完する処理のことです。
まず、照応詞について説明します。
例えば、「太郎はスーパーに行った。そこでお菓子を買った。」という連続した文を考えてみてください。
二文目で使われている、“そこ”という指示語は何を指しているでしょうか?これは明らかに、一文目で出てきた、“スーパー”を指しているとわかると思います。このような前にでてきた情報を指す指示詞や代名詞のことを照応詞といいます。

次に、ゼロ代名詞について説明します。
例えば、「今日花子はいつもより早く家についた。しかし、夕食を食べなかった。」という文について考えてみましょう。
二文目では、“夕食を食べなかった”の動作主である“花子”が省略されています。このように、日本語では主語や目的語が明確な場合、頻繁に省略が行われます。この省略された名詞句のことをゼロ代名詞といいます。

談話解析
これまで単一の文や周囲1、2文に対しての分析を行ってきましたが、実際の会話は、対話や独話などと呼ばれる、いわゆる複数文によって構成され、成立しています。このような、関連した一連の文(談話)を対象にして、文のまとまり、文章の構造、意味などを解析する処理のことを談話解析といいます。
談話についての処理は、複数文の内容に加えて、状況や知識などの背景に隠れている情報を考慮する必要があるため、通常の文を対象にするより難しい処理となっています。
しかし、このような明示されていない、暗黙な情報をコンピュータに理解させるにはどうしたら良いでしょうか?文が複雑になればなるほど、この不明瞭な情報の認識は、人間にとっても困難なものとなります。
関連記事
ここでは、自然言語処理に関連する記事について紹介します。
- これまで紹介した自然言語処理における各技術について、全国にある様々な大学の研究室で学ぶことができます。
- 企業の中でこのような自然言語処理を活用した製品を導入・活用をした、事例が多く存在しています。
- 上記で説明した構文解析や意味解析などの要素技術を組み合わせた「機械読解」という技術があります。この技術を生かして、現在人間の読解能力を超える精度を達しています。
- 自然言語処理を活用すると、人間と機械が対話を行うことができます。対話システムとして身近に使用できるLINEのチャットボットについて、3つのテーマに関する対話を実践してみました。チャットボットによって返答の仕方に違いが見られ、特徴をまとめました。
まとめ
このような曖昧な情報をうまく形式化することができれば、そのままプログラムに組み込むことができるため、意味解析や文脈解析の精度が上がり、自然言語処理全体の性能が向上すると考えられています。このようなことは、形式意味論、形式語用論などの基礎研究に関連しています。これらは言語学と呼ばれる分野に存在し、言葉というのはそれほど単純なものではないという概念と向き合っています。全て深層学習を使えばなんとかなるだろうという考えだけでは、達成できない部分に対して、これからは「人がどのようにして言葉を理解しているのか」という形式的な追求をしていくことが重要なのです。
このように自然言語処理は大きく分けて4つの分析を経てようやく達成される大規模な技術であり、これを達成するためには深層学習だけでなく、言語学や統計学などの様々な分野が密接に関係していることがわかりましたね!文系だし、自然言語処理なんて、結局AIでしょ?なんて思っていた方も、少しでも興味を持っていただければな、と思います。