如何解决如何使用 CNN 和 LSTM 元素改进文本分类模型?
我创建了一个 neural network
来提取方面、情绪或修饰语。你可以在下面找到我的代码。我得到了大约 62% 的 F1 分数,但我不知道为什么它给了我这么糟糕的结果。您对如何改进我的模型和 f1 分数有什么建议吗?目前包括 glove 100d、tensorflow、keras、python 3.7。
model = Sequential()
model.add(Embedding(vocab_size,100,weights=[embedding_vectors],input_length=max_seq_length,trainable= False))
model.add(Conv1D(1000,1,activation=LeakyReLU(alpha=0.1)))
model.add(Conv1D(200,activation=LeakyReLU(alpha=0.1)))
model.add(Dropout(0.2))
model.add(Bidirectional(LSTM(units=100,dropout = 0.5,recurrent_dropout = 0.5,return_sequences=True,kernel_regularizer=regularizers.l2(0.000001))))
model.add(Dropout(0.5))
model.add(Timedistributed(Dense(512,activation=LeakyReLU(alpha=0.1))))
model.add(Dense(n_tags,activation='softmax'))
opt = RMSprop(learning_rate=0.0008)
model.compile(loss="categorical_crossentropy",optimizer=opt,metrics=["categorical_accuracy"])
model.summary()
# fit model on train data
model.fit(x_train,y_train,batch_size=32,epochs=10)
解决方法
几个问题:
- “糟糕的训练数据”是什么意思?
- 您的数据使用什么语言?
- 预训练嵌入来自哪里?
尝试一些事情(没有特定的顺序,也绝不是详尽无遗的):
- 使用转换器代替 LSTM,如果使用正确的语言,甚至可以使用经过预训练的转换器(例如 BERT)
- 增加 LSTM 和/或 CNN 的层数
- 查找更大维度的嵌入(GloVE 通常为 300-d)
- 为您的 LSTM 添加(多头)自注意力
- 使用验证集提前停止
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。