在文本分类任务上,Qwen3-0.6B真的比Bert效果好么?

Changelog

  • [25/04/28] 新增Qwen3-0.6BAg_news数据集Zero-Shot的效果。新增Qwen3-0.6B线性层分类方法的效果。调整Bert训练参数(epocheval_steps),以实现更细致的观察,避免严重过拟合的情况。

  • TODO:

    • 利用Qwen3-0.6B``pplzero-shot筛选难样本,观察Qwen3-0.6B(SFT分类)在不同数据量级,不同数据难度情况下的性能变化。

    • ppl
      

      筛选出的难样本对Qwen33-0.6B(SFT分类)Qwen3-0.6B(线性层分类)影响是否具有同质性。

    • 不同尺寸模型ThinkNo Think状态下Zero-Shot能力变化。

    • 使用大模型蒸馏Think数据,观察ThinkNo Think模式下对Qwen3-0.6BSFT分类)性能的影响。

    • 测试其他难开源分类数据集(更多分类数、多语言、长样本)。

前言

最近在知乎上刷到一个很有意思的提问Qwen3-0.6B这种小模型有什么实际意义和用途。查看了所有回答,有人提到小尺寸模型在边缘设备场景中的优势(低延迟)、也有人提出小模型只是为了开放给其他研究者验证scaling lawQwen2.5系列丰富的模型尺寸为开源社区验证方法有效性提供了基础)、还有人说4B、7B的Few-Shot效果就已经很好了甚至直接调用更大的LLM也能很好的解决问题。让我比较感兴趣的是有大佬提出小模型在向量搜索、命名实体识别(NER)和文本分类领域中很能打,而另一个被拿来对比的就是Bert模型。在中文文本分类中,若对TextCNNFastText效果不满意,可能会尝试Bert系列及其变种(RoBerta等)。但以中文语料为主的类Encoder-Only架构模型其实并不多(近期发布的ModernBERT,也是以英文和Code语料为主),中文文本分类还是大量使用bert-base-chinese为基础模型进行微调,而距Bert发布已经过去了6年。Decoder-Only架构的LLM能在文本分类中击败参数量更小的Bert吗?所以我准备做一个实验来验证一下。

不想看实验细节的,可以直接看最后的结论实验局限性部分。

实验设置

  • GPU:RTX 3090(24G)
  • 模型配置:
模型参数量训练方式
google-bert/bert-base-cased0.1B添加线性层,输出维度为分类数
Qwen/Qwen3-0.6B0.6B构造Prompt,SFT
  • 数据集配置:fancyzhx/ag_news,分类数为4,分别为World(0)、Sports(1)、Business(2)、Sci/Tech(3)。训练样本数120000,测试样本数7600,样本数量绝对均衡。数据集展示:
{
"text":"New iPad released Just like every other September, this one is no different. Apple is planning to release a bigger, heavier, fatter iPad that..."
"label":3
}
  • 选择该数据集是在Paper with codeText Classification类中看到的榜单,并且该数据集元素基本上不超过510个token(以Bert Tokenizer计算)。因为Bert的最大输入长度是510个token,超过会进行截断,保留前510个token,所以为了进行公平的比较,尽量避免截断。
  • 因为是多分类任务,我们以模型在测试集上的F1指标为标准,F1值越高,模型效果越好。

Bert训练细节

  • Bert 的训练比较简单,将文本使用Tokenizer转换成input_ids后,使用Trainer进行正常训练即可。训练参数(若未单独指出,则代表使用Trainer默认值):
参数名称
lr_scheduler_type(学习率衰减策略)cosine
learning_rate(学习率)1.0e-5
per_device_train_batch_size(训练batch_size)64
gradient_accumulation_steps(梯度累积)1
per_device_eval_batch_size(验证batch_size)256
num_train_epochs(epoch)3
weight_decay1e-6
eval_steps(验证频率)0.05
  • 训练过程中模型对测试集的指标变化:
