如何通过词嵌入改进循环神经网络的文本(新闻文章)的二元分类模型?

数据挖掘 分类 rnn 词嵌入
2022-02-27 06:59:39

我正在尝试使用带有词嵌入的递归神经网络对新闻文章进行二进制分类。以下是模型的参数:

Data:
    8000 labelled news articles (Sports:Non-sports::15:85)

Parameters:
    embedding size = 128
    vocabulary size = 100000
    No. of LSTM cell in each layer = 128
    No. of hidden layers = 2
    batch size = 16
    epochs = 10000

Result:
    AUC on training set = 0.60
    AUC on testing set = 0.55

由于训练和测试误差都很高,模型欠拟合,需要更多数据。所以我在这里有几个疑问:

  1. 所需的最佳数据大小是多少?
  2. 我们可以更改参数以提高 AUC。通过减少、嵌入大小或神经元数量,我们可以最小化自由度。
4个回答

我认为你应该小心你倾向于使用哪些算法。

机器学习算法的结构应该如下:特征提取,然后是模型。这是应该分开做的两件事。

特征提取

这是词袋,n_grams 和 word2vec。这些都是文本示例的好选择。我认为就您而言,词袋是一个不错的选择。但是,如果这会生成一个稀疏矩阵,那么 n_grams 可能会更好。您可以测试所有 3 种方法。如果您的词汇量为 100,000,那么您确实需要使用一些额外的特征提取。

该模型

从理论上讲,模型中的参数越多,您需要对其进行充分训练的数据就越多,否则您将保留大量偏差。这意味着错误率很高。神经网络往往具有非常多的参数。因此,他们需要大量数据来训练。

但是,你有 8000 个实例!!!是的。但是,每个实例也有 100,000 个特征。即使对于浅层机器学习模型,这也是不够的。对于神经网络,我通常建议遵循这个非常普遍的经验法则,

#examples=100#features.

因此,您将需要大量数据来正确训练您的神经网络模型。此外,如果您有一个倾斜的数据集,那么您应该期望使用更多的训练示例,以显示足够的示例,以便模型能够区分这两个类。

我会建议一个不太密集的模型。您应该尝试使用:naive bayes、kernel-SVM 或 knn 进行文本分类。这些方法比神经网络做得好得多。特别是考虑到您有一个倾斜的数据集!

我的建议

我会从词袋开始,然后使用 kernel-SVM。这应该是一个很好的起点。

对于您拥有的数据量,推荐使用 0% 的循环神经网络。

您的数据集中存在一个主要的不平衡问题,类别的比例为 15:85。数据也较少,但首先您必须解决不平衡的问题。这可能是数据拟合不足的根本原因。调整一些参数可能会给你带来更好的结果,但我认为在你解决前面提到的问题之前你不会体验到任何显着的改进。

编辑:我主要使用 CNN 进行文本分类,并且在经验中一直发现它的性能与 RNN 相当或更好。

为了减轻类不平衡的问题,您可以执行以下操作:

  1. 应用加权交叉熵。
  2. 当您将每个批次提供给模型时,请尝试确保批次数据中没有类别不平衡。

在如此小的数据上训练词嵌入是没有意义的。尝试使用预训练的词向量,如 Google 新闻词向量。

您需要在像这样的外部较大标记数据集上训练您的分类器。(词汇​​量1M+)

您可能需要对数据进行切片以仅包含体育文章。

您可以使用这 8000 篇文章作为分类器的测试数据。