自分は業務ではNLPに携わっていないのですが学生時代に少しだけNLPの研究に関わっていました。
今回はNLPの全体像を理解したい初学者向けに記事にしました。
世の中は自然言語を利用した技術であふれている
- 自然言語(テキストデータなど)から情報を抽出し、アウトプットとして提供
- 自然言語処理(Natural Language Programming)という技術が根幹にある
自然言語処理(NLP)とはなんなのか
- 具体的にはどういった分野なのかよくわからない
- 今回は自然言語処理の概要を紹介
NLPの全体像
- 解析の対象によって単語解析、文解析、文脈解析の3つに分けることができる
単語解析について
形態素解析
- 形態素解析器を利用し、文を文節ごとに分ける
- 研究分野としては、形態素を正しく分解したり高速に解析できたりするように辞書の構築や解析器の開発などがあげられる
- 解析器: MeCab, ChaSen, JUMAN++, Kyteaなど
類似度測定
- 文中の単語の共起(同じ文でそれぞれの単語が出現すること) を元に単語をベクトル化(文脈ベクトル)する
- 単語の類似度を測定することができ、クラスタリングなどに応用 される
文脈ベクトルによる類似度測定
- 共起回数を手掛かりとして文脈ベクトルを作成
- 実際の解析では単純な共起回数ではなく、ベクトルの正規化を行う
- 意味の似ている単語同士は文脈ベクトルも類似している
- 文脈ベクトルの類似度を測定(コサイン類似度など)することでクラスタリングなどに応用できる
共起を手掛かりにした解析の問題点
複雑な文になると意図していない共起もカウントされる
- 例.「エンジンをかけたらエアコンが故障した」
- 故障したのはエアコンであり、エンジンではない。 (しかし、単語の故障とエンジンは共起している)
- 単語解析だけでは不十分なケースがある。その際、文解析(後述)の利用が有効になってくる
文解析について
係り受け解析
- 単語の修飾、被修飾を解析すること。(構文解析)
- 解析器: CaboCha, KNP, J.DepP(ジェーデップ)など
CaboChaによる解析結果の例
図にするとこのようなイメージ↑
係り受け解析を利用することで「エンジンをかけたらエアコンが故障した」という文章は以下のように解釈することができ、「故障したのはエアコン」「エンジンは故障になるきっかけ」といった、単語解析だけではわからなかった情報を正しく獲得できるようになる。
- 係り受け解析を利用することで因果関係などの知識獲得を行うことができる
文脈解析の例
ベクトル化された文章を機械学習に利用する
- 文章の情報を集約してベクトル化することで機械学習のタスクなどに応用をすることが可能になる
- 機械学習を利用した文章分類問題(ラベリング)などに応用
最後に
今回の内容はNLPの概要を大まかに知ってもらうという目的で作成をしました。ですので、網羅しきれていない部分や多少語弊のある部分もあるかと思います。
とはいえ、「さすがにこの部分の説明はおかしい」とか「このように説明した方がわかりやすい」とか目に余る部分がありましたら、是非フィードバックをいただければと思います。