为什么我用于多标签文本分类的 LSTM 表现不佳?

Why my LSTM for Multi-Label Text Classification underperforms?

我正在使用 Windows 10 台机器。 库:带有 TensorFlow 2.0 的 Keras Embeddings:Glove(100 个维度)

我正在尝试为多标签文本分类实现 LSTM 架构。

我的问题是,无论我做了多少微调,结果都非常糟糕。

我在 DL 实际实现方面没有经验,这就是我征求您的意见的原因。

下面我将说明到目前为止我的数据集和模型的基本信息。

我不能嵌入图片,因为我是新会员,所以它们显示为链接。

Dataset form+Embedings form+train-test-split form

Dataset's labels distribution

My Implementation of LSTM

Model's Summary

Model's Accuracy plot

Model's Loss plot

如您所见,我的数据集非常小(约 6.000 个示例),这可能是我无法取得更好结果的原因之一。尽管如此,我还是选择了它,因为它没有偏见。

  1. 我想知道我的代码在多标签文本分类的维度、形状、激活函数和损失函数方面是否存在任何根本性错误?

  2. 为了在我的模型上获得更好的结果,您有什么建议?也非常欢迎任何关于优化、方法、节点数量、层、辍学等的一般建议。

到目前为止我达到的模型的最佳 val 准确度是 ~0.54,即使我试图提高它,它似乎也停在那里。

有很多方法可以解决这个问题,但最常见的错误是让您的模型过度拟合训练数据。 我怀疑 0.54 的准确度意味着您的模型在几乎所有情况下都选择了最常见的标签(冒犯性)。

因此,考虑以下简单解决方案之一:

  • 创建平衡的训练数据:例如每个 class.
  • 的 400 个样本
  • 或样本平衡批次进行训练(每个训练批次的标签数量完全相同)

除了跟踪精度和损失,看看 precision-recall-f1 或什至更好地尝试绘制曲线下的区域,也许不同的 classes 需要不同的激活阈值。 (如果你在最后一层使用 Sigmoid,也许一个 class 可以用 0.2 激活表现更好,另一个 class 可以用 0.7 表现更好)

  1. 首先尝试简单模型。比分类嵌入 1 层 LSTM
  2. 如何标记文本,词汇量是否足够?
  3. 尝试骰子损失