Я пытаюсь обучить модель для анализа настроений, и она показывает точность 90% при разделении данных на обучение и тестирование! Но всякий раз, когда я тестирую его на новой фразе, результат почти одинаковый (обычно он находится в диапазоне 0,86 - 0,95)! Вот код:
sentences = data['text'].values.astype('U')
y = data['label'].values
sentences_train, sentences_test, y_train, y_test = train_test_split(sentences, y, test_size=0.2, random_state=1000)
tokenizer = Tokenizer(num_words=5000)
tokenizer.fit_on_texts(sentences_train)
X_train = tokenizer.texts_to_sequences(sentences_train)
X_test = tokenizer.texts_to_sequences(sentences_test)
vocab_size = len(tokenizer.word_index) + 1
maxlen = 100
X_train = pad_sequences(X_train, padding='post', maxlen=maxlen)
X_test = pad_sequences(X_test, padding='post', maxlen=maxlen)
embedding_dim = 50
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dim,input_length=maxlen))
model.add(layers.Flatten())
model.add(layers.Dense(10, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.summary()
history = model.fit(X_train, y_train,
epochs=5,
verbose=True,
validation_data=(X_test, y_test),
batch_size=10)
loss, accuracy = model.evaluate(X_train, y_train, verbose=False)
print("Training Accuracy: {:.4f}".format(accuracy))
loss, accuracy = model.evaluate(X_test, y_test, verbose=False)
print("Testing Accuracy: {:.4f}".format(accuracy))
Обучающие данные представляют собой CSV-файл с 3 куннами: (id, текст, метки (0,1)), где 0 положительно, а 1 отрицательно.
Training Accuracy: 0.9855
Testing Accuracy: 0.9013
Тестирование на новых предложениях типа «Это просто текст!» и «ненавидите проповедников!» предсказал бы тот же результат [0,85], [0,83].