自然言語処理への第一歩
はじめに
自然言語処理は、人が使っている言葉をコンピュータで分析するもので、NLP(Natural Language Processing)とも呼ばれています。
検索エンジンなど身近なところでも使われており、「近くのレストラン」など文章で検索しても意味を理解して結果を表示してくれます。
最近では、マネージドサービスやOSSでも自然言語処理を簡単に使用することができるようになっています。そこで、今回は自然言語処理への導入として自然言語処理の概要をまとめていきたいと思います。
自然言語処理とは
自然言語処理は以下の流れで文章を解析します。
1. 形態素解析:文章を最小単位の単語に分割する
2. 構文解析:単語同士の関係性を、つなぎ合わせる
3. 意味解析:辞書を使って単語同士の意味から最適なものを選出する
4. 文脈解析:前後の文章を解析し、文脈を明らかにする
形態素解析
形態素解析は、文章を最小単位の単語のリストに分割します。
「私は記事を書く」という文章は、「私・は・記事・を・書く」という単語にわけられます。
分割された単語(=形態素)はトークンと呼ばれます。
また、このときトークンに、動詞や形容詞といった品詞のタグが割れ当てられます。
品詞タグには以下のようなものがあります。
品詞タグ | 意味 |
---|---|
ADJ | 形容詞 |
ADP | 接置詞 |
NOUN | 名詞 |
PROPN | 固有名詞 |
PUNCT | 句読点 |
VERB | 動詞 |
「私は記事を書く」は、以下のような品詞タグが振られます
私 PRON(代名詞)
は ADP(接置詞)
記事 NOUN(名詞)
を ADP(接置詞)
書く VERB(動詞)
構文解析
構文解析では、形態素解析で分割したトークン間の依存関係を解析します。
このとき、どういう依存があるかを表した係り受けタグとうものが割れ当てられます。
係り受けタグには以下のようなものがあります。
係り受けタグ | 意味 |
---|---|
acl | 名詞の節修飾語 |
amod | 形容詞修飾語 |
aux | 助動詞 |
case | 格表示 |
compound | 複合名詞 |
nsubj | 主語名詞 |
obj | 目的語 |
obl | 斜格名詞 |
品詞タグと係り受けタグの一覧は、以下でまとめられていますので、こちらを参照ください。
「私は記事を書く」は、以下のような係り受けタグが振られ、依存関係が表現されます。
意味解析
意味解析は、辞書を使って単語同士の意味を解析し、最適なものを選出します。
例えば、「ナイフで、切ったりんごを食べる」という文を解析してみます。
ナイフは切るという目的で使用されるように解析されました。
次に「フォークで、切ったりんごを食べる」という文を解析してみます。
こちらは、フォークは食べるという目的で使用されるように解析されました。
文脈解析
文脈解析は、複数の文章で形態素解析/構文解析、意味解析を行い、文章間の関係性を解析します。
こちらは、現在研究段階のようです。
ここまで、自然言語処理の概要について記載しました。
次回は、自然言語処理ライブラリのspaCyとGiNZAについて記載し、実際に自然言語処理に触れてみたいと思います。
chameleonmeme.com/ きっかけは、偶然同じ現場で働いていたエンジニア3人の 「もっと仕事にのめり込んだり、熱中したいよね」という雑談でした。 営業から開発、サービスの提供まですべての工程を自分たちの手で行い、 気の合う仲間と楽しく仕事をすることで熱中するためにチームをスタートしました。
Discussion