Модель Tenserflow для классификации текста не предсказывает, как ожидалось? - PullRequest
3 голосов
/ 01 февраля 2020

Я пытаюсь обучить модель для анализа настроений, и она показывает точность 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].

1 Ответ

1 голос
/ 01 февраля 2020

Кажется, ты жертва overfitting. Другими словами, наша модель подошла бы к training data. Хотя часто можно достичь высокой точности на тренировочном наборе, как и в вашем случае, мы действительно хотим разработать модели, которые хорошо обобщают до данных тестирования (или данных, которых у них нет) t замечено ранее).

Вы можете выполнить эти шаги для предотвращения переоснащения.

Кроме того, чтобы увеличить производительность алгоритма, я предлагаю вам увеличить число нейронов для слоя Dense и установите больше epochs, чтобы повысить производительность алгоритма при тестировании его на новые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...