AI・機械学習 自然言語処理

【入門者向け】自然言語処理(Natural Language Processing; NLP)とは

2020年9月25日

今回は自然言語処理の概要を解説したいと思います。

自然言語処理とはそもそも何か?、どういったことができるのか?、どんな課題があるのか?ということを中心に見ていきたいと思います。

本を読んでしっかりと勉強したいという方は、こちらの投稿を参考にしてみてください。

自然言語と自然言語処理

まず、自然言語処理の前に“自然言語”とは何か?について説明します。

自然言語とは、普段私たちが話したり書いたりしている言語のことを言います。

じゃあ“自然ではない”言語ってあるの?となりますが、自然ではない言語があります。

それは、“人工言語”と呼ばれるもので、プログラミング言語などが人工言語に当たります。

そして、自然言語処理とは、自然言語をコンピュータを使って処理する学問や研究のことを指します

自然言語処理とは、普段私たちが話したり書いたりしている言語をコンピュータを使って処理すること。

自然言語は人間が作り出したものであり、人間が非常に得意とするものです。
ですので、人間からすると簡単かもしれませんが、機械にとってはそう簡単には処理することができません。

実は、私たちが当たり前のように思っていることも、実はすごく複雑で、常識や文脈、表情、話し方などを総合的に勘案して判断しているのです。

では、難しくなってしまう原因をいくつかご紹介したいと思います。

多義語と語義の曖昧性解消

例えば、単語には色々な意味があります。

例えば、「お茶をたてる」なんて言い方がありますが、これは別にお茶を立たせたりするわけではなく、もちろんお茶というものを建設するわけではありません。

こういった一つの単語で複数の意味を持つ語を“多義語”と言います。

そして、複数の意味を持つ解釈から一つの妥当な意味を選ぶことを“語義の曖昧性解消”と呼びます。

複数の意味を持つ単語を“多義語”といい、その中から一つの妥当な意味を選ぶことを“語義の曖昧性解消”という。

ただし、日本語では、漢字があるので英語と比較すると多義語はそれほど問題にならない場合が多いです。

このように言語によって難しさは違ってきます。

日本語では語の区切りを同定する必要がありますので、まずそこから難しくなっています。

英語については単語の間にスペースがありますので、そこは難しくありません。

一方で、英語は1つの語が複数の品詞を持つことが多いので、品詞を推定することが難しくなります。

また、日本語は漢字があるので単語の意味というのは英語に比べて複雑ではありません。

英語における多義語の代表例はbankで、「土手」と「銀行」という意味があり、文脈によってどちらの意味かを判断しなければなりません。

少しモデルの話をしますと、ひと昔前まではそういった文脈に依存した意味というものを捉えることはできませんでしたが、2018年に提案されたELMoやBERTといったモデルでは、その部分が改善され、文脈に依存した意味を考慮することができるようになりました

構文の曖昧性と構文解析

例えば、

「汚くなった友達のテントをもらったんだけどさぁ、やっぱりきれいなやつの方が良かったなぁ。」

という文章を見て、人間であれば「汚くなったテントをもらったのか」とわかります。

「汚くなった友達」と思う人はほとんどいないですよね。

しかしながら、機械には「友達が汚い」のか「テントが汚い」のは自明ではありません。

こういった複数の解釈ができる構文構造を“構文の曖昧性”と呼びます。

そして、この曖昧な構文の中から妥当と考えられる構文を選ぶことを“構文解析”と呼びます。

複数の解釈ができる文章・構文構造を“構文の曖昧性”といい、その中から一つの妥当な構文を選ぶことを“構文解析”という。

言語にはこういった実は難しい問題がたくさん存在します。

そういったものを解決しながら、機械に言語を教えているというイメージです。

自然言語処理で何ができるか

では、自然言語処理でどんなことができるか、もしくはどんなことを実現しようとしているかについて、盛んに研究されている例をご紹介したいと思います。

文書分類・センチメント分析

文章がポジティブかネガティブかを判定したり、文書のトピックを判定したりします。

例えば、株価の予測の場合だと、ニュースにセンチメントを例えば「良い」「どちらでもない」「悪い」と振ることによって、「良い」ニュースが出れば株価は上昇すると予測し、「悪い」ニュースが出れば株価は下落すると予測することができます(もちろんそこまで単純ではありませんが)。

それ以外にも、文章を読んでそれがスパムメールかそうでないかを自動的に判定したりすることも可能です。

