Прежде всего, для 30 классов рандомизированная базовая точность равна (100/30) = 3,33% , поэтому ваша модель справляется достаточно хорошо.
Вы не предоставили больше такие детали, как длина ввода, длина абзацев, выполняете ли вы какую-либо предварительную обработку, например удаление стоп-слов, как урезать абзацы до одинаковой длины input_length
.
быть дисбалансом классов, вероятно, для некоторых классов у вас слишком мало примеров. Попробуйте удалить их или расширить набор данных, чтобы сбалансировать классы.
Я решил похожую проблему, классификацию категорий новостей, но для Bangla классификация категорий новостей Bangla определенно более сложная, чем сделать это для Engli sh.
Я использовал модель BiLSTM, которая достигла 91% + точность теста без какой-либо серьезной настройки гиперпараметра.
Это модель, которую я использовал:
from keras.models import Sequential
from keras.layers import Embedding, CuDNNLSTM, Bidirectional, Dense
embedding_dim = 8
model = Sequential()
model.add(Embedding(input_dim=vocab_size,
output_dim=embedding_dim,
input_length=maxlen))
model.add(Bidirectional(CuDNNLSTM(128, return_sequences = True)))
model.add(Bidirectional(CuDNNLSTM(128)))
model.add(Dense(9, activation='softmax'))
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
Полный код классификации категории новостей Bangla: https://github.com/zabir-nabil/bangla-news-rnn
Теперь вы не сделали т график вашей точности проверки против точности обучения, но я предполагаю, что ваша точность обучения выше. Итак, ваша модель перегружена. Возможно, уменьшите параметры в слое Embedding.
Вы можете использовать вложение Google News в качестве инициализатора веса для вашего слоя Embedding. https://github.com/mmihaltz/word2vec-GoogleNews-vectors
Наилучшим подходом было бы использование BERT-подобной языковой модели для получения действительно хорошей точности. https://github.com/huggingface/transformers