감성 분류 다시 보기

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

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로 배우는 언어 모델링을 위한 순환 신경망(RNN)

모델 개선

모델 성능을 높이는 방법:

  • 임베딩 층 추가
  • 층 수 증가
  • 하이퍼파라미터 튜닝
  • 어휘 크기 확대
  • 더 긴 문장을 위해 메모리 셀 증가
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

과적합 방지

RNN은 과적합될 수 있습니다.

  • 배치 크기를 달리 시험합니다.
  • Dropout 층을 추가합니다.
  • RNN 층에 dropout, recurrent_dropout을 설정합니다.
# 입력의 20%를 제거해 노이즈 추가
model.add(Dropout(rate=0.2))

# 입력과 메모리 셀을 각각 10% 제거 model.add(LSTM(128, dropout=0.1, recurrent_dropout=0.1))
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

추가: 합성곱 층

범위 밖:

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 문제에서 최고 수준의 성능을 냅니다.
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

예시 모델

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로 배우는 언어 모델링을 위한 순환 신경망(RNN)

연습해 봅시다!

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

Preparing Video For Download...