情報抽出(Information Extraction)

情報抽出(Information Extraction)には“関係抽出(Relation Extraction)”“イベント情報抽出(Event Information Extraction)”があります。

最近では、日本における商用利用は、チャットボットについてこの情報抽出が増えてきているそうです。

関係抽出は、「株式会社XXは株式会社〇〇の子会社です。」といった文章から、株式会社XX=子会社、株式会社〇〇=親会社、という関係を自動で抽出します。

他にも、どこどこはどこどこの供給元、もしくはお客さん、などといった関係を抽出し、大量の文書から自動でデータベースを作成することが可能です。

イベント情報抽出は、「XX社が〇〇社を買収した」という文章であれば、誰が=XX社、誰を=〇〇社、どうした=買収した、という形で誰が何に何をした?や、どこで何が起こった?ということを自動で取得します。

これにより、自分たちが目的とする重要な情報のみを取りだすことが可能です。

機械翻訳

こちらは馴染みのある方が多いのではないでしょうか。

Google翻訳などが機械翻訳に当たり、人間の手ではなく、機械が自動的に翻訳します。

英語・フランス語間のように似たような言語であれば、以前からある程度うまく翻訳できていましたが、日本語については、おかしな訳が出てくることも多いという状況だったと思います。

そこでブレイクスルーとなったのが、このサイトでも紹介しているニューラル機械翻訳です。

ニューラル機械翻訳はニューラル・ネットワーク(ディープ・ラーニング)をベースとしたモデルを使い、大量の翻訳例を教師データとして学習するものです。

それまではルールベースの翻訳統計的機械翻訳という手法がずっと研究されていましたが、ニューラル機械翻訳が出てきた2014年以降、数年で一気にそれらの精度を超えました

いつかプロの翻訳レベルを超えられるか、というところが一つのポイントになるかもしれませんが、そのレベルは簡単ではないとも言われています。

質疑応答

2011年に「Jeopardy!」という米国のクイズ番組で、IBMの“Watson”と名付けられたコンピュータが人間のチャンピオンを破ったことで、一躍有名になりました。

例えば、「世界一長寿の国はどこですか?」という質問に対する回答の考え方をこうです。

まず国を回答する必要がある、と認識します。
次に、「世界一 長寿 国」などで情報を検索し、重要度でランク付けした検索結果を抽出します。
そして、そのランク付けされた検索結果から、国の記述を抽出し、回答するというものです。

これが「世界一長寿の国の平均年齢は何歳ですか?」だと、年齢なので数値を回答する必要があると認識します。

Watsonは、回答の確信度を計算して、相手の点数や自分の手数などを考慮して回答するか、しないかも判断していたとのことです。

こちらは、コールセンターのチャット・ボットとして今もっとも商用利用が進んでいる分野です。

音声認識・対話システム

こちらはGoogle HomeやAmazon EchoなどのスマートスピーカーやSiriに代表されます。

「OK Google」や「アレクサ」、「Hey Siri」と呼びかけるとその声に反応し、「テレビを付けて」とか「音楽をかけて」とか「明日の天気は?」と言うと、対応してくれます。

こういった呼びかけに対応するだけでも、実は非常に難しいタスクです。

「明日の天気を教えて欲しい」というような意味を持つ言い方でも、「明日の天気を教えて」、「明日の天気は?」、「明日晴れる?」「明日の降水確率を教えて?」など多数の言い回しがあり、完全に網羅するのは相当負荷が高くなります。

こういった言い回しに柔軟に対応する必要があり、そのためには、ユーザーの意図を理解していないといけません。

私もGoogle Homeを使っていて、まだまだ、人間レベルとは言えないと感じますが、それでも便利であること使い方の幅が今後広がるであろうことを考えると、今後はますます普及していくと思います。

個人的にはさらなる発展を非常に期待しています。

文書要約

長い文書を自動的に短く要約してくれるものです。

仕事では便利かもしれませんね。

例えば、非常に長い文書があって、それを瞬時に重要なポイントだけ要約する、ということが可能です。
これにより、例えばその文書が開示された直後に概要を掴んで判断できるかもしれません。

ちなみに文書要約には、重要な箇所を抽出する「抽出型」と、重要なポイントをまとめる「要約型」があり、どちらも精力的に研究されている分野の一つです。

自然言語処理でどこまでできるか

自然言語処理はここ数年で大きく発展してきました。

