我正在研究一个巨大且未标记的文本数据集。它有超过30M 行(=句子)。
我们试图通过分析 20 个不同的法律问题(例如种族主义、侮辱等)来检测非法判决。所以,这是一个多标签分类问题。正如你可以猜到的,大部分句子都是合法的,这使得数据集非常不平衡。
我们决定专注于 3 个主要课程(根据反馈)并开始使用主动学习(AL)来获得训练集和验证集(稍后将创建测试集):
我们提取了第一组 1500 个句子并标记了它们。该数据集是由一半随机句子和一半明智选择的句子(使用正则表达式和嵌入邻近度)创建的。因此,这个数据集并不代表真实的分布。
我们将第一组分成训练集和验证集(500 / 1 000)
由此,我们在训练集上训练了一个模型,并从池集中提取了 1000 个样本进行标记(使用 AL 选择函数)。标记后,我们将这些样本注入训练集中。我们多次执行此过程。
最后,我们的训练集中有 7000 个样本,验证集中有 1000 个样本。
一旦这个过程完成,我们训练了一个 BI-LSTM,我们惊讶地发现我们的验证集(~ 0.97) 比我们的训练集 (~ 0.90)有更好的 f1-score 。我们的理解是,训练集(通过 AL)比我们的验证集有更复杂的案例,在这种情况下,我们显然无法检查模型在那些“复杂案例”上是否表现良好。
它还会产生烦人的副作用,例如过早触发提前停止,或者根据验证集保存“最佳模型”,而某些时期显然更擅长管理更多不同的案例。
我们想在我们的验证集中添加一些新的特定案例。所以,我们认为,在我们的过程中,我们应该将一部分新标记的样本添加到我们的验证集中(比如说 15%)。
优点:
- 我们的验证集中更多不同的案例,更好的指标
- 在训练阶段不再有烦人的副作用
缺点:
- 我们的训练集中的数据更少
- 过度拟合这些极端情况的风险???
你认为这是一个好方法吗?
主动学习有什么共同点吗?
我们在标签过程中是否做错了什么?