machine-learning - 在亚马逊美食评论数据集上训练 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 模型能够很好地概括并预测在这种情况下属于少数类的负面评论。
解决方案
推荐阅读
- python - for 循环中的某些对象没有迭代
- cypress - 赛普拉斯切换到最新窗口
- c - Automake,用于测试的特殊标志
- javascript - 创建 npm kafka-node 的捆绑版本
- selenium-webdriver - driver.get(“https://www.python.org”)不工作
- javascript - 您如何将不同表中的字段值映射到 API 中的 id?
- android - 如何在 Kotlin 中为 RxJava 函数创建一个安全的调用包装器?
- ios - 无法出列同类视图:带有标识符的 UICollectionElementKindCell - 必须为标识符注册一个 nib 或类
- python - 创建新的共享云端硬盘
- java - Spring WebFlux ServerWebExchange getFormData 内容类型