多标签有毒评论分类模型:低F1分数与低Loss问题排查求助
低Loss但F1分数极低的问题原因及排查方向
数据集类别不平衡是核心问题
Jigsaw有毒评论数据集的标签分布极度倾斜:绝大多数评论是无毒的,有毒类别的样本占比极低。训练时模型会优先拟合数量占优的负类样本,因为它们对Loss的贡献更大,最终Loss会被负类的预测精度拉到很低,但正类的召回率几乎为0,直接导致F1分数暴跌——毕竟F1高度依赖正类的预测表现。分类阈值设置不符合数据集特性
多标签分类默认用0.5作为概率阈值,但在不平衡数据集下,模型输出的正类概率普遍低于这个阈值,导致几乎没有正类预测结果。这种情况下,哪怕Loss再低,F1也会因为正类样本的预测数量极少而变得极低。建议基于验证集调整阈值,比如找到能让F1达到最高的阈值作为最终分类标准。Loss函数未引入样本权重平衡
如果使用BCEWithLogitsLoss这类默认平等对待所有样本的Loss函数,负类样本的数量优势会稀释正类的学习信号,模型自然不会重视正类特征。可以给每个标签设置权重(比如基于标签的逆频率),让正类样本对Loss的贡献更高,强迫模型去学习正类的特征模式。F1指标计算方式可能有误
要确认F1的计算逻辑是否适配多标签场景:- 若用宏F1,它会平等对待每个标签,小样本标签的低召回/精确率会严重拉低整体分数;
- 若用微F1,它会统计所有样本的总TP/FP/FN,但如果模型完全不预测正类,微F1也会极低。
另外,使用sklearn.metrics.f1_score时要确保设置了正确的参数,比如average='micro'或average='macro',同时适配多标签的计算逻辑。
内容的提问来源于stack exchange,提问作者ilay Tertman
相关产品推荐
相关产品推荐

