问题陈述
我有一个文本多标签分类数据集,我发现数据集采样存在问题。
我面临两种不同的策略。第一个包括一起预处理语料库,然后在训练之前进行训练/测试拆分。第二个从预先制作的 train/test split开始,因此预处理是单独进行的。
预处理步骤只是将标签转换为 OneHot 表示并仅保留N个最频繁的表示。我期待类似(相同)的行为,但我得到了非常奇怪的结果。让我们仔细看看。
一起训练+测试然后拆分
从...开始:
|ID |TEXT |LABELS|
|-----|------|------|
|1.txt|the |A:B |
|2.txt|lazy |B |
|3.txt|fox |C |
|4.txt|jumps |B:C |
|5.txt|over |C:D |
|6.txt|crazy |D |
预处理和拆分后:训练
|ID |TEXT|A|B|C|D|
|-----|----|-|-|-|-|
|1.txt|the |1|1|0|0|
|2.txt|lazy|0|1|0|0|
|3.txt|fox |0|0|1|0|
测试
|ID |TEXT |A|B|C|D|
|-----|-----|-|-|-|-|
|4.txt|jumps|0|1|1|0|
|5.txt|over |0|0|1|1|
|6.txt|crazy|0|0|0|1|
结果很好。让我们以此作为参考。F1-Score = 0.61.
预制训练/测试拆分
从...开始:
火车
|ID |TEXT|LABELS|
|-----|----|------|
|1.txt|the |A:B |
|2.txt|lazy|B |
|3.txt|fox |C |
测试
|ID |TEXT |LABELS|
|-----|-----|------|
|4.txt|jumps|B:C |
|5.txt|over |C:D |
|6.txt|crazy|D |
预处理和拆分后:
火车
|ID |TEXT|A|B|C|
|-----|----|-|-|-|
|1.txt|the |1|1|0|
|2.txt|lazy|0|1|0|
|3.txt|fox |0|0|1|
测试
|ID |TEXT |B|C|D|
|-----|-----|-|-|-|
|4.txt|jumps|1|1|0|
|5.txt|over |0|1|1|
|6.txt|crazy|0|0|1|
结果完全退化了。F1-Score = 0.15.
到底是怎么回事?什么可能导致结果的差异?
额外的信息
- 在预测步骤预测的标签与测试集上的标签不兼容。我已经考虑到这一点并且得到了正确的管理,这不是问题。
- 分裂是完全一样的。train/test 中的文档在两种情况下都是相同的。