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

  • 可以看到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

  • 可以看到使用線性層分類的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/TechnologyAnswer:/no_think"""answer = "<think>\n\n</think>\n\n{answer_text}"
  • news_article為新聞文本,answer_text表示標簽。
  • 先測試一下Qwen3-0.6B在測試集上思考和非思考模式下的zero-shot能力(準確率)。為獲得穩定的結果,非思考模式使用手動拼接選項計算ppl,ppl最低的選項為模型答案。思考模式取<think>...</think>后的第一個選項。結果如下:
模型思考非思考
Qwen3-0.6B0.79970.7898
  • 訓練框架使用LLama FactoryPrompt模板與上文一致。
  • 因為Qwen3為混合推理模型,所以對非推理問答對要在模板最后加上/no_think標識符(以避免失去推理能力),并且回答要在前面加上<think>\n\n</think>\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: 512overwrite_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

  • 可以看到Qwen3-0.6B模型Loss在一開始就急速下降,然后開始抖動的緩慢下降,如下圖(縱軸范圍調整0.05~0.015)。在測試集上最好結果是:0.941。

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)的差距并不明顯。如果大家有更好的開源數據集可以用于測試,也歡迎提出。
  • 未測試兩模型在中文文本分類任務中的表現。

來源:https://zhuanlan.zhihu.com/p/1906768058745349565?share_code=KPTadtlbij0m&utm_psn=1907715099319312567

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81588.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML應用指南:利用POST請求獲取全國京東快遞服務網點位置信息

京東快遞作為中國領先的智能供應鏈與綜合物流服務提供商,自2007年成立以來,始終致力于通過技術創新與高效運營,為客戶提供安全、可靠、快速的物流解決方案。京東快遞依托京東集團的強大資源支持,憑借其自營倉儲、干線運輸、末端配送一體化的物流網絡,在激烈的市場競爭中脫…

js中eval的用法風險與替代方案全面解析

1. 前言 在 JavaScript 里&#xff0c;eval是一個既強大又充滿爭議的函數。它為開發者提供了一種動態執行字符串代碼的能力&#xff0c;在某些特定場景下能發揮出獨特的作用。然而&#xff0c;由于其特殊的運行機制&#xff0c;也帶來了諸多潛在的風險和問題。本文將深入探討e…

antd樹結構

一、場景實現 1、左側為查詢條件&#xff0c;查詢條件為樹和多選。點擊查詢條件在右上方顯示搜索條件的內容&#xff0c;右上方查詢條件 tag 刪除后&#xff0c;左側條件也對應刪除。 2、樹結構&#xff1a;默認第一層下所有節點都展開。 1、頁面效果圖 2、查詢效果圖 二、前端…

Jenkins 安裝與配置指南

Jenkins 安裝與配置指南&#xff08;MD 示例&#xff09; markdown Jenkins 安裝與配置指南 ## 一、環境準備 1. **系統要求** - 操作系統&#xff1a;Linux/macOS/Windows - Java 版本&#xff1a;JDK 8 或更高&#xff08;建議 JDK 11&#xff09;2. **安裝方式** - **L…

[Linux性能優化] 線程卡頓優化。Linux加入USB(HID)熱插拔線程占用CPU優化。Linux中CPU使用率過高優化

文章目錄 [Linux性能優化] 線程卡頓優化。0、省流版本一、問題定位&#xff1a;CPU 資源分析二、線程卡頓現場復現線程優化前圖片 三、線程卡頓優化方向1.如果是輪詢方式2.如果是事件驅動方式 四、修改方式線程優化后圖片 [Linux性能優化] 線程卡頓優化。 0、省流版本 如果采…

ip與mac-數據包傳輸過程學習

你管這破玩意叫網絡&#xff1f; 內容來源于飛天閃客&#xff0c;以前沒有學習過網絡的相關基礎知識&#xff0c;只會去瞎設置&#xff0c;現在終于是弄明白了。 多臺電腦之間想要通信&#xff0c;可以直接通過一條網線進行連接。但是隨著網線的增加&#xff0c;這個就會比較…

數值分析知識重構

數值分析知識重構 一 Question 請構造一下數值分析中的誤差概念以及每一個具體數值方法的誤差是如何估計的&#xff1f; 二 Question 已知 n 1 n1 n1個數據點 ( x i , y i ) , i 0 , 1 , ? , n (x_i,y_i),i0,1,\cdots,n (xi?,yi?),i0,1,?,n,請使用多種方法建立數據之間…

使用 Qt QGraphicsView/QGraphicsScene 繪制色輪

使用 Qt QGraphicsView/QGraphicsScene 繪制色輪 本文介紹如何在 Qt 中利用 QGraphicsView 和 QGraphicsScene 實現基礎圓形繪制&#xff0c;以及進階的色輪&#xff08;Color Wheel&#xff09;效果。 色輪是色彩選擇器的常見控件&#xff0c;廣泛應用于圖形設計、繪畫和 UI …

移除鏈表元素數據結構oj題(力扣題206)

目錄 題目描述&#xff1a; 題目解讀&#xff08;分析&#xff09; 解決代碼 題目描述&#xff1a; 給你一個鏈表的頭節點 head 和一個整數 val &#xff0c;請你刪除鏈表中所有滿足 Node.val val 的節點&#xff0c;并返回 新的頭節點 。 題目解讀&#xff08;分析&#…

GLPK(GNU線性規劃工具包)中建模語言MathProg的使用

GNU MathProg是一種用于描述線性數學規劃模型的建模語言。用GNU MathProg語言編寫的模型描述由一組語句和數據塊組成。 在MathProg中&#xff0c;模型以集合、參數、變量、約束和目標(sets, parameters, variables, constraints, objectives稱為模型對象)的形式進行描述。 在Ma…

《Python星球日記》 第77天:模型部署與總結

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、模型部署技術1. 模型文件導出不同模型格式對比2. 使用Flask構建RESTful API3. 使用FastAPI構建高性能API4. 部署優化與最佳實踐二、部署架構…

【JavaWeb】MySQL(準備篇)

1 MySQL安裝 1.1 解壓 下載完成后我們得到的是一個壓縮包&#xff08;所有文件均在文末安裝包中&#xff09;&#xff0c;將其解壓&#xff0c;我們就可以得到MySQL 8.0.34 的軟件本體了(就是一個文件夾)&#xff0c;我們可以把它放在你想安裝的位置 。 1.2 配置 1.2.1 配置…

國產數據庫工具突圍:SQLynx如何解決Navicat的三大痛點?深度體驗報告

引言&#xff1a;Navicat的"中國困境" 當開發者面對達夢數據庫的存儲過程調試&#xff0c;或是在人大金倉中處理復雜查詢時&#xff0c;Navicat突然變得力不從心——這不是個例。 真實痛點&#xff1a;某政務系統遷移至OceanBase后&#xff0c;開發團隊發現Navicat無…

ETL數據集成產品選型需要關注哪些方面?

ETL&#xff08;Extract&#xff0c;Transform&#xff0c;Load&#xff09;工具作為數據倉庫和數據分析流程中的關鍵環節&#xff0c;其選型對于企業的數據戰略實施有著深遠的影響。谷云科技在 ETL 領域耕耘多年&#xff0c;通過自身產品的實踐應用&#xff0c;對 ETL 產品選型…

數據結構實驗10.1:內部排序的基本運算

文章目錄 一&#xff0c;實驗目的二&#xff0c;實驗內容1. 數據生成與初始化2. 排序算法實現&#xff08;1&#xff09;直接插入排序&#xff08;2&#xff09;二分插入排序&#xff08;3&#xff09;希爾排序&#xff08;4&#xff09;冒泡排序&#xff08;5&#xff09;快速…

從秒開到絲滑體驗!WebAssembly助力ZKmall商城重構 B2B2C 商城性能基線

在 B2B2C 電商領域&#xff0c;用戶對頁面加載速度與交互流暢度的要求日益嚴苛。傳統 Web 技術在處理復雜業務邏輯、海量數據渲染時&#xff0c;常出現卡頓、延遲等問題&#xff0c;導致用戶流失。ZKmall 商城創新性地引入 WebAssembly&#xff08;簡稱 Wasm&#xff09;技術&a…

FD+Mysql的Insert時的字段賦值亂碼問題

方法一 FDQuery4.SQL.Text : INSERT INTO 信息表 (中心, 分組) values(:中心,:分組); FDQuery4.Params[0].DataType : ftWideString; //必須加這個數據類型的定義&#xff0c;否則會有亂碼 FDQuery4.Params[1].DataType : ftWideString; //ftstring就不行&#xff0c;必須是…

vue2.0 組件生命周期

個人簡介 &#x1f468;?&#x1f4bb;?個人主頁&#xff1a; 魔術師 &#x1f4d6;學習方向&#xff1a; 主攻前端方向&#xff0c;正逐漸往全棧發展 &#x1f6b4;個人狀態&#xff1a; 研發工程師&#xff0c;現效力于政務服務網事業 &#x1f1e8;&#x1f1f3;人生格言&…

使用GmSSL v3.1.1實現SM2證書認證

1、首先使用gmssl命令生成根證書、客戶端公私鑰&#xff0c;然后使用根證書簽發客戶端證書&#xff1b; 2、然后編寫代碼完成認證功能&#xff0c;使用根證書驗證客戶端證書是否由自己簽發&#xff0c;然后使用客戶端證書驗證客戶端私鑰對隨機數的簽名是否正確。 第一部分生成根…

升級mysql (rpm安裝)

#備份以防萬一 備份配置文件: /etc/my.cnf.d/server.cnf 備份數據: mysqldump -u your_username -p --all-databases > all_databases.sql #停止 systemctl stop mysql #卸載舊版 yum remove mariadb #安裝新版( 通過yum安裝報錯,死活安裝不了,只能rpm安裝) 下載地址…