命名实体识别和类不平衡

机器算法验证 机器学习 分类 不平衡类 多级 记忆
2022-03-06 18:42:48

我已经为命名实体识别 (NER) 问题实现了最大熵马尔可夫模型 (MEMM)。我有四个课程:地理、人、材料(书名等)和其他。

other在训练和测试数据集中的比例过高。它发生在 88%(约 40k 个样本)的时间。

我相信其他作者一定有这个问题。你建议我如何解决这个问题?

编辑:单个数据样本是一个完整的标记句子。大部分句子被标记为other我猜重采样技术在这里不起作用?您是否建议我使用单个标记来训练数据集,而不是整个句子?

编辑 2:作为对我的帖子重复的回应:您确实意识到您已经链接到一个问题,该问题在我的 2 年后被问到,对吗?

2个回答

你可以尝试一些事情:

  1. 对目标类进行过度采样。插入其他三个类的重复记录以扩充您的训练数据集

  2. 对负面反应进行欠采样。other不要在训练数据中包含所有实例,而只使用一小部分。

  3. Bootstrap 对负面响应进行欠采样。这可能是我所介绍的最强大的选择。other首先使用非分类记录播种您的训练数据。然后用类中的不同随机样本(通过替换选择)来训练每个引导迭代,以增加种子训练集other然后,您可以从引导程序中得出模型分类的置信区间(如 Kaushik 建议的那样),或者将您生成的模型视为一个集合,并使用平均或多数投票组合它们的分数来确定您的分类。如果你愿意,你甚至可以在这里实现提升。

我成功使用的一种方法是重新采样数据。我通过从每个类中抽取 N 个样本来运行引导程序,其中 N 是具有最小样本的类的大小。N个样本是随机选择的,没有放回。然后我将每个重新采样的类拆分为一个训练和测试集(比如 70-30 拆分)并运行我的分类器。对于每个引导带,我都会得到一个分数。我运行了大约 1000 个引导程序来获得我分数的置信区间。

重采样迫使每个类产生相同数量的训练和测试样本来解决类不平衡问题,但随后我会进行引导以获得有意义的平均分数和置信区间。

值得一提的是,我有一篇简短的文章,其中包含一些讨论不平衡类的简单 Python 代码。