text mining中,preprocessing需应用于training set还是test set?
结论先行
必须对测试集执行和训练集完全一致的预处理操作,不存在“测试集无需做tokenization、stemming等步骤”的合理选项。
核心原因
文本模型从训练阶段就被预处理流程绑定了输入分布:
- 你在训练阶段用tokenization切分文本、用stemming把变形的词汇归并为词根、基于训练集统计信息构建了固定词表,模型学到的所有特征映射、权重参数,都是基于这套预处理之后的文本格式训练出来的。
- 如果测试集的预处理规则和训练集不统一,比如测试集保留了“running”的完整形式,而训练集把所有同类变形都stem成了“run”,模型在固定词表里找不到“running”对应的特征位,只能把它当成无意义噪声,从根源上就会导致评估结果完全失真。这也是很多新手遇到“离线评估准确率很高,上线后效果暴跌”问题时,最需要优先排查的低级错误来源。
操作层面的硬性要求
- 所有预处理环节的工具版本、参数、规则必须全程固化:不管是分词器的切分逻辑、stemmer的算法版本、停用词表的选取范围、长文本截断的阈值,都不能在处理测试集时临时调整,哪怕是换了个同功能的不同工具,也会带来不必要的分布偏移。
- 严格禁止用测试集的统计信息反向调整预处理规则:比如不能因为测试集里某个词出现频率低,就特意把它保留在词表中,更不能直接把测试集的词汇合并进训练集的词表后再重训模型——这类操作属于典型的数据泄漏,得到的评估结果没有任何参考价值。
- 要区分“预处理流程对齐”和“适配真实场景”的关系:如果你的真实线上输入不需要做stemming,那你从一开始就不该在训练集预处理时加这一步;而不是为了“模拟真实场景”故意让测试集和训练集的预处理规则不一致。模型上线后跑的预处理流程,本来就应该和训练时用的流程是同一套。
内容的提问来源于stack exchange,提问作者user14738548
相关产品推荐
相关产品推荐

