为什么我用于多标签文本分类的 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 个示例),这可能是我无法取得更好结果的原因之一。尽管如此,我还是选择了它,因为它没有偏见。
我想知道我的代码在多标签文本分类的维度、形状、激活函数和损失函数方面是否存在任何根本性错误?
为了在我的模型上获得更好的结果,您有什么建议?也非常欢迎任何关于优化、方法、节点数量、层、辍学等的一般建议。
到目前为止我达到的模型的最佳 val 准确度是 ~0.54,即使我试图提高它,它似乎也停在那里。
有很多方法可以解决这个问题,但最常见的错误是让您的模型过度拟合训练数据。
我怀疑 0.54 的准确度意味着您的模型在几乎所有情况下都选择了最常见的标签(冒犯性)。
因此,考虑以下简单解决方案之一:
- 创建平衡的训练数据:例如每个 class.
的 400 个样本
- 或样本平衡批次进行训练(每个训练批次的标签数量完全相同)
除了跟踪精度和损失,看看 precision-recall-f1 或什至更好地尝试绘制曲线下的区域,也许不同的 classes 需要不同的激活阈值。 (如果你在最后一层使用 Sigmoid,也许一个 class 可以用 0.2 激活表现更好,另一个 class 可以用 0.7 表现更好)
- 首先尝试简单模型。比分类嵌入 1 层 LSTM
- 如何标记文本,词汇量是否足够?
- 尝试骰子损失
我正在使用 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 个示例),这可能是我无法取得更好结果的原因之一。尽管如此,我还是选择了它,因为它没有偏见。
我想知道我的代码在多标签文本分类的维度、形状、激活函数和损失函数方面是否存在任何根本性错误?
为了在我的模型上获得更好的结果,您有什么建议?也非常欢迎任何关于优化、方法、节点数量、层、辍学等的一般建议。
到目前为止我达到的模型的最佳 val 准确度是 ~0.54,即使我试图提高它,它似乎也停在那里。
有很多方法可以解决这个问题,但最常见的错误是让您的模型过度拟合训练数据。 我怀疑 0.54 的准确度意味着您的模型在几乎所有情况下都选择了最常见的标签(冒犯性)。
因此,考虑以下简单解决方案之一:
- 创建平衡的训练数据:例如每个 class. 的 400 个样本
- 或样本平衡批次进行训练(每个训练批次的标签数量完全相同)
除了跟踪精度和损失,看看 precision-recall-f1 或什至更好地尝试绘制曲线下的区域,也许不同的 classes 需要不同的激活阈值。 (如果你在最后一层使用 Sigmoid,也许一个 class 可以用 0.2 激活表现更好,另一个 class 可以用 0.7 表现更好)
- 首先尝试简单模型。比分类嵌入 1 层 LSTM
- 如何标记文本,词汇量是否足够?
- 尝试骰子损失