在多类文本分类中是否需要缓解类不平衡问题?



我在python中使用BERT执行多类文本分类。我用来重新训练模型的数据集是高度不平衡的。现在,我很清楚,类的不平衡会导致一个糟糕的模型,在模型训练之前应该通过欠采样、过采样等来平衡训练集。

然而,训练集的分布应该与生产数据的分布相似也是一个事实。

现在,如果我确定在生产环境中扔给我的数据也将是不平衡的,也就是说,要分类的样本可能属于一个或多个类,而不是其他一些类,我应该平衡我的训练集吗?

当我知道训练集的分布与我在生产中遇到的数据分布相似时,我是否应该保持训练集的原样?

请给我一些想法,或者提供一些博客或论文来理解这个问题。

类不平衡本身不是问题,问题是少数类的样本太少,使得描述其统计分布变得更加困难,这对于高维数据尤其如此(BERT嵌入有768维IIRC)。

此外,逻辑函数倾向于低估罕见事件的概率(参见机制中的https://gking.harvard.edu/files/gking/files/0s.pdf),这可以通过选择分类阈值以及重新采样来抵消。

CrossValidated对此有相当多的讨论(如https://stats.stackexchange.com/questions/357466)。TL;博士:

  • 虽然太少的类样本可能会降低预测质量,但重采样不能保证给出整体改进;至少,没有一个完美的重新采样比例的通用配方,你必须自己测试一下;
  • 然而,现实生活中的任务通常不平等地权衡分类错误:重新采样可能有助于以整体准确性为代价提高某些类的指标。同样适用于分类阈值的选择。

这取决于您的分类目标:

  • 你想要一个随机样本被正确分类的高概率吗?→不要平衡你的训练集。
  • 你想要一个高概率的随机样本从一个稀有类分类是否正确?→平衡你的训练集或在训练期间应用加权,增加稀有类的权重。

例如,在客户端看到的web应用程序中,重要的是大多数样本被正确分类,忽略罕见的类,而在异常检测/分类的情况下,罕见的类被正确分类是非常重要的。

请记住,高度不平衡的数据集往往总是预测大多数类,因此增加稀有类的数量或权重可能是一个好主意,即使没有完美平衡训练集。

P(label | sample)P(label)不一样。

P(label | sample)是你的训练目标。

在对具有大参数空间的模型进行基于梯度的小批量学习的情况下,稀有标签对模型训练的占用很小。因此,您的模型适合P(label)

为了避免符合P(label),你可以平衡批次。在一个时代的整体批次中,数据看起来像是上采样的少数族裔。目标是得到一个更好的损失函数,它的梯度将参数移动到更好的分类目标。

我没有任何证据来证明这个。这也许不是一个准确的说法。有足够的训练数据(关于特性的复杂性)和足够的训练步骤你可能不需要平衡。但大多数语言任务都相当复杂,而且没有足够的数据进行训练。这就是我在上面的语句中所想象的情况。

最新更新