首页 > 解决方案 > 在亚马逊美食评论数据集上训练 Lstm 进行文本分类时表现不佳?

问题描述

我正在尝试在 Amazon Fine food review 问题上训练用于文本分类的 Lstm 模型,我正在使用与 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 单元的数量,并且 epochs 也尝试增加序列的长度,但没有奏效,请注意,我已根据需要对评论进行了所有预处理。

# 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 模型能够很好地概括并预测在这种情况下属于少数类的负面评论。

标签: machine-learningdeep-learninglstmtext-classification

解决方案


推荐阅读