如何解决使用 LSTM 和 Glove、Keras 和 Tensorflow 改进多类文本分类模型
我花了一些时间来尝试提高我的多类文本分类任务的 F1-Score。我正在从笔记本电脑评论中提取方面和情绪。因此有 3 个标签,B_A / I_A / O 等。我非常感谢任何改进我的网络的建议,例如附加层或其他嵌入。 (也许我还应该为我的任务尝试多类分类以外的其他东西) 现在,以下代码的 F1 分数约为 60%:
#vocab_size=4840,embedding is glove6B,max_seq_length=100
model = Sequential()
model.add(Embedding(vocab_size,300,weights=[embedding_vectors],input_length=max_seq_length,trainable= False))
model.add(Dropout(0.1))
model.add(Conv1D(3000,1,activation='relu'))
model.add(Bidirectional(LSTM(units=150,recurrent_dropout=0,return_sequences=True)))
model.add(Dense(32,activation='relu'))
model.add(Dense(n_tags,activation='softmax'))
model.compile(loss="categorical_crossentropy",optimizer="rmsprop",metrics=["categorical_accuracy"])
model.summary()
# fit model on train data
model.fit(x_train,y_train,batch_size=64,epochs=10)
解决方法
我不了解数据,但我确实有很多关于使用 keras 进行多文本分类的总体建议:
- 尝试添加多个过滤量较小的 Conv1D 层,而不是添加 1 3000 个 Conv1D 层
- 对于 32 个神经元的密集层,尝试增加神经元的数量。通常,当输出层之前的层中没有足够的神经元时,模型会失去准确性
- 尝试添加一个 LeakyReLU,而不是将 activation='relu' 添加到层中,这样它就可以解决正在死亡的 ReLU 问题(如果存在)
- 不要在 Embedding 层之后添加 Dropout,而是在 Conv1D 层之后添加 Dropout。在仅用于矢量化输入的不可训练层之后,我认为不需要 Dropout
如果您还没有尝试过我的任何建议,我建议您尝试一下。我特别会尝试第四个,因为在嵌入层之后的 Dropout 似乎没有必要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。