Итак, у меня есть набор данных с 30000 комментариями из социальных сетей, уже классифицированных в трех категориях (хулители, нейтралы и промоутеры). Чтобы построить модель, я следовал инструкциям на этом сайте: https://www.r -bloggers.com / как подготовить данные для nlp текстовой классификации с керасом и тензорным потоком /
В конце я получил что-то вроде этого:
indice <- sample(nrow(total), replace = FALSE)
sample <- total[indice,]
n <- 1:round(nrow(sample)*0.8,0)
df.train <- sample[n,]
df.test <- sample[-n,]
df.train <- mutate(df.train, text = paste(`Monitoramento`, `Texto do Comentário`))
text <- df.train$text
max_features <- 8000
tokenizer <- text_tokenizer(num_words = max_features)
tokenizer %>% fit_text_tokenizer(text)
text_seqs <- texts_to_sequences(tokenizer, text)
maxlen <- 100
batch_size <- 32
embedding_dims <- 50
filters <- 64
kernel_size <- 3
hidden_dims <- 50
epochs <- 5
x_train <- text_seqs %>% pad_sequences(maxlen = maxlen)
y_train <- as.factor(df.train$`Sentimento do NPS`)
model <- keras_model_sequential() %>%
layer_embedding(max_features, embedding_dims, input_length = maxlen) %>%
layer_dropout(0.2) %>%
layer_conv_1d( filters, kernel_size, padding = "valid", activation = "relu", strides = 1 ) %>%
layer_global_max_pooling_1d() %>%
layer_dense(hidden_dims) %>%
layer_dropout(0.2) %>% layer_activation("relu") %>%
layer_dense(1) %>%
layer_activation("sigmoid") %>%
compile( loss = "binary_crossentropy", optimizer = "adam", metrics = "accuracy" )
hist <- model %>%
fit(x_train, as.numeric(y_train), batch_size = batch_size, epochs = epochs, validation_split = 0.1)
Проблема в том, что модель действительно не работает. Используя Наивный Байес, я получил 80% точности, но в Керасе я едва достиг 10%. Что-то в предварительной обработке или в построении модели, вероятно, неправильно. Может кто-нибудь определить, что это такое?