Улучшение производительности LSTM при классификации текста (задача 3-х классов) - PullRequest
0 голосов
/ 23 ноября 2018

Моя проблема - это проблема классификации анализа настроения в 3 классах с 4000 обзорами в среднем около 500 слов каждый.Распределение настроений в наборе данных: 1800 отрицательных, 1700 нейтральных и 500 положительных.Я пробую следующую версию LSTM, но, поскольку я искал, как улучшить производительность, изменяя параметры, я не нашел никаких конкретных правил о том, как их выбирать, большинство ответов, которые я нашел, было «это зависит от проблемы», но, как яЯ нуби на предмет глубокого обучения, я действительно не понимаю, с чего начать.Моя модель достигает около 63% точности, протестирована с поперечным валом k = 5.Заранее спасибо.Это код, который у меня есть:

data = pd.read_csv("nopreall.csv",header=0,encoding = 'UTF-8')
X = data['text']
Y = data['polarity']

x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.2,random_state=0)  #split train/test data

batch_size = 64
epochs=5
max_len = 500
max_words=5000

tokenizer = Tokenizer(max_words)
tokenizer.fit_on_texts(x_train)

x_train= tokenizer.texts_to_sequences(x_train)
x_test= tokenizer.texts_to_sequences(x_test)
x_train=np.array(x_train)
x_test=np.array(x_test)


x_train = sequence.pad_sequences(x_train, maxlen=max_len)
x_test = sequence.pad_sequences(x_test, maxlen=max_len)

temp=np.array(y_test)

# create the model
embedding_vecor_length = 64
model = Sequential()
model.add(Embedding(max_words, embedding_vecor_length,input_length=max_len))
model.add(LSTM(100))
model.add(Dense(3, activation='softmax'))

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())

filepath="weights.best.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint]

model.fit(x_train, y_train, validation_split=0.1, epochs=epochs, batch_size=batch_size, callbacks=callbacks_list)

#load the saved model
print("Loading Best Model Overall")
model.load_weights("weights.best.hdf5")
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

#Final evaluation of the model
scores = model.evaluate(x_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...