目次
自然言語処理とは?
自然言語処理(NLP、Neuro Linguistic Programing、神経言語プログラミング)は、人間の言語である「自然言語」をコンピュータで分析するための処理のことです。自然言語とは、私たち人間が日常で使う、日本語や英語、ロシア語などの言語のことです。漢字にするといかめしいですが、今ここで読んでいる「この文字」や「あの文字」も、"Thank you!"も全て、自然言語です。
自然言語は、コンピュータの言語である機械語や、その翻訳用言語であるプログラミング言語とは、言葉のルールや構成、性質が大きく違います。そのため、自然言語データをそのまま分析しようとしても、コンピュータがうまく処理してくれません。
そこで登場するのが「自然言語処理」です。
自然言語処理を行うことで、例えば日本語や英語で書かれた文書などのデータを、機械学習を始めとしたコンピュータサイエンスの手法によって分析することが可能になります。
自然言語とプログラミング言語の違い
プログラミング言語とは?
コンピュータは、機械語(またはマシン語)と呼ばれる言語によって命令を受けることで作動しています。
機械語は、コンピュータのマイクロプロセッサ(CPU/MPU)が直接解釈・実行できる命令コードの体系として、0と1を並べた数値の羅列でできています。そのため、機械語を操って直接コンピュータを動かすことは、多くの人にとってはとても難しいです。
そこで、使われるのが、プログラミング言語です。
プログラミング言語は、自然言語(とりわけ英語)と似たようなルールでできており、機械語との翻訳コードとしての役割を果たします。私たちは、プログラミング言語を入力することで、機械語を操っているのと同じように、コンピュータを動かすことができるのです。
自然言語の曖昧さ
人間の言葉である自然言語とプログラミング言語の違いは、「曖昧さが許されるかどうか」です。
自然言語には、情報を曖昧なまま伝えることができるという特徴があります。
「情報を曖昧なまま伝える」とは、どういう意味でしょうか?
次の図をみてください。
上図のように、「寝不足の患者を診るお医者さん」という文が与えられたとき、自然言語(この場合は日本語)では、複数の解釈が可能です。Aでは、「寝不足」という状態が「患者」のことを表していると解釈しているのに対して、Bでは、「寝不足」が「お医者さん」の方であると捉えています。
このように、自然言語は、一つの文が複数の意味をもつという、実に曖昧な状態でコミュニケーションを可能にする特徴をもっています。
プログラミング言語の一意性
コンピュータは、「論理回路」と呼ばれる0と1の組み合わせによって命令を受け取り、命令通りに実行するための仕組みで成り立っています(0なら電気をオフ、1ならオンといった具合です)。
論理的なコンピュータに命令を正しく伝えるためには、曖昧さは許されません。
したがって、プログラミング言語では、言葉に含まれた情報が機械へと正しく伝わるように、言葉の意味や値を一つに確定させる必要があります。
この「言葉の意味や値が一つに確定している状態」のことを難しい言葉で「一意性(いちいせい)」と言います。
次の図をみてください。
上図は、プログラミング言語を使ってパソコンに命令をするイメージ図です。
「print('Hello world')」は、「”Hello world"という語を画面上に出力しなさい」という意味の命令文を意味しています。
ここで、最後の「)」を書き忘れてしまったとします。
そうすると、どうなるでしょうか?
ご覧の通り、プログラミング言語は、一文字間違えただけでも、エラーになり意図通りに作動してはくれません(※上図はあくまでイメージ図です)。
他方、私たち人間が、自然言語として「print('Hello world')」と「print('Hello world'」の2つを見たら、どうでしょうか?
おそらく、「片方は何かしらの理由で書き損じたんだろう」と解釈し、どちらも同じく「ああ、”Hello World"と書かせたいのかな?」と考える人が多いはずです(もちろん、別の解釈もありうるでしょう)。
このように、プログラミング言語では、自然言語とは異なり、曖昧性のない「一意的な」記述が求められます。
自然言語がもつ3つの曖昧さ
自然言語とプログラミング言語の違いがわかったところで、「自然言語が曖昧である」ということの意味をもう少しだけ深掘りしてみましょう。
自然言語には、大きく、次の3つの曖昧さがあります。
- 係り受け関係(どの言葉がどの言葉と繋がっているのか、という関係性)がはっきりとしない
- 単語のもつ価値に対して複数の解釈が可能
- 主訴(結局何が言いたいのか?)がはっきりとしない
係り受け関係の曖昧さについては、先ほど医者の例で説明したので、ここでは、残りの2つについてみていきましょう。
単語のもつ価値への解釈可能性:「低い」は肯定的?否定的?
物事の程度を表すような形容詞、例えば「高い」「低い」「大きい」「小さい」といった言葉は、文脈や、情報の受け取り手の価値観などによって、「その言葉が肯定的なのか否定的なのか」に対する解釈が曖昧になる場合があります。
次の例をみてみましょう。
飲食店に関する「低い」は、それぞれ、どういった価値をもっているでしょうか?
まず、左端の「金額が低い」は常識的に考えて、肯定的な文であると考えられます。
これは、店でサービスを受けるのであれば、金額が高いよりも低い方が良いと考えるのが合理的だからです。
次に、真ん中の「品質が低い」はどうでしょう?
これも、常識的に考えれば、否定的な文であると解釈できるでしょう。
同じお金を払うのであれ、わざわざ質の低い店を良しとする人はいないはずです。
しかし、三つ目の「(店の)敷居が低い」に関しては、金額や質のような解釈が難しくなってきます。
なぜなら、店の敷居の低さに関しては、その店を選択する人の好みに左右されてしまうからです。
したがって、「店の敷居」といった言葉にかかる場合の「低い」は、その程度が高い方が好ましいのか低い方が好ましいのかの方向性が定まらないために、言葉に対する解釈の違いが生まれることになります。
このように、自然言語では、「程度が低い」という意味自体は確定している場合でも、程度に対する解釈の違いによって、文の意味が曖昧になる場合があります。
主訴の不明瞭さ:本当に言いたいことは?
自然言語のもう一つの曖昧さに、主訴(しゅそ)の問題があります。
主訴とは、「結局、何が言いたいの?」に答える主張のことです。
具体的な例から考えてみましょう。
ある晴れた日の午後、友人とカフェで近況報告をし合っているときの、こんな場面。
それぞれ、主訴は一体どこにあるでしょうか?
どこにでもよくありそうな会話ですが、これら①と②には、情報の受け手にとって大きな違いがあります。
①では、話し手の言いたいことは明らかです。
話し手には楽しい話が思い浮かんでいないのですから、言いたいことは、要は「話がない」ということです。
他方で、②では、話し手は具体的な過去の経験をもとに話しています。
そのため、①とは異なり、「楽しい話」自体も主訴になり得る一方で、「感動した」ことも主訴になり得てしまい、ここに文の曖昧さが出現します。
このように、自然言語では、文の意味自体は確定しており、その中に含まれている言葉に対する捉え方が同じ場合であっても、「文の中でどこが重要な点なのか(主訴)」が曖昧になることで、解釈の多様性が生じる場合があります。
自然言語の曖昧さへの対応
これまでみてきたように、自然言語は非常に曖昧なツールです。
この曖昧さは、「短くスッキリ表現できる」という便利なメリットがある一方で、情報の受け手による解釈の違いを生むリスクを孕んでもいます。
自然言語処理は、まさに、こうした「解釈の曖昧さへの対応策」として、「周辺の語、共起性を見る」というアプローチにもとづいて実行されています。特に、機械学習の分野では、5つの実行ステップにしたがって、論理的に処理がなされます。
こうしたアプローチに基づいた、自然言語処理の具体的な実行手順については、次の記事を参照してください。
👉参考記事:『自然言語処理の5つの実行ステップとは?「曖昧さ」への対応策としての機械学習』