【データ分析実践】口コミを使ったキャンプ場に関する分析4 ~ Recurrent Neural Network, LSTM実装編 ~

データ分析実践

前回はWord2Vecを使った単語の埋め込み表現を使って遊びました。その前は、Bag-of-Wordsモデル+ロジットモデルを使って、データの分析及びレビュー評価を行いました。

今回は、今までの知識を使いながらも、新たに再帰的ニューラル・ネットワーク(Recurrent Neural Network; RNN)の一つLSTM(Long Short-Term Memory)を使ってモデルを構築したいと思います。

LSTM(Long Short-Term Memory)とは

LSTMとはRecurrent Neural Networkの一つで、それ以前のシンプルなRecurrent Neural Networkでは、勾配消失や勾配爆発といった現象が起こってしまい、長い時系列データの処理ができませんでした。そこで出てきたのが、LSTMです。LSTMは1997年に以下の論文で最初に提案され、その後も、LSTMをもう少しシンプルにしたGRU(Gated Recurrent Unit)などが提案され、それらもよく使われているモデルです。

このモデルのポイントは、長期の時系列のデータをうまく扱えられることにあり、文章を単語の時系列データと見ることにより、うまく翻訳やセンチメント分析に適用することができます。

LSTMについてはこちらをご参照ください。

LSTM自体は1997年に既に提案されていましたが、自然言語処理に適用されたのは2014年とかなり後になります。その論文はこちらです。

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.248.4448&rep=rep1&type=pdf

ちなみに、シンプルなRecurrent Neural Networkを使った自然言語処理は2010年のこちらの論文です。

https://www.fit.vutbr.cz/research/groups/speech/publi/2010/mikolov_interspeech2010_IS100722.pdf

構築するモデルについて

今回は以下のようなモデルを構築します。

文章を左から右に読むLSTMではなく、左から右と右から左に読む両方を使ったBidirectional LSTMを使いたいと思います。以下のようなイメージです。

プログラムはTensorflowのKeras APIを使っています。まだまだシンプルにSequentialを使って構築可能です 。 (ドロップアウトの設定などちょっと雑ではありますが…)

from tensorflow.keras.layers import Embedding, LSTM, Bidirectional
def lstm_model(input_dim, embedding_dim=128, hidden_units=32, dropout=0.0, l2_regularizer=0.0):
    model = Sequential()
    model.add(Embedding(input_dim=input_dim, output_dim=embedding_dim))
    model.add(Bidirectional(LSTM(hidden_units, dropout=dropout, 
                                 kernel_regularizer=regularizers.l2(l2_regularizer))))
    model.add(Dense(1, activation='sigmoid', kernel_regularizer=regularizers.l2(l2_regularizer)))    
    return model

モデル構築結果

2値分類

ここでは、また、星の数が5個か3個以下かという2値分類を行いたいと思います。

結果は、

  • 学習データ:82.2%
  • テストデータ:80.5%

と、前回のBag-of-Words + 2項ロジットモデルでは78.7%だったので、約1.8%向上しています

これは、文章の順番を考慮したことにより、より「何がどうだったか?」というような情報をうまく捉えられているからだと思います。

如何でしたでしょうか?単純な単語の出現回数だけだったモデルから、単語の順番を考慮することができるようになりました。

まとめ

今回は、単語の順番をきちんと考慮したRecurrent Neural Networkの一つであるLSTMを用いてモデル構築をし、少しですが精度が改善しました。

次回は、Bag-of-Wordsの一種になりますが、埋め込み表現を使った非常にシンプルながら、なかなか精度の良いモデルを試したいと思います!

mm0824

システム開発会社や金融機関で統計や金融工学を使ったモデリング・分析業務を長く担当してきました。

現在はコンサルティング会社のデータ・サイエンティストとして機械学習、自然言語処理技術を使ったモデル構築・データ分析を担当しています。

皆様の業務や勉強のお役に立てれば嬉しいです。

mm0824をフォローする
データ分析実践
mm0824をフォローする
楽しみながら理解する自然言語処理入門

コメント

タイトルとURLをコピーしました