训练分类模型时如何无需额外训练设置默认分类类别
无需额外训练设置默认分类的可行方案
完全可以在不新增训练数据、不重新训练模型的前提下实现默认分类,核心是在推理阶段增加一层输出校验逻辑,常用实现方式如下:
- 基于softmax置信度阈值过滤
你训练好的文本分类模型最后一层通常为softmax激活层,会输出每个预设分类的匹配概率,所有概率总和为1。你可以提前设定一个置信度阈值,当模型输出的最高匹配概率低于该阈值时,直接将文本归类到默认的「其他」分类即可。
参考代码(适配TensorFlow 2.7版本):
import tensorflow as tf # 加载已训练完成的文本分类模型 trained_model = tf.keras.models.load_model("your_text_clf_model.h5") # 置信度阈值,可根据测试效果调整,通用建议取值范围为0.6~0.8 CONFIDENCE_THRESHOLD = 0.7 # 你的预设分类列表,最后一位为默认分类 CLASSES = ["时政", "娱乐", "科技", "体育", "其他"] def predict_with_default(input_text): pred_probs = trained_model.predict(input_text, verbose=0)[0] max_prob = pred_probs.max() pred_class_idx = pred_probs.argmax() if max_prob < CONFIDENCE_THRESHOLD: # 置信度不足,返回默认分类 return CLASSES[-1] return CLASSES[pred_class_idx]
阈值可以通过混跑「预设分类内样本+非预设分类样本」的测试集调整,直到匹配你的业务误判容忍度即可。
- 基于logit差值判断
如果你的模型输出层没有加softmax激活,直接输出logit值,也可以通过最高logit值与第二高logit值的差值判断分类置信度:差值低于阈值时归为默认分类。该方案比softmax阈值判断的抗干扰性更强,适合预设分类之间区分度较低的场景。
注意事项
- 上述两种方案都不需要修改模型结构,也不需要额外标注样本训练,仅需在推理逻辑中新增几行判断代码即可实现
- 阈值没有统一标准:如果要求预设分类的识别准确率优先,可将阈值设置得更高,更多边缘样本会被归为默认分类;如果要求尽可能少漏判预设分类,可将阈值设置得更低
- 如果后续发现阈值调整无法满足误判率要求,再考虑新增少量非预设分类样本微调模型即可,前期可以直接用上述方案快速上线
内容的提问来源于stack exchange,提问作者Yossi
相关产品推荐
相关产品推荐

