繁体   English   中英

使用Keras进行情感分析时获得奇怪的准确性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM