You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据集平衡后F1分数偏低问题咨询

推特文本二分类F1分数偏低的问题分析与解决

可能存在的操作问题

  • 数据集平衡方式不合理:直接截断负样本到17000条容易丢失负样本的多样性特征。原负样本量是正样本的7倍,说明负样本可能涵盖多种场景,硬截断会让模型错过关键的区分信息。建议换成:
    • 分层欠采样:从负样本中分层抽取17000条,保证负样本的分布和原数据集一致
    • 加权损失训练:不改变数据集规模,给正样本设置更高的损失权重(比如权重=122000/17000≈7),让模型更关注少数类
  • 文本预处理缺失针对性:推特文本自带大量噪音,不清洗会严重干扰模型学习:
    • 未处理@提及、#话题、URL、特殊符号这类无意义内容
    • 未标准化表情、缩写(比如把"lol"转成"laugh out loud",把😠转成"angry")
    • 未修正拼写错误、过滤重复字符(比如"sooooo"改成"so")
  • 模型训练参数设置不当:你提供的Trainer代码没有给出training_args细节,大概率存在这些问题:
    • 训练轮数不足:DistilBERT通常需要3-10轮训练才能收敛,默认轮数可能不够
    • 学习率不合适:预训练模型微调的常用学习率是2e-5到5e-5,过大或过小都会影响收敛
    • batch size太小:小batch会导致梯度波动,建议根据显存调整到16或32
    • 缺少正则化:比如未设置权重衰减、dropout参数,容易导致过拟合或欠拟合
  • 评估指标计算错误:确认compute_metrics函数是否正确计算了正样本的F1分数,二分类任务中如果混淆了正负类别,会导致指标虚低或虚高

分数是否正常?

这个分数明显不正常。不管是传统的LR、SVM,还是深度学习的BERT、LSTM,在常规文本二分类任务中都应该达到0.7以上的F1分数,BERT这类预训练模型甚至能到0.8+。多个模型表现一致拉胯,说明问题出在数据层面,而非模型选择。

改进建议

  • 先做数据探索:统计正负样本的文本长度、高频词汇、话题分布,看看两类样本是否有明确的特征差异。如果正负样本语言特征高度重叠,可能需要重新明确分类标准,或者补充更多标注数据。
  • 优化传统模型的特征工程:给LR、SVM使用TF-IDF结合1-3gram的特征,再加入推特特有特征(比如是否带表情、是否是转发、文本情绪值)。
  • 调整BERT训练策略:
    • 先冻结预训练层,只训练分类头,再解冻部分层进行微调
    • 换用针对推特预训练的模型(如Twitter-BERT),这类模型已经适配了推特文本的特征
  • 修正代码细节:你提供的Trainer代码缺少闭合括号,正确写法如下:
trainer = Trainer(
    model=model,                      # 加载的预训练模型DistilBERT
    args=training_args,               # 自定义训练参数
    train_dataset=train_dataset,      # 训练数据集
    eval_dataset=eval_dataset,        # 评估数据集
    compute_metrics=compute_metrics   # 自定义评估函数
)

内容的提问来源于stack exchange,提问作者Gautam Shahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:48:14