Плохая производительность при обучении Lstm текстовой классификации на Amazon Fine Food Reviews Dataset? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь обучить модели Lstm для классификации текста в Amazon. Проблема с обзором продуктов питания. Я использую тот же набор данных, который предоставляется kaggle, я использую токенизатор для преобразования текстовых данных в токены, но во время обучения я получаюодинаковая точность для всех эпох. Как это

Epoch 1/5
55440/55440 [==============================] - 161s 3ms/step - loss: 2.3666 - acc: 0.8516 - val_loss: 2.3741 - val_acc: 0.8511
Epoch 2/5
55440/55440 [==============================] - 159s 3ms/step - loss: 2.3666 - acc: 0.8516 - val_loss: 2.3741 - val_acc: 0.8511
Epoch 3/5
55440/55440 [==============================] - 160s 3ms/step - loss: 2.3666 - acc: 0.8516 - val_loss: 2.3741 - val_acc: 0.8511
Epoch 4/5
55440/55440 [==============================] - 160s 3ms/step - loss: 2.3666 - acc: 0.8516 - val_loss: 2.3741 - val_acc: 0.8511

Более того, когда я строю свою матрицу смешения, ни один из отрицательных классов не предсказан, предсказаны только положительные классы.Я думаю, что в основном делаю неправильно, когда конвертирую метки, то есть «положительные» и «отрицательные», в какое-то числовое представление для классификации.Пожалуйста, смотрите мой код для более подробной информации.

Я пытался увеличить количество единиц Lstm, и эпохи также пытались увеличить длину последовательностей, но ни одна из них не работала, обратите внимание, что я сделал всю предварительную обработку отзывов по мере необходимости.

# train and test split x is dataframe consisting of amazon fine food review 
#dataset
x = df
x1 = pd.DataFrame(x)
y = df['Score']
x1.head()
import math
train_pct_index = int(0.70 * len(df)) #train data size = 70%
X_train, X_test = x1[:train_pct_index], x1[train_pct_index:]
y_train, y_test = y[:train_pct_index], y[train_pct_index:]
#y_test.value_counts()
x1_df = pd.DataFrame(X_train)
x2_df = pd.DataFrame(X_test)



from sklearn import preprocessing
encoder = preprocessing.LabelEncoder()
y_train=encoder.fit_transform(y_train)
y_test=encoder.fit_transform(y_test)

# tokenizing reviews 
tokenizer = Tokenizer(num_words = 5000 )
tokenizer.fit_on_texts(x1_df['CleanedText'])

sequences = tokenizer.texts_to_sequences(x1_df['CleanedText'])
test_sequences = tokenizer.texts_to_sequences(x2_df['CleanedText'])

train_data = pad_sequences(sequences, maxlen=500)


test_data = pad_sequences(test_sequences, maxlen=500)

nb_words = (np.max(train_data) + 1)

# building lstm model and compiling it
from keras.layers.recurrent import LSTM, GRU
model = Sequential()
model.add(Embedding(nb_words,50,input_length=500))
model.add(LSTM(20))


model.add(Dropout(0.5))
model.add(Dense(1, activation='softmax'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics = ['accuracy'])

Я бы хотел, чтобы моя модель lstm хорошо обобщала и предсказывала отрицательные отзывы, которые в данном случае также относятся к классу меньшинства.

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