使用深度学习改善多标签文本分类问题的结果

问题描述

我正在对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)

解决方法

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

这是我要尝试的一些实验:

  • 增加嵌入层的尺寸(允许它包含更多信息),或使用经过预先训练的词嵌入,例如GloVe
  • Conv1D层具有不同参数的实验
  • 将Conv1D层更改为循环层(例如LSTM,GRU),该层通常可以很好地与序列配合使用
  • 将“全局最大池”更改为“最大池”
  • 增加批次大小
  • 在网络上增加一层

别忘了跟踪实验:MLFlow是一个很好的库。在这种情况下,您可能希望将模型定义转换为一个函数(例如def build_model(**kwargs):),在该函数中,设计决策由参数控制。这可以帮助您获得更具可读性和可登录性的代码(除了在自动超参数调整中能很好地工作之外)。

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