StepTraining LossValidation LossAccuracyPrecisionRecallF1
2820.2747000.2633940.9097370.9103110.9097370.909676
5640.2078000.2222300.9222370.9227010.9222370.922246
8460.1996000.2042220.9315790.9325520.9315790.931510
11280.2156000.1918240.9346050.9352740.9346050.934737
14100.1905000.1928460.9327630.9344210.9327630.932937
16920.1933000.1806650.9378950.9389410.9378950.937849
19740.1430000.1804970.9405260.9409450.9405260.940636
22560.1415000.1776300.9417110.9419880.9417110.941644
25380.1471000.1736020.9439470.9440220.9439470.943908
28200.1316000.1768950.9406580.9417900.9406580.940683
31020.1528000.1709280.9450000.9451400.9450000.944925
33840.1400000.1692150.9444740.9447660.9444740.944399
36660.1499000.1688650.9444740.9445380.9444740.944483
39480.1120000.1724590.9461840.9461420.9461840.946159
42300.1240000.1728260.9450000.9452540.9450000.944924
45120.1223000.1715830.9447370.9449250.9447370.944708
47940.1044000.1719690.9448680.9450590.9448680.944854
50760.1175000.1715040.9453950.9455020.9453950.945363
53580.0998000.1717610.9452630.9455100.9452630.945232

img

  • 可以看到Bert在测试集上最好结果是:0.945

Qwen3训练细节

  • 使用Qwen3训练文本分类模型有2种方法。第1种是修改模型架构,将模型最后一层替换为输出维度为分类数的线性层。第2种是构造Prompt,以选择题的方式创建问答对,然后进行SFT训练。

线性层分类

  • 与微调Bert类似,将文本使用Tokenizer转换成input_ids后,使用Trainer进行正常训练。训练参数(若未单独指出,则代表使用Trainer默认值):
参数名称
lr_scheduler_type(学习率衰减策略)cosine
learning_rate(学习率)1.0e-5
per_device_train_batch_size(训练batch_size)8
gradient_accumulation_steps(梯度累积)8
per_device_eval_batch_size(验证batch_size)16
num_train_epochs(epoch)1
weight_decay1.0e-6
eval_steps(验证频率)0.05
  • 训练过程中模型对测试集的指标变化:
StepTraining LossValidation LossAccuracyPrecisionRecallF1
940.2818000.2436190.9181580.9181800.9181580.917893
1880.2241000.2200150.9242110.9252160.9242110.924289
2820.1977000.2364050.9192110.9201270.9192110.919257
3760.1828000.2432350.9201320.9253680.9201320.919136
4700.1915000.2078640.9282890.9295630.9282890.928304
5640.2084000.1924140.9356580.9356680.9356580.935647
6580.2019000.1915060.9385530.9386950.9385530.938607
7520.1919000.1798490.9375000.9374170.9375000.937378
8460.1561000.1773190.9386840.9389830.9386840.938653
9400.1599000.1770480.9382890.9394330.9382890.938175
10340.1591000.1722800.9435530.9437250.9435530.943455
11280.1170000.1687420.9430260.9429110.9430260.942949
12220.1515000.1646280.9434210.9443710.9434210.943503
13160.1436000.1586760.9459210.9468560.9459210.945965
14100.1832000.1543560.9461840.9467080.9461840.946221
15040.1594000.1535490.9477630.9478470.9477630.947771
15980.1471000.1525300.9485530.9486090.9485530.948539
16920.1614000.1512990.9490790.9492160.9490790.949029
17860.1505000.1512700.9484210.9485720.9484210.948363

img

  • 可以看到使用线性层分类的Qwen3-0.6B在测试集上最好结果是:0.949

SFT分类

  • 我们先基于数据集写一个选择题形式的Prompt,Prompt模板为:
prompt="""Please read the following news article and determine its category from the options below.

Article:
{news_article}

Question: What is the most appropriate category for this news article?
A. World
B. Sports
C. Business
D. Science/Technology

Answer:/no_think"""

answer="<think>\n\n</think>\n\n{answer_text}"
  • news_article 为新闻文本,answer_text表示标签。
  • 先测试一下Qwen3-0.6B在测试集上思考和非思考模式下的zero-shot能力(准确率)。为获得稳定的结果,非思考模式使用手动拼接选项计算ppl,ppl最低的选项为模型答案。思考模式取...后的第一个选项。结果如下:
模型思考非思考
Qwen3-0.6B0.79970.7898
  • 训练框架使用LLama FactoryPrompt模板与上文一致。
  • 因为Qwen3为混合推理模型,所以对非推理问答对要在模板最后加上/no_think标识符(以避免失去推理能力),并且回答要在前面加上\n\n\n\n
  • 按照LLama Factory SFT训练数据的格式要求组织数据,如:
{
'instruction':"Please read the following news article and determine its category from the options below.\n\nArticle:\nWall St. Bears Claw Back Into the Black (Reuters) Reuters - Short-sellers, Wall Street's dwindling\\band of ultra-cynics, are seeing green again.\n\nQuestion: What is the most appropriate category for this news article?\nA. World\nB. Sports\nC. Business\nD. Science/Technology\n\nAnswer:/no_think",
'output':'<think>\n\n</think>\n\nC'
}
  • 训练参数配置文件:
