センチメント分類の再考

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

David Cecchini

Data Scientist

前回の結果

初期モデルの結果は不良でした。

model = Sequential()
model.add(SimpleRNN(units=16, input_shape=(None, 1)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])

model.evaluate(x_test, y_test)
$[0.6991182165145874, 0.495]
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

モデルの改善

精度向上のために、次を検討します。

  • Embedding層を追加
  • 層数を増やす
  • ハイパーパラメータを調整
  • 語彙数を増やす
  • より長い文を許容(メモリセルを増やす)
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

過学習を避ける

RNNは過学習しやすい

  • バッチサイズを試行する
  • Dropout層を追加
  • RNN層のdropoutrecurrent_dropoutを設定
# 入力の20%を無効化してノイズを追加
model.add(Dropout(rate=0.2))

# それぞれ入力とメモリセルの10%を無効化 model.add(LSTM(128, dropout=0.1, recurrent_dropout=0.1))
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

補足:畳み込み層

本講義の範囲外:

model.add(Embedding(vocabulary_size, wordvec_dim, ...))
model.add(Conv1D(num_filters=32, kernel_size=3, padding='same'))
model.add(MaxPooling1D(pool_size=2))
  • 畳み込み層は埋め込みベクトル上で特徴選択を行う
  • 多くのNLP課題でSOTA性能
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

モデル例

model = Sequential()
model.add(Embedding(  vocabulary_size, wordvec_dim, trainable=True,
                      embeddings_initializer=Constant(glove_matrix), 
                      input_length=max_text_len, name="Embedding"))

model.add(Dense(wordvec_dim, activation='relu', name="Dense1"))
model.add(Dropout(rate=0.25)) model.add(LSTM(64, return_sequences=True, dropout=0.15, name="LSTM"))
model.add(GRU(64, return_sequences=False, dropout=0.15, name="GRU"))
model.add(Dense(64, name="Dense2")) model.add(Dropout(rate=0.25)) model.add(Dense(32, name="Dense3"))
model.add(Dense(1, activation='sigmoid', name="Output"))
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

演習に進みましょう

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

Preparing Video For Download...