【问题标题】:How to improve Text Classication Model with CNN and LSTM elements? [closed]如何使用 CNN 和 LSTM 元素改进文本分类模型? [关闭]
【发布时间】: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)

【问题讨论】:

    标签: tensorflow keras lstm recurrent-neural-network text-classification


    【解决方案1】:

    几个问题:

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

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

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

    【讨论】:

    • 我的意思是数据集的质量很差,因为它是由业余爱好者手动标记的。语言是 python 3.7(我正在使用 tensorflow 和 keras)。预置嵌入是一个 100 维的 GloVe 嵌入。 BERT 是一种可能,谢谢。增加层数是什么意思?你的意思是我应该添加第二个 LSTM 层?我尝试了 300d-GloVe,它并没有增加我的 f1。究竟什么是多头自注意力?我在 LSTM 层之后尝试了一个简单的注意力层,但它没有任何改进。非常感谢您的帮助!
    • 什么自然语言? (例如英语、法语、德语等)
    • 是的,你可以尝试堆叠多个 LSTM 层
    • 再次感谢您的回答!它是英文的(笔记本电脑评论)。我会尝试你提到的其他方法。
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2019-09-05
    • 2022-12-03
    • 2021-01-25
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多