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



我正在使用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而不是准确性作为跟踪模型性能的指标。

最新更新