LoginSignup
0

More than 1 year has passed since last update.

posted at

RNN_LSTM2 自然言語処理

Aidemy 2020/11/10

はじめに

 こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
 今回は、RNN_LSTMの二つ目の投稿になります。どうぞよろしくお願いします。

*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・形態素解析など
・深層学習による自然言語処理

RNN/LSTMによる自然言語処理

自然言語処理について復習

・自然言語処理では、単語ごとに文を分ける必要がある。その手法には「形態素解析」「N-gramモデル」があり、主にMeCabなどの形態素解析機が使われる。こちらについては後述。
N-gramモデルN次ごとに単語を切り分けたり、N単語ごとに文を切り分けて出現頻度を集計する手法である。こちらは日本語に限らずどの言語でも使える

日本語の形態素解析

・日本語の自然言語処理で一番最初に行われることが「形態素解析」である。今回はMeCabを使って形態素解析を行うこととする。
・使い方は、まず「MeCab.Tagger('')」でインスタンスを作成し、それに「parse()」を使うことで形態素解析を行うことが可能である。

構文解析

・形態素解析を行った後に行うのが構文解析である。構文解析とは、各文を文節に分解し、文節同士の係り受けを決定する手法のことである。
・構文解析を行うプログラムを構文解析器といい、「CaboCha」「KNP」などがある。

深層学習による自然言語処理

データの前処理

データの前処理は自然言語処理で非常に大切なステップである。主な流れは以下の通り。(詳細は「自然言語処理」参照)
クレンジング処理:HTMLタグなど、文章に関係ないものを除去
形態素解析
単語の正規化:表記揺れなどの統一
ストップワード除去:頻出の割に意味の薄い単語(助詞など)の除去
ベクトル化:単語をベクトル化(数値化)

MeCabによる分かち書き

・MeCabによる分かち書きのみを行うときは「MeCab.Tagger('-Owakati')」とすれば良い。これを「parse(text)」で実行し、スペース区切りの単語をそれぞれ「split(' ')」で区別する。
・分けたもののうち、同じ単語を「sorted(set(word_list))」で辞書順でリストを作成する。
・このリスト(vocab)に対し、「{c: i for i,c in enumerate(vocab)}」「{単語:id}」の辞書を作成している。
・これをword_listのそれぞれに適用してidをリスト化する。([vocab_to_int[x]for x in word_list]

・コードスクリーンショット 2020-11-10 13.05.10.png

・結果スクリーンショット 2020-11-10 13.05.21.png

Embedding

単語をベクトル化するには、Embedding層を使うと良い。実装はSequentialモデルの中で行う。
・前項の最後で作成したidのリスト「int_list」をmodelに適用できる形(input_data)にして、model.predictで渡すとベクトル化されたリストが返される。

・コードスクリーンショット 2020-11-10 13.06.59.png

LSTMによる自然言語処理の実装

・今回扱うデータは自然言語のデータであるが、実装自体は今までやってきたものと大きくは変わらないので、ここではコードの掲載に留める。

・コードスクリーンショット 2020-11-10 13.07.21.png

まとめ

・深層学習で自然言語処理を行うときは、データを前処理することが大切である。具体的には「単語をベクトル化(数値化)」しなければならないので、まずは形態素解析で文を単語ごとに分け、必要のない部分を取り除くといったことを行わなければならない。
・単語をベクトル化する時は、Embeddingを使う。実装はSequentialモデルを使う。
・自然言語処理を行うモデルの実装自体は他のモデルと同様に行えば良い

今回は以上です。最後まで読んでいただき、ありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0