使用深度学习改进多标签文本分类问题的结果 [关闭]

Posted

技术标签:

【中文标题】使用深度学习改进多标签文本分类问题的结果 [关闭]【英文标题】:Improve results for a multi-label text classification problem using deep learning [closed] 【发布时间】:2021-02-13 05:08:00 【问题描述】:

我正在将深度学习与 keras 一起用于多标签文本分类。但是,我得到的准确度仅在 73-75 之间。我想我在这里误判了其中一个参数。有没有办法改善这一点? (顺便说一下,我的行数是 50858)

这是我用于构建和拟合模型的代码:

filter_length = 64
num_classes = 39
model = Sequential()
model.add(Embedding(max_words, 39, input_length=maxlen))
model.add(Dropout(0.3))
model.add(Conv1D(filter_length, 3, padding='same', activation='relu', strides=1))
model.add(GlobalMaxPool1D())
model.add(Dense(num_classes))
model.add(Activation('sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

callbacks = [
    ReduceLROnPlateau(), 
    EarlyStopping(patience=4), 
    ModelCheckpoint(filepath='model-conv1d1.h5', save_best_only=True)
]

history = model.fit(x_train, y_train,
                    #class_weight=class_weight,
                    epochs=100,
                    batch_size=10,
                    validation_split=0.1,
                    callbacks=callbacks)

【问题讨论】:

【参考方案1】:

如果不知道不同试验的数据和结果,很难给出答案。您需要做的是自动或手动调整超参数。

以下是我会尝试的一些实验:

增加嵌入层的维度(允许它包含更多信息),或使用预先训练的词嵌入,例如 GloVe 用不同的参数对 Conv1D 层进行实验 将 Conv1D 层更改为循环层(例如 LSTM、GRU),这通常适用于序列 将全局最大池化更改为最大池化 增加批量大小 向网络添加一个额外的层

不要忘记跟踪您的实验:MLFlow 就是一个很好的库。在这种情况下,您可能希望将模型定义并编译成一个函数(例如 def build_model(**kwargs): ),您的设计决策由参数控制。这可以帮助您获得更具可读性和可记录性的代码(除了可以很好地使用自动超参数调整)。

最后,确保您的类在输入模型时是平衡的(否则是过度/欠采样)并随机排序。如果没有,请考虑是否使用例如AUC ROC 而不是准确率作为衡量模型性能的指标。

【讨论】:

以上是关于使用深度学习改进多标签文本分类问题的结果 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用深度学习处理文本分类中的嘈杂训练标签

《自然语言处理实战入门》深度学习 ---- 预训练模型的使用(ALBERT 进行多标签文本分类与微调 fine tune)

深度学习实战案例:新闻文本分类

深度学习实战案例:新闻文本分类

《自然语言处理实战入门》深度学习 ---- 预训练模型的使用(ALBERT 进行多标签文本分类与CPU 下的微调 fine tune)

为多标签文本分类转换数据集