【问题标题】:Improve multiclass text classification model with LSTM and Glove, Keras and Tensorflow使用 LSTM 和 Glove、Keras 和 Tensorflow 改进多类文本分类模型
【发布时间】:2021-02-02 21:35:00
【问题描述】:

我花了一些时间来提高我的多类文本分类任务的 F1 分数。我从笔记本电脑评论中提取方面和情绪。因此有 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)

【问题讨论】:

    标签: tensorflow keras lstm stanford-nlp layer


    【解决方案1】:

    我不了解数据,但总体上我确实对使用 keras 进行多文本分类有很多建议:

    1. 不要添加 1 个 3000 Conv1D 层,而是尝试添加多个过滤量较小的 Conv1D 层
    2. 对于 32 个神经元的密集层,尝试增加神经元的数量。通常,当您在输出层之前的层中没有足够的神经元时,模型会失去准确性
    3. 不要在层中添加activation='relu',而是尝试添加一个LeakyReLU,这样如果存在ReLU,它就会解决濒临死亡的问题
    4. 不要在 Embedding 层之后添加 Dropout,而是在 Conv1D 层之后添加 Dropout。在仅用于矢量化输入的不可训练层之后,我认为不需要 Dropout

    如果您还没有尝试过我的任何建议,我建议您尝试一下。我特别会尝试第 4 个,因为嵌入层之后的 Dropout 似乎没有必要。

    【讨论】:

    • 感谢您的建议!不幸的是,它并没有提高我的 f1 分数。还有什么想法吗?我读到了一个字符嵌入,也许可以试试?
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 2021-11-30
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多