使用深度学习改进多标签文本分类问题的结果 [关闭]
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)