### model
model_name_or_path:model/Qwen3-0.6B

### method
stage:sft
do_train:true
finetuning_type:full

### dataset
dataset:agnews_train
template:qwen3
cutoff_len:512

overwrite_cache:true
preprocessing_num_workers:8

### output
output_dir:Qwen3-0.6B-Agnews
save_strategy:steps
logging_strategy:steps
logging_steps:0.01
save_steps:0.2
plot_loss:true
report_to:tensorboard
overwrite_output_dir:true

### train
per_device_train_batch_size:12
gradient_accumulation_steps:8
learning_rate:1.2e-5
warmup_ratio:0.01
num_train_epochs:1
lr_scheduler_type:cosine
bf16:true
  • 因为Bert在训练2个epoch后就出现了严重的过拟合,所以对Qwen3模型,只训练1个epoch,每0.2个epoch保存一个检查点。
  • 训练过程中模型对测试集的指标变化(训练结束后加载检查点对测试集进行推理,注意!为保证推理结果稳定,我们选择选项ppl低的作为预测结果):
StepTraining LossAccuracyPrecisionRecallF1
2500.0260.9120.9170.9120.912
5000.0270.9240.9240.9240.924
7500.0220.9370.9370.9370.937
10000.0220.9410.9410.9410.941
12500.0230.9400.9400.9400.940

img

  • 可以看到Qwen3-0.6B模型Loss在一开始就急速下降,然后开始抖动的缓慢下降,如下图(纵轴范围调整0.05~0.015)。在测试集上最好结果是:0.941。

img

Bert和Qwen3-0.6B训练耗时

模型Epoch训练耗时推理耗时总耗时
Bert335 min-0.58 h
Qwen3-0.6B(线性层分类)152 min-0.86 h
Qwen3-0.6B(SFT分类)162 min30 min1.5 h

Bert和Qwen3-0.6B RPS测试

  • 为测试BertQwen3-0.6B是否满足实时业务场景,对微调后的BertQwen3-0.6B进行RPS测试,GPURTX 3090(24G):
模型推理引擎最大输出Token数RPS
BertHF-60.3
Qwen3-0.6B(SFT分类)HF813.2
Qwen3-0.6B(SFT分类)VLLM827.1
Qwen3-0.6B(线性层分类)HF-38.1

结论

  • Ag_new数据集上,各模型效果:Qwen3-0.6B(线性层分类)> Bert > Qwen3-0.6B(SFT分类)> Qwen3-0.6B(Think Zero-Shot)> Qwen3-0.6B(No Think Zero-Shot)。

  • 各模型训练推理耗时: Qwen3-0.6B(SFT分类)> Bert > Qwen3-0.6B(线性层分类)。

  • 各模型RPSBert > Qwen3-0.6B(线性层分类) > Qwen3-0.6B(SFT分类)。

  • Think
    

    模式下的Qwen3-0.6BNo Think模式下的Qwen3-0.6B准确率仅高出1%,推理时间比No Think慢20倍(HF推理引擎,Batch推理)。

  • 在训练Qwen3-0.6B(线性层分类)时,Loss在前期有点抖动,或许微调一下学习率预热比率会对最终结果有微弱正向效果。

实验局限性

  • 未实验在Think模式下Qwen3-0.6B的效果(使用GRPO直接训练0.6B的模型估计是不太行的,可能还是先使用较大的模型蒸馏出Think数据,然后再进行SFT。或者先拿出一部分数据做SFT,然后再进行GRPO训练(冷启动))。
  • 未考虑到长序列文本如token数(以Bert Tokenizer为标准)超过1024的文本。
  • 也许因为AgNews分类任务比较简单,其实不管是Bert还是Qwen3-0.6BF1超过0.94的情况下,都是可用的状态。Bert(F1:0.945)和Qwen3-0.6B线性层分类(F1:0.949)的差距并不明显。如果大家有更好的开源数据集可以用于测试,也欢迎提出。
  • 未测试两模型在中文文本分类任务中的表现。

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

👉 福利来袭CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值