如何使用 CNN 和 LSTM 元素改进文本分类模型? [关闭]

Posted

技术标签:

【中文标题】如何使用 CNN 和 LSTM 元素改进文本分类模型? [关闭]【英文标题】:How to improve Text Classication Model with CNN and LSTM elements? [closed] 【发布时间】:2021-06-09 14:11:22 【问题描述】:

我创建了一个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, 1, 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)

【问题讨论】:

【参考方案1】:

几个问题:

“糟糕的训练数据”是什么意思? 您的数据是什么语言的? 预训练嵌入从何而来?

可以尝试的一些事情(没有特别的顺序,也不是详尽无遗):

使用转换器而不是 LSTM,如果语言正确,甚至可以使用预训练的转换器(例如 BERT) 增加 LSTM 和/或 CNN 的层数 查找更大维度的嵌入(GloVE 通常为 300 维) 为您的 LSTM 添加(多头)self-attention 使用验证集提前停止

【讨论】:

我的意思是数据集的质量很差,因为它是由业余爱好者手动标记的。语言是 python 3.7(我正在使用 tensorflow 和 keras)。预置嵌入是一个 100 维的 GloVe 嵌入。 BERT 是一种可能,谢谢。增加层数是什么意思?你的意思是我应该添加第二个 LSTM 层?我尝试了 300d-GloVe,它并没有增加我的 f1。究竟什么是多头自注意力?我在 LSTM 层之后尝试了一个简单的注意力层,但它没有任何改进。非常感谢您的帮助! 什么自然语言? (例如英语、法语、德语等) 多头关注:paperswithcode.com/method/multi-head-attention 是的,你可以尝试堆叠多个 LSTM 层 再次感谢您的回答!它是英文的(笔记本电脑评论)。我会尝试你提到的其他方法。

以上是关于如何使用 CNN 和 LSTM 元素改进文本分类模型? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

文本分类《短文本分类的ResLCNN模型》

文本分类《短文本分类的ResLCNN模型》

文本分类A C-LSTM Neural Network for Text Classification

使用 LSTM 和 CNN 对 Keras 进行故障排除以进行时间序列分类

CNN-LSTM图像分类

在 keras 中使用 CNN-LSTM 模型进行序列到序列分类