Skip to content

在文本分类任务中,如何处理样本(类别)不平衡的问题? ​

  • 标签:自然语言处理(NLP)、文本分类

🏛 业务架构师 ​

文本分类的样本不平衡处理,我按"数据—算法—评估"三层给方案(按 ROI 排序):

数据层(优先做):

  1. 代价敏感采样:欠采样多数类(随机丢弃或聚类保留代表样本)+ 过采样少数类(SMOTE 类合成、复制+扰动)——注意文本的 SMOTE 要在 embedding 空间做插值再还原,或用 LLM 生成少数类样本(2026 年主流做法:让 GPT/Qwen 按少数类样本风格批量生成,再人工抽检);
  2. 补数据:不平衡的根源常是标注遗漏——专项补标少数类,比算法技巧治本。

算法层:

  1. 类别权重/损失加权:class weight 或 focal loss——让模型为少数类的错误付出更高代价,一行配置的事;
  2. 阈值调整:不按 0.5 一刀切,按业务代价找最优判决阈值(对高风险类宁可多误报)。

评估层(最容易被忽视):不平衡下 accuracy 是"美丽的谎言"——99:1 的数据全预测多数类就有 99% 准确率。必须看每类的 precision/recall/F1、宏平均 F1(macro-F1)、AUPRC,按业务定"少数类的召回底线"(欺诈检测:宁可误杀,不可漏杀)。

业务决策框架:先问"不平衡是否等于不重要"——很多时候长尾类恰恰是业务价值所在(欺诈、流失、重症识别);其次算错误代价矩阵(漏一个欺诈损失 vs 误拦一单的成本)——技术方案由代价结构决定,而不是盲目追求平衡。

🏗 系统架构师 ​

类别不平衡是文本分类的常态(故障工单里 1% 是紧急类),我按数据层、算法层、评估层三道防线:

数据层(优先做):

  • 过采样:复制少数类(或 SMOTE 类文本增强——回译、同义改写、LLM 生成变体——LLM 数据增强是 2026 年的主流姿势:给少数类样本让 LLM 生成同分布变体,扩 5~10 倍);
  • 欠采样:砍多数类(信息损失,配合集成:EasyEnsemble 多份欠采样子集训练多模型);
  • 数据配比重构:训练分布对齐目标指标(不是简单 1:1——按误分类代价调整)。

算法层:

  • 损失加权:class weight 少数类加权(focal loss 更进一步——聚焦难样本,降易样本权重);一行配置,性价比最高;
  • 阈值调优:不按 0.5 判,按业务调(高召回场景低阈值);
  • 两级分类:极度不平衡(1:1000)时"异常检测 + 精分类"两级架构比单级分类器稳。

评估层(最容易被忽略):

  • 拒绝 accuracy(99% 准确率可能只是把少数类全判错);用 macro-F1、PR-AUC、少数类的 precision/recall 单列监控;
  • 按业务代价定优化目标:漏掉紧急工单(漏报)与误报的成本不对称时,指标要显式加权。

架构师视角:不平衡问题的本质是优化目标与业务目标错位——先明确"哪类错误的代价大",再决定采样/加权/阈值策略;线上要有少数类的人工兜底通道 + badcase 回流(少数类样本珍贵,每个错样本都要沉淀)。

💻 全栈开发专家 ​

文本分类的类别不平衡,我按「数据、算法、指标、决策」四层处理:

1. 数据层(优先做):

  • 过采样少数类(SMOTE 只适合连续特征,文本用回译/EDA 同义替换做增强);
  • 欠采样多数类(或按难度加权采样——只欠「简单样本」,保留边界样本);
  • 用 LLM 生成少数类合成样本(2026 的高效做法:给 few-shot 让大模型扩写少数类样本,质量远超传统增强)。

2. 算法层:

  • 类别权重:loss 加权(class_weight / focal loss——对难分样本加权,同时压简单样本贡献):
python
loss = FocalLoss(gamma=2, alpha=class_freq_inverse)(logits, y)
  • 阈值移动:不平衡下 0.5 不是最优阈值,验证集上按 F1 最优选决策阈值;
  • 集成:对少数类做多个欠采样子集的 bagging。

3. 指标层(别用 accuracy 自欺):

  • 用 macro-F1、PR-AUC、每类的 precision/recall 看;极不平衡时 accuracy 完全失效(1:99 时全猜多数类=99%);
  • 关注业务代价:误杀 vs 漏杀哪个贵(欺诈检测漏检代价高→调高召回)。

4. 决策层(工程兜底):

  • 少数类样本 <100 条时别硬训——规则/关键词先顶,攒数据;
  • 分层模型:先「多数 vs 其他」二分类,再对「其他」细分;
  • 线上加人工兜底通道:低置信度样本转人工,回流标注——不平衡问题最终靠数据运营解决,不是纯算法。