見出し画像

自然言語処理①~自然言語処理を懇切丁寧にはじめる~

今回から(しばらく?定期的に?)NLP(Natural Language Processing 自然言語処理)にいきます。

半年前くらいにすこし集中して勉強し、前職で記事を書いたこともあるのですが、また改めて書くとは。。

非常に説明に体力を使うため、今時点でなかなか重い腰が上がってないのですが、

機械学習の分野で今かなりトレンドである自然言語処理を避けて通れない(もしくは一度学んでおいた方がいい)ことは否定できないので、自分の学習のためにも書いていきます。

前回までの機械学習の内容を使うかどうか不明で、また、いつも参照しているテキストの自然言語処理の解説が個人的に全く合わなかったので、全て自作で作ります。

ここでの自然言語の最終目標は

「BERTに触れて簡単な実装までの流れを理解する」

ということにします。

どのくらいの期間がかかるか(もしくは私の体力が先に尽きるのか)、
全くもって不明ですが、一歩ずつ扱えればと思います。

では、行ってみましょう。

・自然言語処理の全体像

どういうことを自然言語処理で扱うのかというと、検索エンジンから音声認識・処理や感情分析などが代表的かなと思います。

siriとかgoogleアシスタントにも使われていたり、最近では誹謗中傷のコメントを自動で非表示や削除してくれるようなアルゴリズム、文章の自動生成まで、どんどん社会にその技術が適用されています。

同時翻訳のように、ゆくゆくは言語の壁をテクノロジーで越えるのではないかと思っていますが、どうでしょう。。

ーーーーー

共通語の英語での技術進歩が目覚ましいものの、日本語での自然言語処理はまだまだ発展途上であることが現実問題としてあります。

というのも、非常に曖昧さを保持する日本語の文章において、形態素解析や感情分析をとってもかなり難しいです

例えば、「全体的にAの商品はよかったのですが、唯一〇〇はイマイチでした。」という文章の「感情」は、本当にポジティブなの?みたいな問題があったり、

文脈によっては、「ありがとうございました!」っていう文章でも「さようなら」みたいな意味を持つときもありますよね。。

こういう観点以外にも日本語は自然言語処理を扱うことにおいて実はちゃんと精度の良いモデルを作ることはかなり至難の技になります。

しかし、最近Googleが開発したBERTによって自然言語処理の精度が圧倒的に向上し、再度注目を集めるきっかけになったとされています。

BERTはtransformerというアルゴリズムがべーすになり、ファインチューニングが可能となっています。

詳しい内容の説明は私のように素人レベルではかなり高度ですが、できる限り丁寧にかつできる限り自分で調べる予定です。

これから始めていく自然言語処理の投稿では

形態素解析・doc2vec・(seq2seq)・transformer・BERT、また同時並行的に自然言語処理100本ノックの部分まで行けたらいいななんて夢を見ています。

・自然言語処理の主な流れ

ここまで概要でしたが、自然言語処理の中身に入っていきます。

具体的な流れは以下。

形態素解析

構文解析

意味解析

文脈解析

順番に概要を解説します。

それぞれの概要に関して必ず抑えておく必要があるというより、実装しながら学んでいく方がいいと思うので、さらりと説明だけします。

1. 形態素解析

おそらくいろんなサイトで一番説明されているのが形態素解析だと思いますw

(大抵、MeCabつかって、はい、おわり。みたいなイメージが私は強いですw)

文章を最小構成まで区切り、それぞれに情報(品詞、原型、活用系など)を与えていく作業です。

いろんなライブラリがあり、最近では固有名詞を色分けしてくれるginza, spaCyなど、いろんなことができるようになってきています。

こすり倒されている形態素解析ですが、日本語はやはり途切れがわからないことが特徴的で、本当に正しく文章を形態素解析するとなると実は難しいため、奥が深いことは事実です。

2. 構文解析

係り受けなどが代表的で、区切った単語がどの単語と密接にくっついているのかなどを解析します。

例えば、

私は今日、怪獣8号の新刊を買いました。

という文章があり、形態素解析をすると

私 / は / 今日/ 怪獣8号 / の/ 新刊 / を/ 買いました

となるわけですが、この「私」は「買いました」に強く結びついている、など文章の単語の関連性を探していくことをしていきます。

3. 意味解析

次に文章の正しい意味を解析します。

文章を単語に区切っていき、辞書的に正しい意味を解釈する作業を意味します。

具体的に見ていきます。

「今日私は五条先生とキャッチボールをしました。」

という文章で、無理くり意味をつけるとすれば実は2通りの解釈があります。

1: 今日私は五条先生と、キャッチボールをした
2: 今日私は、「五条先生」(という動作)とキャッチボールをした

となります。

しかし、辞書としては明らかに1つ目の方が正しいと判断する必要があり、これを意味解析で判定します。

(この辺は教師ありでモデルに学習させる必要がありますが、、)

4. 文脈解析

最後に文全体に形態素解析や意味解析を行い文章同士の関係性を見ていきます。

ここは現在もいろんな企業や大学が研究している分野でまだまだ発展途上と言えます。(もちろん他の1~3も同じですが)

この部分まできちんと実装できるならおそらく怖いもの知らずなレベルになると思います。(なりたいですね)

・一旦区切り

実装は次回以降から始めようと思います。





この記事が気に入ったらサポートをしてみませんか?