gpt4 book ai didi

python - 如何使用 word2vec 修复(做得更好)文本分类模型

转载 作者:行者123 更新时间:2023-11-30 09:47:07 26 4
gpt4 key购买 nike

我是机器学习和神经网络专业的新生。我遇到了文本分类问题。我使用带有 Keras 库的 LSTM NN 架构系统。我的模型每次都能达到97%左右的结果。我得到的数据库大约有 100 万条记录,其中 60 万条是正的,40 万条是负的。我还得到了 2 个标记类别,分别为 0(阴性)和 1(阳性)。我的数据库按 80:20 的比例分为训练数据库和测试数据库。对于 NN 输入,我使用在 PubMed 文章上训练的 Word2Vec。我的网络架构:

model = Sequential()
model.add(emb_layer)
model.add(LSTM(64, dropout =0.5))
model.add(Dense(2))
model.add(Activation(‘softmax’)
model.compile(optimizer=’rmsprop’, loss=’binary_crossentropy’, metrics=[‘accuracy’])
model.fit(X_train, y_train, epochs=50, batch_size=32)

如何在这种文本分类中修复(做得更好)我的神经网络创建的模型?

最佳答案

我们在这里处理的问题称为过度拟合。首先,确保您的输入数据已正确清理。机器学习的原则之一是:“垃圾进,垃圾出”。接下来,您应该平衡数据收集,例如 40 万条正面记录和 40 万条负面记录。按顺序,数据集应分为训练集、测试集和验证集(60%:20%:20%),例如使用 scikit-learn 库,如下例所示:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2)

然后我会使用不同的神经网络架构并尝试优化参数。就我个人而言,我建议使用 2 层 LSTM 神经网络或卷积神经网络和循环神经网络的组合(速度更快,阅读文章效果更好)。

1) 2 层 LSTM:

model = Sequential()
model.add(emb_layer)
model.add(LSTM(64, dropout=0.5, recurrent_dropout=0.5, return_sequences=True)
model.add(LSTM(64, dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(2))
model.add(Activation(‘sigmoid’))

你可以尝试使用2层64个隐藏神经元,添加recurrent_dropout参数。我们使用sigmoid函数的主要原因是因为它存在于(0到1)之间。因此,它特别适用于我们必须预测概率作为输出的模型。由于任何事物的概率只存在于 0 和 1 的范围之间,因此 sigmoid 是正确的选择。

2)CNN + LSTM

model = Sequential()
model.add(emb_layer)
model.add(Convolution1D(32, 3, padding=’same’))
model.add(Activation(‘relu’))
model.add(MaxPool1D(pool_size=2))
model.add(Dropout(0.5))
model.add(LSTM(32, dropout(0.5, recurrent_dropout=0.5, return_sequences=True))
model.add(LSTM(64, dropout(0.5, recurrent_dropout=0.5))
model.add(Dense(2))
model.add(Activation(‘sigmoid’))

您可以尝试结合使用 CNN 和 RNN。在此架构中,模型学习速度更快(速度提高了 5 倍)。

然后,在这两种情况下,您都需要应用优化、损失函数。

对于这两种情况,“Adam”优化器都是一个很好的优化器。

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

在最后一步中,我们在验证集上验证我们的网络。此外,我们使用回调,这将停止网络学习过程,以防万一,例如,在 3 次迭代中,分类的准确性没有变化。

from keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(patience=3)

model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_val, y_val), callbacks=[early_stopping])

我们还可以使用图表来控制过度拟合。如果您想了解如何操作,请查看 here .

如果您需要进一步帮助,请在评论中告诉我。

关于python - 如何使用 word2vec 修复(做得更好)文本分类模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com