如何对具有许多不平衡类的数据集执行文本分类

数据挖掘 Python nlp
2021-09-22 02:50:02

我对 NLP 完全陌生,我的任务是对包含 193k 条记录的数据集执行文本分类。班级数为107。

记录数最多的类包含 > 16k 个条目,而频率较低的仅包含 5 个。您可以在下面看到频率分布。由于保密要求,班级名称已被编辑。

类频分布

每个条目最多可包含 100 个字符。文本非常简洁,几乎没有英文单词,剩下的就是代码、地点和人名。

你会如何解决这样的问题?进行文本增强是否有意义,或者我应该在模型评估阶段实施某种形式的加权?如果是这样,您会推荐哪些文本增强/称重工具或程序?

2个回答
  • 对于 200k 个实例,具有少于 10 个实例的类代表不到 0.005% 的数据。模型不太可能学会区分所有这些类,尤其是最小的类。
  • 确实不建议使用文本进行数据增强。文本非常多样化,因此无法从几个实例中生成具有良好代表性的样本。这只会导致重复几乎相同的实例(毫无意义)或生成并不真正代表类的虚构数据(有偏见的数据集)。

实际上,用非常小的类不可能做任何事情。我的建议是首先训练一个只有前 5 或 10 个类的模型,然后如果它运行得相当好,然后从那里改进。请注意,短文本通常难以分类,因为它们可能包含的信息太少。作为一个简单的经验法则,如果查看实例的人类专家无法找到它属于哪个类,那么机器学习模型很可能也不能。

在我当前的公司中构建主题分类器时,我遇到了所有可能的类之间不平衡的类似情况,在本例中是呼叫中心对话数据集。

正如@Erwan 还建议的那样,我会尝试:

  • 首先关注最常见课程的模型(作为类比,在我的情况下,它首先是关于仅对主要主题进行建模);如果您发现第一种方法足够可靠或高于基线模型,您可以尝试:
  • 继续使用具有更多类的模型,但仍将代表性较低的模型分组到称为“其他”的标签中
  • 作为后续步骤,在我的情况下,有一些通用主题(最常见的主题,在您的情况下是最常见的标签),并且每个主题都建立了一个特定的模型来检测相关的子主题(如果您可以将标签分类为通用和二级标签...)。

关于文本的长度,我建议在建模阶段考虑 François Chollet 的这个实验经验法则:

在此处输入图像描述