stMind

about Tech, Computer vision and Machine learning

LSTMでSentiment Analysis

これまでは、語単位での特徴量化でレビューの感情分析を行いましたが、文章のコンテキストを考慮するともっとうまくPositive/Negativeの判定が出来そうです。 (単純にgoodやbadのような語が含まれているかどうかだけでなく、「最初はgoodだけど、最後にはdisappointedだった」みたいなレビューであれば、文脈上disappointedがより重要な語になるし、goodは重要度が低くなるみたいな)

LSTM層の導入も非常に簡単です。

    model = tf.keras.Sequential([
        tf.keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length),
        tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32, return_sequences=True)),
        tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(16)),
        tf.keras.layers.Dense(6, activation='relu'),
        tf.keras.layers.Dense(1, activation='sigmoid')
    ])

ユニット数を指定してLSTM層を追加しています。ここでは、双方向のLSTMにするためにBidirectionalとし(順方向にも逆方向にも文脈を考慮)、双方向のLSTMを2層使いました。

f:id:satojkovic:20200622204815p:plain

LSTMを使わない場合もval_accuracyが80%程度だったので、あまり結果は変わらず(残念)。

入力次元数やユニット数などのハイパーパラメータのチューニングも含め、過学習を抑える必要がありそうです。