Phân loại cảm xúc: xem lại

Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

David Cecchini

Data Scientist

Kết quả trước đây

Mô hình ban đầu cho kết quả kém.

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]
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Cải thiện mô hình

Để cải thiện hiệu năng, có thể:

  • Thêm lớp embedding
  • Tăng số lớp
  • Tinh chỉnh tham số
  • Tăng kích thước từ vựng
  • Chấp nhận câu dài hơn với nhiều ô nhớ hơn
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Tránh overfitting

RNN dễ overfit

  • Thử kích thước batch khác nhau.
  • Thêm các lớp Dropout.
  • Thêm tham số dropoutrecurrent_dropout ở các lớp RNN.
# loại 20% đầu vào để tạo nhiễu
model.add(Dropout(rate=0.2))

# Lần lượt loại 10% đầu vào và ô nhớ model.add(LSTM(128, dropout=0.1, recurrent_dropout=0.1))
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Bổ sung: Lớp tích chập

Ngoài phạm vi:

model.add(Embedding(vocabulary_size, wordvec_dim, ...))
model.add(Conv1D(num_filters=32, kernel_size=3, padding='same'))
model.add(MaxPooling1D(pool_size=2))
  • Lớp tích chập chọn đặc trưng trên vector embedding
  • Đạt mức tốt nhất hiện nay trong nhiều bài toán NLP
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Ví dụ mô hình

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"))
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Ayo berlatih!

Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras

Preparing Video For Download...