[英]Getting strange accuracy in sentiment analysis with keras
我正在使用word2vec作为嵌入方法在python中进行情感分析项目。 (在我的NON_ENGLISH语料库中,我考虑了每个带有0标签的正向推文,正向= 1,中立= 2)我有2个问题。 **假设我的语气完全平衡,我设置了9000条火车推文和900条测试书
1.8900 / 8900 [==============================]-15s 2ms / step-损耗:0.5896-acc:0.6330-val_loss :0.0000e + 00-val_acc:1.0000
如您所见,验证准确性(val_acc)为1.0000 !!!!!!!!
2.虽然val_acc为1,但我的模型预测所有句子均为负数! 我该如何解决?
nb_epochs = 100
batch_size = 32
model = Sequential()
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same', input_shape=(max_tweet_length,vector_size)))
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same'))
model.add(Dropout(0.25))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Dropout(0.25))
model.add(Dense(256, activation='tanh'))
model.add(Dense(256, activation='tanh'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(2, activation='softmax'))
谢谢
您的问题有几个问题; 尝试在此处提供一般性答案,因为您的流程中有某些部分未显示。
假设我的语料完全平衡,我设置了9000条推文用于训练,设置900条用于测试
这不是您的输出显示的内容。 训练期间的Keras输出
八千九分之八千九百
清楚地说,您的训练集包含8900个样本,而不是您声称的9000-900 = 8100。 因此,如果您的初始数据集确实是9000个样本,那么验证集仅剩下100个样本。 很小的验证集不是一个好主意,在极端情况下,它们会导致虚假报告的准确性,例如此处(请注意,不仅您的验证精度为完美的1.0,而且还远远高于您的训练精度)。
除上述内容外,我还看到类似的情况,即初始数据中有重复项 。 在这种情况下,随机分割程序很容易导致样本进入训练集中,而其重复项也出现在验证集中,从而进一步损害了整个过程并导致结果混乱。 因此, 请检查重复项并在拆分前将其删除 。
最后,作为注释中的@today注释,由于您有3个类,因此输出层应有3个单位,而不是2个; 这似乎与您的问题无关,但我不确定这确实是...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.