自然言語処理

お久しぶりの更新になります。

 

個人的な話ですが、久しぶりに
自然言語処理」という言葉を聞く機会がありました。
学生時代にちょっとかじって以来になります。
自然言語処理」という言葉、ご存じでしょうか。


ざっくり言うと、日常私たちが使っている日本語などを
コンピュータが正しく解釈できるようにするという感じです。
(人が生活で使っている言語を、自然言語と呼びます)


この手の技術については、Googleのような検索システムは
非常に優秀な技術を持っています。

「第40代アメリカ大統領は」
「明日の天気は」

と問い合わせるだけで答えてくれます。
コンピュータが問合せの文を解釈し、回答するという仕組みです。
人間には難しくもない言葉ですが、
コンピュータにとっては実は高度な処理の一つなのです。


人が産まれてから
正しく言葉がつかえるようになるまで
時間がかかるように、
コンピュータも言葉を理解できるようになるまで
たくさんの技術や蓄積が必要になります。
それが自然言語処理という技術です。

 


自然言語処理にはいろいろなアプローチがあります。
私がかじったものでは、以下の通りです。


形態素解析

文を品詞などに分類する技術です。
私は「ChaSen」を使ったことがありましたが

chasen-legacy.osdn.jp

今は「MeCab」などが便利なようです。

taku910.github.io

使ってみると以下のような解析をしてくれます。

すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS 

「すもも」は名詞、「も」は係助詞、「もも」は名詞
というように分類してくれます。
コーパスと呼ばれる辞書データの蓄積/学習作業が必要です。


係り受け解析

形態素解析だけでは品詞の羅列にしかならないので、
係り受け解析で各単語がどう関連するのかを調べます。
「CaboCha」を使っていましたが、今もまだ現役のようですね。

taku910.github.io


「太郎は花子が読んでいる本を次郎に渡した。」

形態素解析だけでは、誰が何を誰に渡したかまではわかりません。

太郎は花子が読んでいる本を次郎に渡した
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
花子 名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
読ん 動詞,自立,*,*,五段・マ行,連用タ接続,読む,ヨン,ヨン
で 助詞,接続助詞,*,*,*,*,で,デ,デ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
本 名詞,一般,*,*,*,*,本,ホン,ホン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
次 名詞,一般,*,*,*,*,次,ツギ,ツギ
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS

 

これを「CaboCha」を使うと以下のようになります。

(インデントがズレてしまうので画像にしました)

f:id:tri-development-center:20200319101202p:plain

「D」で結び付いているものが係り受けになっています。
ここから「太郎は」→「本を」→「次郎に」→「渡した」
という分析ができます。

※色々なフォーマットで出力もできます
※付属の学習済みモデルファイルは研究/個人利用に限られるので
 商用利用の場合は、別途モデルファイルを作成する必要があります。

 

 

どうでしょうか。
興味が湧いた方はいらっしゃいますでしょうか?

学生時代に以上のことをかじった程度なので業務経験はありませんが、

とても興味深い技術だと思っています。