特に、画像認識と同様にニューラル・ネットワーク、ディープ・ラーニングを使ったモデルの発展が大きいです。

タスクによっては人間のレベルに極めて近づいてきたと思いますし、実際に一部のタスクでは人間のレベルを超えているとも言われます。

質疑応答システムはチャットボットとして、コールセンターなどで実際のビジネスとして利用されていますし、翻訳もまだ完全ではないかもしれませんが、十分参考になるレベルです。

金融業界でも、ニュースや有価証券報告書の文章に対して、センチメントを付与し(センチメント分析)、株取引に利用するといったこともされています。

音声対話システムもGoogle、Alexa、Siriなどの性能は向上しており、XXの試合の結果を教えて?、XXの順位を教えて?とか、「軟水と硬水の違いを教えて」など聞くと正しく答えてくれるレベルにまで来ています。

ということで、各タスクに特化したシステムを構築することにより、かなり実用化はされてきています。

自然言語処理は、タスクに特化することで、人間のレベルを超えているタスクもあり、色々な分野で実用化されてきている。

自然言語処理は今後どうなっていくか

ひとつのテーマはより汎用的な言語モデルを作ることです。

人間並みの精度を出すには、今はまだタスクごとに大量の教師データが必要です

そして、少し分野の違うタスクになると、精度が大幅に悪化するという現象も見られています

人間はいちいちタスクごとに大量の教師データは必要ではありません。

分類タスクであれば、少量の例や説明があれば、大体は行うことができます。

そういった人間のような汎用的な言語もモデルを作り、少量のデータに対しても精度が出るようなモデルが必要とされると思います。

また、タスクによっては全く人間のレベルには達しておらず、使えないものであることも現実です

OpenAIのGPTモデルに関する一連の研究にもあるように、今後は人間のようにより少量のラベルで様々なタスクをこなすことができる仕組みが開発されていくことになると思います。

また、スマートスピーカーをお持ちの方ならわかると思いますが、音声認識システムは向上しているとは言え、まだまだ人間のように会話できるわけではありません。

現状のスマートスピーカーは、アラームの設定や音楽をかけたり、天気やニュースを聞いたり、電化製品を付けたりと特定の機能しか多く使われていない印象です。

これを乗り越えて、より汎用的な会話やタスクがこなせるようなると、スマートスピーカーが日常でも本格的に利用されることになると思います。

ということで、自然言語処理技術が人間が不要になるようなレベルに達するには、まだまだ時間が必要そうです。

とはいえ、上記のような問題点は精力的に研究されており、いつかというのを予測するのは難しいですが、いずれは解決されてゆくものと考えています。

まだ、人間のレベルにはまったく達していない部分も多く、課題もまだ残っている。
将来的には解決されてゆき、更なる発展が見込まれる。

まとめ

今回は自然言語処理の基礎的な内容について見てきました。

個人的な考えとしては、自然言語処理はまだまだ可能性は秘めていますが、現時点では、どういった使い方ができるか?を一生懸命考え、工夫することで、まだ他社・他人がやっていない面白いアプリケーションを作ることができると思っています

ですので、現状では、今のモデルで使えそうなタスクを選別して、そのタスクに必要な学習をさせて、応用するということが必要だと思います。

つまり、どのようなデータがあって、どのようなタスクに使えるか?ということを理解することは非常に重要だと思います。

これは自然言語処理の概要だけ掴んでいるだけではできません。

自分たちでどういうタスクなら応用可能か、どのようなモデルが使えそうか、どれぐらいの件数をアノテーションをすべきか、結果が良くないときにどういった改善方法が考えられるか、などなどたくさん検討することがあります。

ですので、やはりしっかりとモデルの中身を理解し、自分で手を動かし、データや結果をじっくりと精査するということを通じて、技術を深めていく必要があると考えます

自然言語処理を使って課題を解決していきたいのであれば、しっかりと理解し、自分で結果の良し悪しなどの判断ができるようになる必要がる。

参考にした本

今回、この記事を書くにあたって、以下の本を参考にしました。

自然言語処理の歴史や各タスクの歴史も含めて詳しく載っています。
意味解析などのテクニカルなところは多少時間がかかるかもしれませんが、それ以外の部分は分かりやすい内容になっていますので、入門者の人にもオススメです。

より詳しく知りたい方へ

もっと深く、技術的な中身まで自然言語処理を理解したいという方は、以下の投稿を参考にしていただければと思います。

-AI・機械学習, 自然言語処理