自然言語処理(NLP)の手法
ここでは、自然言語処理(NLP)の4つの工程に関して詳しく説明します。
形態素解析とは?
はじめに、「ステップ1:形態素解析」をご紹介します。
「形態素」とは語より小さい単位で意味をもつ最小単位を意味します。化学の世界で語られる「元素」のようなものであるとイメージすれば分かりやすいかもしれません。
英語の「形態素」について考えてみましょう。例えば、現在分詞「going(ゴーイング)」は、語である「go」と進行形を意味する「ing」の2つの「形態素」から成立している事が分かります。文章というものは、このように活用された形(=定形)の語から成り立っていますので、自然言語処理の分野ではその定形の語を構成している「形態素」というブロックに分離をする所から解析を始めるのです。
さて、英語の「形態素解析」はアルファベット言語系によりシンプルな傾向がありますが、日本語はもう少々複雑です。連用形の後ろには助動詞が来たり、連体形で名詞が来たり、「ed」「ing」といった明瞭な「形態素」ブロックが存在しないなど、根本的に成り立ちと仕組みが異なります。よって、日本語の「形態素解析」は「語」ではなく「文節」に対して行われるのが一般的です。自然言語処理を持つコンピュータとしては、そのように日本語を文節に区切りにした方が理解しやすいのです。
例えば、「今日も良い天気です」という文章があるとしましょう。この時、「形態素解析」は英語のように「今日」を「今」「日」と分けたり、「良い」を「良」「い」に分けたりと、そのような分離を行いません。これを行う場合は、「今日(名詞)/も(助詞)/良い(形容詞)/天気(名詞)/です(助動詞)」というような分離を行います。
形態素解析・例1:
「今日も良い天気です」
→「今日(名詞)/も(助詞)/良い(形容詞)/天気(名詞)/です(助動詞)」
形態素解析・例2:
「行かなければならなかった」
→「行か(『行く』の未然形)+なけれ(打消しの助動詞)+ば(接続助詞)+なら(接続助詞)+なかっ(『なる』の未然形)+た(『た』の終止形)」
このように言語体系によってその方法は異なりますが、自然言語処理ではまずはその言語において「元素」として機能しているような語や文節に区切る「形態素解析」を行い、言語というものの理解の第一歩を踏み出すのです。
◆形態素解析のツール
機械学習・深層学習を用いて行う自然言語処理のタスクはツールを使って解析するのが一般的です。
>> 機械学習とは?概要やアルゴリズムを詳しく解説!
>> 深層学習について詳しく説明!
有名な日本語形態素解析ツールとしては、MeCab ・JUMAN ・Janome ・ChaSen があります。
なかでも、MeCabは 誰でも自由に利用できる形態素解析エンジンで、紹介している他の解析エンジンよりも高速に動作するのが特徴です。実際には日本語形態素解析以外にも様々な用途で使用することができます。MeCab公式ページ では様々な使い方が紹介されており、インターネット上の情報も非常に豊富です。様々なプログラミング言語で使用できるので、形態素解析を始めるならMeCabから入るのが良いでしょう。
MeCabの辞書であれば「mecab-ipadic-NEologd 」などが有名です。
公式ページで紹介されているその他の特徴としては、以下のようなものが挙げられています。
辞書などのデータに依存しない汎用的な設計
条件付き確率場(CRF)という計算モデルに基づく高い解析精度
他のツール に比べて高速
Double-Array(ダブル配列)の採用により辞書の検索が高速
再入可能なライブラリ
MeCab(和布蕪)とは/github.io より引用
また、初心者ということであればJanomeから入るのも良いでしょう。JanomeはPure Pythonで書かれており、辞書を内包しているところが特徴です。実際にJanomeを使用したい場合は以下のサイトがおすすめです。
Janomeインストール方法、使い方/note.nkmk.me
また、形態素解析の詳細な説明は以下の記事よりご覧ください。
[関連記事]
形態素解析とは何か?詳しく知りたい方はこちらの記事で詳細に解説していますので、是非ご覧ください。
>> 形態素解析とは、実装を交えて解説します。
構文解析とは?
「ステップ1:形態素解析」が終わりましたら、自然言語処理は「ステップ2:構文解析」へ移行します。この「構文解析」は「統語解析」と呼ばれる事もあります。この解析の簡単な説明としては、「文法的な解析」という事になるでしょう。文が与えられた際、「主語はどれか」「述語はどれか」など、文を構成する要素である語の文法的役割を見つけ出すのです。
コンピュータはそうした文法的役割を「主語 - 述語関係」「修飾 - 被修飾関係」といった具合に、「文を構成する複数の記号間の関係(ツリー関係)」によって処理します。例えば、先ほどのシンプルな文章事例を再び引用した場合、「構文解析(統語解析)」は次のようなツリーの関係性を導く事になります。
構文解析・例:
「今日もいい天気です」
今日→も/も→良い/良い→天気/天気→です
「構文解析」には幾つかのアプローチが存在しています。その中でも最も典型的な解析方法は「下降型(トップダウン)」「上昇型(ボトムアップ)」「下降型」はツリーの最上部にある開始記号「文」から、構文規則を適応しながら下に向かって品詞列を解析していく方法です。「上昇型」はその逆で、最下部にある品詞列に統語原則を適用して上昇し、開始記号の「文」を解析します。
日本語構文解析のツールとしては、CaboCha ・KNP が有名です。
CaboChaは、公式ページ上で以下のような特徴を紹介されています。
Support Vector Machines (SVMs) という機械学習モデルに基づく, 高性能な係り受け解析器
PKE(キーフレーズ抽出ライブラリ)の採用により、分類が高速
固有表現解析が可能
柔軟な入力形式
言葉同士の関係性をユーザ側で再定義可能
データを用意すれば, ユーザ側で学習を行うことが可能
Double-Array (ダブル配列)の採用により辞書の検索が高速
C/C++/Perl/Ruby ライブラリが使用可能
CaboCha(南瓜)とは/github.io より引用
KNPはJUMANを作成した京都大学の研究室が作成した係り受け解析器で、JUMANの出力を入力とするのが特徴です。
意味解析とは?
ここまで自然言語処理における「ステップ1:形態素解析」「ステップ2:構文分析」は、文として現れた複数の語または文節のツリー関係を定めて、文章全体の構造を定める事でした。しかし、この時点ではコンピュータはまだ人間のように文章に含まれている「記号の解釈」が出来ているだけであって、「現実的な意味」の理解には至っていません。例えば、「ステップ1:形態素解析」「ステップ2:構文分析」によってコンピュータが「扉」という文字を検索出来たとしても、その「扉」が現実的に何を意味するのかについては理解出来ません。よって、私たちがそのコンピュータに「扉を開けて」とお願いしても、コンピュータ側はその命令を実行する事が出来ないという事になります。
このように、自然言語処理の過程では「単なる記号を、その記号が示す現実的な対象とどのように関係させるか」という観点が必要になる訳です。この関係を理論として構築しようというのが「意味論」という学問分野であり、その「意味論」をプログラム化する事によって自律的に運営する方法がこれから紹介する「ステップ3:意味解析」となります。
現在、一般的なアプローチとして具体的に用いられているのは、形容詞がどの名詞を修飾しているかなど、言葉の意味を保管している「辞書」に基づいた意味を参照し、その文章の意味を解析するという技術が適用されています。例えば、「鮮やかな」「夕焼け」「富士山」という形容詞を用いて文章を組み立てるようコンピュータに指示した時、コンピュータは「鮮やかな夕焼け」と「鮮やかな富士山」という2つの言葉を算出する事が出来ますが、「鮮やかな富士山」というのは「鮮やかな:色がはっきりしている様を表す語」には繋がらないという判断が下されます。この「意味解析」によって、「鮮やかな富士山」は不適となり、「鮮やかな夕焼け」が適切であると自然言語処理を行ったコンピュータは判断するのです。
意味解析・例:
「鮮やかな」「夕焼け」「富士山」
(○)鮮やかな夕焼け
(×)鮮やかな富士山
そしてまた、「意味解析」のステップにおいては、「モダリティ」という考え方も重要な意味を持ちます。この「モダリティ」とは一般的に「意味を表す命題内容に関わらない書き手・話し手の意図」と定義されています。例えば、ある人が「きっと明日は良い天気になるだろう」と語った時、その文には「命題内容=明日は良い天気です」と「話し手の意図=きっと~になるだろう」が含まれているという事になります。
「モダリティ」に関する研究も様々です。「書き手の態度」に関する「判断」「意志」「指示」「保証」「要請」といったモダリティ分類や、「話し手の態度」に関する「伝達態度」「丁寧」「表現類型」「真偽判定」「価値判断」「説明」「テンス」「認め方」「取り立て」といったモダリティ分類があります。この「モダリティ」領域もまた、自然言語解析を高精度化する上で欠かせない重要な議題です。
意味解析と文脈解析には、有名な日本語向けオープンソースツールが存在しないため、今回はご紹介できません。
文脈解析とは?
最後に「ステップ4:文脈解析」についてお話します。通常、私たちが自然言語で取り交わすひとつの文章というのは、それ単体で機能している訳ではなく、複数の文から構成される文章の中に組み込まれる形となっており、必ず何らかの意味的な役割(文脈上の意味)を担っています。
例えば、以下の文で指し示す「あれ」という指示代名詞は「富士山」よりも「鮮やかな夕焼けに映る富士山」の方が正確な解釈となります。
文脈解析・例:
「あれ」という言葉が指し示すもの
(例)鮮やかな夕焼けに映る富士山が思い出される。あれはとても綺麗だった。
(△)富士山
(○)鮮やかな夕焼けに映る富士山
より単純な例で言えば、ある人が相手に向かって「お前は素晴らしいな」と言っても、文脈によっては肯定的な意味ではなく、皮肉やジョークのようなニュアンスを含む事もあります。また上述の事例のように指示語など「特定の意味をもたない言葉」も文脈によって解釈が変わる為、文章同士の関係性が大きな意味を持つのです。
このような言語現象を鑑みて、「ステップ4:文脈解析」では処理対象となる文章を含んだ全体の言語現象を踏まえ、文章中における言語表現の意味的な繋がりや各文の意味的な役割を分析して同定する作業を実行します。アプローチとしては、「照応解析」「修辞構造解析」といったものが用いられています。
自然言語処理の技術をいかして文章から有益な情報を取り出すテキストマイニングという技術が注目されています。
以下のページで、テキストマイニングの記事について解説していますので、是非ご覧ください。
[関連記事]
テキストマイニングとは何か?詳しく知りたい方はこちらの記事で詳細に解説していますので、是非ご覧ください。
>> テキストマイニングとは?ツールや実例まで解説