Cantonese QA — 粵語問答模型
⚠️ 2026-09-21:本卡多處評測數字已更正——本模型嘅分數係被我哋自己測低咗,而翻譯一項嘅領先幅度唔成立。見下方「更正」一節。
粵語(yue)問答模型。本倉庫收錄以下權重:
| 位置 | 大細 | 說明 | |
|---|---|---|---|
| v2 完整權重 | v2-qwen3-8b/ | 15.3 GiB | ✅ 建議優先採用,bf16,已合併,可直接載入 |
| v2 昇騰 W8A8 | v2-ascend-w8a8-dynamic/ | 11.1 GiB | 昇騰 910C 原生格式,由 msmodelslim 產出嘅動態 W8A8,可由 vllm-ascend 直接載入;已通過非劣效檢驗(詳見下文) |
| v2 int4 | v2-qwen3-8b-int4/ | 5.7 GiB | NF4 + double quant,可於單張 8 GB 顯卡運行;僅支援 CUDA(詳見下文) |
| v2 消融版(僅公開數據) | v2-clean-data/ | 15.3 GiB | 同配方、同 seed,僅以本倉庫公開發佈嘅 27,207 條數據訓練,可完整複現;官方口徑下高於完整數據版本(詳見下文) |
| v2 LoRA adapter | v2-qwen3-8b-lora/ | 349 MB | 供自行掛載至 Qwen/Qwen3-8B,或配合 vLLM --enable-lora 使用 |
| v1 | 倉庫根目錄 | 2.2 GiB | ⛔ 請勿使用。 生成退化率 93.3%,僅作為已記錄嘅失敗案例保留 |
v2 基座為 Qwen/Qwen3-8B,bf16,訓練全程未經量化,已於 CUDA 及昇騰 910C 兩個平台驗收。
倉庫名稱中嘅 int4 屬 v1 遺留命名,說明見文末。
另有一條 30B 嘅線:
Zeteng/yue-qa-qwen3-30b-a3b——同一套訓練數據與配方,基座換成Qwen/Qwen3-30B-A3B(MoE,只有注意力 LoRA)。 兩條線並列,不設旗艦,強項唔同:
HKMMLU(知識) 普→粵(產出粵語) 粵→普(理解粵語) 解析失敗 30B-A3B 0.6467 44.51 57.30 0.0003 本倉庫 8B 0.5394 52.36 52.81 0.0442 翻譯兩欄為 chrF_t2s(繁簡歸一後),與本卡〈官方翻譯任務〉一節括號裡嗰個數同口徑; 該節表格外面嗰兩個數(23.95/51.57)係未歸一嘅原始 chrF,唔好混用。
知識問答同格式遵從用 30B;生成地道書面粵語仍以本倉庫為首選。
⚠️ 2026-09-21 更正:本卡多處數字作廢,本模型嘅分數係被我哋自己測低咗
原因:一次 serialization–runtime compatibility mismatch。transformers 5.x 將
rope_theta 由 config 頂層遷入 rope_parameters(對 transformers 5.x 完全合法),
而我哋評測時用嘅 vLLM 只讀頂層欄位,讀唔到就回落到 θ=10000(模型真實值 1000000)。
我哋評測用嘅合併權重帶咗新 schema,於是 RoPE 頻率整個錯晒。
因果已確認(每一步只改一個變數,權重用軟連結、一個 byte 都冇動):
只改 config.json 就令分數相差 5–6 分,兩個方向都成立;
只改 dtype/torch_dtype 欄位名係精確 +0.00(陰性對照);
顯式設 rope_theta=10000 同「頂層欄位缺失」逐位相同,設 100000 則唔同。
規範化 config 之後,昇騰/vLLM 同 H100/transformers 兩套棧喺選擇題上一致到 ≤0.17pp。
✅ 本倉庫頂層發佈嘅
config.json係正常嘅(transformers_version4.52.4, 頂層有rope_theta),所以直接用本倉庫頂層權重嘅使用者唔受影響。 出問題嘅係我哋自己評測時喺叢集上合併嘅副本。 ⚠️ 但本倉庫嘅四個子目錄v2-qwen3-8b/、v2-clean-data/、v2-qwen3-8b-int4/、v2-ascend-w8a8-dynamic/嘅 config 帶 5.6.2 schema, 用舊版 vLLM 載入呢啲子目錄會踩同一個坑,建議自行將rope_parameters.rope_theta補寫成頂層rope_theta。
更正後 HKMMLU(全量 26,368 題,官方口徑)
| 排名 | 模型 | 準確率 | 解析失敗 | 平均輸出tok | |
|---|---|---|---|---|---|
| 1 | 本模型(完整語料) | 0.6030 | 0.0141 | 13.7 | |
| 2 | 本模型 消融版(只用公開數據) | 0.5996 | 0.0000 | 10.2 | |
| 3 | hon9kon9ize/CantoneseLLMChat-v1.0-7B | 0.5897 | 0.0000 | 11.7 | 不受影響 |
| 4 | lordjia/Qwen2-Cantonese-7B-Instruct | 0.5883 | 0.0000 | 8.8 | 不受影響 |
| 5 | hon9kon9ize/CantoneseLLM-v2.0-8B-Thinking | 0.5566 | 0.0327 | 341.0 | |
| 6 | lordjia/Llama-3-Cantonese-8B-Instruct | 0.5240 | 0.0005 | 4.4 | 不受影響 |
| 7 | Qwen/Qwen3-8B(基座) | 0.4697 | 0.0281 | 471.0 | 不受影響 |
本模型由第 4 升到第 1。 但所有 95%CI 同 p 值一律作廢——配對檢驗未重算。
更正後 純度同翻譯
| 書面粵語純度 | 粵→普 chrF_t2s | 普→粵 chrF_t2s | ||
|---|---|---|---|---|
| 本模型 | 0.9272 | 54.48 | 45.66 | |
| 本模型 消融版 | 0.9230 | 54.42 | 44.72 | 已更正 |
CantoneseLLM-v2.0-8B-Thinking | 0.9710 | — | 45.65 | |
lordjia/Llama-3-Cantonese-8B-Instruct | — | — | 49.61 | 不受影響 |
CantoneseLLMChat-v1.0-7B | 0.5376 | 60.09 | 46.71 | 不受影響 |
🔴 最重要嘅一條:翻譯呢一項,我哋原先報嘅領先幅度唔成立
原卡報嘅係「本模型 普→粵 52.36」。更正後係 45.66。
同一時間,對照模型 CantoneseLLM-v2.0-8B-Thinking 由 18.04 更正到 45.65(+27.61)。
原先係「52.36 對 18.04」,34 分領先。真實係「45.66 對 45.65」——打成平手。
而且對方嗰一側仲係下界:佢平均輸出 341 個 token,頂住 max_tokens 上限被截斷,
畀夠 token 預算只會更高。
更正後本模型喺「普→粵」呢一項唔再係第一,落後
Llama-3-Cantonese-8B-Instruct(49.61)同 CantoneseLLMChat-v1.0-7B(46.71)。
更正係兩個方向嘅:選擇題上我哋被自己測低咗,翻譯上我哋將對手測低咗。 兩邊都要講,只報前者係唔誠實嘅。
以下幾節嘅結論需要重做,唔係改個數就算
- 「解析失敗率 4.42%,係能正常工作嘅模型入面最高」 —— 真實值係 1.41%, 只得原先嘅三分之一。佢仍然高過兩個強對手嘅 0.0000,所以定性講法仲喺度, 但量級同由此推出嘅「格式遵從係本模型主要短板」呢個判斷要重新表述。
- 提示詞脚手架嗰一整節作廢(「+3.00pp、三分之一增益只係終於畀解析出嚟、 未解析率由 4.42% 降到 0.62%」)。呢節嘅主角就係嗰 8.33pp 嘅拆解, 而佢嘅起點 0.5394 本身係錯嘅,分母整個變咗。未重跑。
- 量化嗰一節嘅絕對數字作廢(「bf16 0.5394 / W8A8_DYNAMIC 0.5348 / Δ −0.46pp」)—— bf16 對照同 W8A8 兩側都受影響。bf16 真實值係 0.6030、解析失敗 1.41%。 因為兩側受同一影響,非劣效嗰個結論有可能仍然成立,但需要重跑驗證,唔可以想當然。 W8A8 嗰一側尚未重算。
- 方向唔係一律嘅。 六個受影響模型入面五個更正後選擇題分數上升,
但
v2.0-30B-A3B-Thinking反而跌 2.02pp。唔可以由「方向一致」去推斷任何未重測嘅模型。
完整因果證據、逐項更正清單同復現方法見倉庫 results/moe_30b.md 第五節
同 results/standard_eval.md 頂部。
v2 評測
對照組為其基座 Qwen3-8B,基座為唯一變量。
HKMMLU 揀 66 個 config 各 50 題(n=3300,標準誤大約 0.85pp);生成類用 30 條日常粵語提問,
貪心解碼,兩邊都熄咗思維鏈。
| HKMMLU | HKDSE | 書面粵語純度 | 退化率 | 中位長度 | PPL 留出集 | PPL 粵語維基 | bits/char | |
|---|---|---|---|---|---|---|---|---|
| v2 (bf16) | 0.6094 | 0.6000 | 0.9591 | 0.000 | 109 | 9.97 | 13.57 | 2.93 |
| v2 int4 | 0.5909 | 0.5867 | 0.9473 | 0.000 | 87 | 10.50 | 14.49 | — |
Qwen3-8B | 0.5700 | 0.5400 | 0.0924 | 0.000 | 194 | 26.72 | 21.69 | 3.45 |
上表為均衡抽樣口徑(每個 config 抽 50 題,n=3,300),各變體之間互相可比。 全量 26,368 題下:v2 0.6019、基座 0.5789。
- 粵語語域屬質變:書面粵語純度 0.0739 → 0.8975(117 條提問)。 原基座基本不具備書面粵語生成能力,以粵語提問時多以普通話作答。
- 分佈外泛化成立:粵語維基(訓練完全未使用)困惑度 21.69 → 13.57,非記憶訓練集所致。
- 知識增益溫和:HKMMLU +2.29pp(全量 26,368 題,macro +2.76pp, McNemar 配對檢驗 p=1.3e-14)。僅以問答數據訓練嘅 LoRA 本不預期帶來顯著知識增益。
- int4 嘅代價集中喺困惑度:留出集 +0.53、粵語維基 +0.93,換到體積細到 1/2.7。
HKMMLU 嗰 −1.85pp 係 n=3,300 下嘅點估計;int4 係 bitsandbytes 格式、
vllm-ascend載唔到,無法在同一套官方口徑下重測,故未提供配對置信區間。 退化率一欄僅 30 條提問,一至兩條之差即為 ±0.03,不宜以此欄比較各變體優劣。
Q: 點樣由旺角去中環最快?
A: 由旺角去中環最快嘅方法係搭地鐵。你可以喺旺角站搭地鐵荃灣線,喺中環站落車。
Q: 你可唔可以解釋下咩係強積金?
A: 強積金係強制性嘅退休保障制度,所有僱員同僱主都必須參加。強積金嘅資金會被投資喺唔同嘅
資產上,包括股票、債券、房地產等。
同其他粵語模型比
評測設置:8 個模型、同一套腳本、同一批硬件(昇騰 910C)、貪心解碼、逐題配對檢驗。
HKMMLU 選擇題(官方口徑,全量 26,368 題)
| 排名 | 模型 | 準確率 | 95%CI | 解析失敗 | 平均輸出tok |
|---|---|---|---|---|---|
| 1 | hon9kon9ize/CantoneseLLMChat-v1.0-7B | 0.5897 | ±0.59pp | 0.0000 | 11.7 |
| 2 | lordjia/Qwen2-Cantonese-7B-Instruct | 0.5883 | ±0.59pp | 0.0000 | 8.8 |
| 3 | 本模型 消融版(只用公開數據) | 0.5560 | ±0.60pp | 0.0000 | 9.1 |
| 4 | 本模型(完整語料) | 0.5394 | ±0.60pp | 0.0442 | 13.0 |
| 5 | lordjia/Llama-3-Cantonese-8B-Instruct | 0.5240 | ±0.60pp | 0.0005 | 4.4 |
| 6 | Qwen/Qwen3-8B(基座) | 0.4697 | ±0.60pp | 0.0281 | 471 |
| 7 | hon9kon9ize/CantoneseLLM-v2.0-8B-Thinking | 0.3993 | ±0.59pp | 0.0825 | 451 |
| 8 | …-Thinking-Chat-Vector-Merged | 0.3968 | ±0.59pp | 0.0736 | 493 |
配對 McNemar 檢驗:本模型落後首位 −5.03pp(95% CI [−5.68, −4.37],p = 1.6e-51)。 差距具統計顯著性,非抽樣噪聲。
官方翻譯任務(各 2,000 條)——呢個先係最有信息量嘅
| 粵→普 chrF | 普→粵 chrF | |
|---|---|---|
| 本模型 | 23.95(剝走繁簡後 52.81) | 51.57(第一) |
CantoneseLLMChat-v1.0-7B | 59.51(60.09) | 46.06 |
Llama-3-Cantonese-8B-Instruct | 16.74(31.94) | 48.18 |
Qwen2-Cantonese-7B-Instruct | 13.94(26.27) | 37.94 |
普→粵方向(產出粵語)本模型位列第一,chrF 51.57,高於次位 46.06。 此項為本項目「口語化粵語表達」貢獻之直接量化證據。
粵→普方向(理解粵語)原始分數位列第 4。惟官方參考譯文採簡體字形, 本模型輸出為繁體,而 chrF 係字符級指標,字形差異會令語域已正確轉換嘅句子失分。 經字形歸一後本模型位列第 3,與首位差距為 7.28 點(並非原始分數所示嘅 35.6 點)。
書面粵語純度(117 條提問):位列第 2
| 排名 | 模型 | 純度 | 退化率 | 中位輸出tok |
|---|---|---|---|---|
| 1 | CantoneseLLM-v2.0-8B-Thinking | 0.9655 | 0.0000 | 128(撞上限) |
| 2 | 本模型 | 0.8791 | 0.0256 | 49 |
| 3 | 本模型 消融版 | 0.8706 | 0.0085 | 61 |
| 4 | Qwen2-Cantonese-7B-Instruct | 0.8225 | 0.0940 | 128 |
| 5 | CantoneseLLMChat-v1.0-7B | 0.5376 | 0.0085 | 128 |
同基座嘅 Thinking 版本在純度一項確實高於本模型。惟該模型 HKMMLU 僅 0.3993、 答案解析失敗率 8.25%、平均輸出 451 token、普→粵 chrF 僅 17.91。 純度高而可控性缺失,三項指標須合併判讀。
主要短板:指令服從與格式合規
| 證據 | 數字 |
|---|---|
| HKMMLU 解析失敗率 | 4.42%(兩個強對手都係 0.0000) |
| 加「請喺最後一行寫答案:X」之後,漲嘅分裡有幾多只係「終於解析得出嚟」 | 32%,8 個模型裡面佔比最高(基座 4%、Thinking 12%) |
| 粵→普 任務嘅繁體輸出率 | 99.7%(提示詞明寫「簡體中文」;對手 5.0%) |
三項證據來源互相獨立而方向一致:本模型嘅主要限制在於指令服從與格式合規, 而非知識儲備或粵語理解能力。後續配方應補充格式服從類訓練數據。
排名對提示詞選擇嘅穩健性
為檢驗排名是否受提示詞選擇影響,設計 2×2 因子實驗: 提示詞語言(標準書面中文/書面粵語)× 格式腳手架(無/有), 8 個模型 × 全量 26,368 題 × 四臂,逐題配對。
| 模型 | 嚴格(主表) | +腳手架 | 粵語提示詞 | 舊表用嗰個 |
|---|---|---|---|---|
CantoneseLLMChat-v1.0-7B | 0.5897 | 0.5883 | 0.5892 | 0.6018 |
Qwen2-Cantonese-7B-Instruct | 0.5883 | 0.5791 | 0.5889 | 0.5867 |
| 本模型 消融版 | 0.5560 | 0.5747 | 0.5682 | 0.5756 |
| 本模型 | 0.5394 | 0.5695 | 0.5521 | 0.5767 |
四個臂之中,CantoneseLLMChat-v1.0-7B 均列第 1、Qwen2-Cantonese-7B 均列第 2,
本模型均列第 3 或第 4,未曾進入前兩位。即使採用對本模型最寬鬆嘅讀法
(容許各模型各取其最優臂),排序仍為 chat_7b 0.6018 > qwen2 0.5889 >
本模型 0.5767。本模型之名次不因提示詞選擇而改變。
三項附帶結論:
- 粵語提示詞並非自利選擇。 語言主效應對 5 個粵語專化模型均為正
(+0.41 ~ +0.99pp),對 3 個非粵語原生模型均為負(−0.86 ~ −3.46pp),屬類別效應。
本模型受益幅度最大(+0.99pp),惟僅較
Llama-3-Cantonese(+0.97pp)高 0.02pp。 - 格式腳手架嘅受益者係所有不會自然輸出單一字母嘅模型:基座 +5.51pp、 Thinking 版 +3.98pp,均高於本模型嘅 +3.00pp;三個原本解析失敗率為零嘅對照模型則受其拖低。 惟本模型增益之中有 32% 來自原本無法解析嘅題目,該比例為 8 個模型中最高。
- 修正格式問題嘅因素係腳手架而非語言:本模型解析失敗率在加入腳手架後 由 4.42% 降至 0.62%,改用粵語提示詞則僅降至 4.01%。 能修正該問題嘅干預,同時指明咗短板嘅位置。
詳見 results/prompt_ablation.md。
另一項落後指標:粵語語言建模
本模型粵語維基困惑度為 13.45,CantoneseLLMChat-v1.0-7B 為 7.77。
該模型採用繼續預訓練(CPT),本模型僅採用 LoRA SFT。
準確嘅表述係:該模型屬粵語語言模型,本模型屬具備粵語表達能力嘅問答模型。
官方翻譯任務嘅兩個方向為此判斷提供咗量化依據:產出粵語第一,理解粵語第三。
完整對照表、所有口徑嘅全部數字、提示詞消融、以及每一條撤回同更正:
https://github.com/Lam810/cantonese-llm-lab → results/standard_eval.md
一個關於訓練數據嘅消融
僅以公開發佈嘅 27,207 條數據(v2-clean)訓練,同配方、同 seed,數據為唯一變量。
該版本權重已發佈於 v2-clean-data/,本項消融結果可完整複現。
| 訓練數據 | HKMMLU logprob 口徑 | HKMMLU 官方口徑 | 純度(117 條) | |
|---|---|---|---|---|
| 只用公開子集 | 26,007 | 0.6138 | 0.5560 | 0.8706 |
| 本模型(完整語料) | 68,202 | 0.6019 | 0.5394 | 0.8791 |
兩個口徑均為公開子集勝出:logprob 口徑 +1.19pp(p = 6.0e-7), 官方口徑 +1.65pp(配對 McNemar,p = 5.8e-10)。 即因授權原因無法再分發嘅該 62% 數據,不僅未帶來增益,且對結果構成負面影響。 公開發佈嘅數據集並非削減版本。
(純度一欄完整數據版本高 0.85pp,惟 117 條提問嘅分辨率為 1/117 = 0.0085,
一條之差即為一格,不宜以此欄比較優劣。)詳見 results/ablation_clean_data.md。
點用
完整權重(首選)
from transformers import AutoModelForCausalLM, AutoTokenizer
mid, sub = "Zeteng/qwen_yue_qa_finetuned_int4", "v2-qwen3-8b"
tok = AutoTokenizer.from_pretrained(mid, subfolder=sub)
model = AutoModelForCausalLM.from_pretrained(mid, subfolder=sub,
dtype="bfloat16", device_map="auto")
msgs = [{"role": "user", "content": "請解釋強積金嘅運作方式。"}]
text = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True,
enable_thinking=False) # 問答場景建議熄咗思維鏈
ids = tok(text, return_tensors="pt").to(model.device)
out = model.generate(**ids, max_new_tokens=256, temperature=0.7, top_p=0.9)
print(tok.decode(out[0][ids.input_ids.shape[-1]:], skip_special_tokens=True))
int4(NF4,5.7 GiB,一張 8 GB 卡跑得)
from transformers import AutoModelForCausalLM, AutoTokenizer
mid, sub = "Zeteng/qwen_yue_qa_finetuned_int4", "v2-qwen3-8b-int4"
tok = AutoTokenizer.from_pretrained(mid, subfolder=sub)
model = AutoModelForCausalLM.from_pretrained(mid, subfolder=sub, device_map="auto")
需安裝 bitsandbytes(pip install bitsandbytes)。量化配置已寫入 config.json,
無須自行傳入 BitsAndBytesConfig。
⚠️ int4 僅支援 CUDA。 該變體為 bitsandbytes 格式,
vllm-ascend不支援。 昇騰平台請採用v2-ascend-w8a8-dynamic/(原生 W8A8) 或v2-qwen3-8b/(bf16),兩者均已於 910C 驗收, 詳見deploy/ascend.md。
昇騰 910C 原生 W8A8_DYNAMIC(11.1 GiB,vllm-ascend 直接載)
# 三個分片 + index,vllm-ascend 會自己讀 quant_model_description.json
python -m vllm.entrypoints.openai.api_server \
--model <本地路徑>/v2-ascend-w8a8-dynamic \
--quantization ascend --max-model-len 4096 --gpu-memory-utilization 0.85
採用昇騰官方工具 msmodelslim 產出嘅動態 W8A8,按 token 動態定標。
靜態 W8A8 變體亦已產出,但決定不予發佈:該變體服務可正常啟動、 吞吐量高出 64%(511 對 312 tok/s),惟輸出不可用——其從不輸出 EOS, 持續生成至 token 上限,吞吐量偏高正由此而來。 僅憑返回碼與吞吐量判斷,會將已損壞嘅變體判為更優。
發佈閘門(全量 26,368 題,同口徑 bf16 對照,逐題配對):
對照 bf16 0.5394 W8A8_DYNAMIC 0.5348 Δ −0.46pp
McNemar 精確 p=0.0524 95%CI [−0.93, +0.00]pp
損失置信上界 0.93pp ≤ 容差 δ=2.00pp ✅ 過閘門
書面粵語純度 0.9102(bf16 0.8791) 退化率 0.0427
解析失敗率 2.72%(bf16 4.42%) 平均輸出 11.3 tok(bf16 13.0)
此處採用非劣效檢驗而非顯著性檢驗:樣本量越大越容易達到顯著, 以顯著性作為容差門檻並不成立。容差 δ = 2.0pp 取自已發佈 int4 變體嘅 1.85pp, 為既有先例而非依本次結果選定。損失置信上界 0.93pp 低於 1~3pp 這一通行容差區間嘅下沿, 故 δ 取區間內任何值,判定結果一致。
單一權重文件為 11,936,951,344 字節,超出 HF 嘅 5 GB 單文件上限,故切分為 3 片。 分片已逐張量核對:張量集合 903/903 一致,抽檢 7/7 逐字節相同; 並於昇騰平台重新啟動服務複測,四項指標與未分片版本至小數第 16 位一致。
關於校準集:量化工具默認採用英文語料校準,而本模型嘅核心能力為粵語語域, 校準集選擇不當會令該能力在量化過程中流失。msmodelslim 版本採用
v2-clean嘅 test split(粵語,訓練未使用)作校準。 免校準亦係 bitsandbytes 方案嘅一項固有優勢。
用 LoRA adapter(自己合併)
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base = "Qwen/Qwen3-8B"
tok = AutoTokenizer.from_pretrained(base)
model = AutoModelForCausalLM.from_pretrained(base, dtype="bfloat16", device_map="auto")
model = PeftModel.from_pretrained(model, "Zeteng/qwen_yue_qa_finetuned_int4",
subfolder="v2-qwen3-8b-lora")
v2-qwen3-8b-lora/ 裡面另外附咗 merge_lora_stream.py,逐個分片流式合併、峰值內存大約 5 GB
(唔需要 32 GB 將 base 同 merged 一齊擺入內存)。
佢出嘅權重同 v2-qwen3-8b/ 逐個字節一樣。 呢個唔係估出嚟嘅:評測用嘅合併產物係喺訓練
集群上面生成,本地用呢個腳本重新合併之後,用帶鑑權嘅 HTTP range 請求抽查咗 3 個張量
(相對差最大嘅 layers.1.mlp.gate_proj、layers.35.mlp.down_proj,加上冇被 LoRA 改動過嘅
embed_tokens 做對照)各 32,768 個 bf16 元素,逐個字節 100% 相同。
合併完會寫出 merge_check.json,基準值係 252 個張量有改動、最大 ‖ΔW‖/‖W‖ ≈ 0.078,
可以用嚟自己核對。
建議 temperature>0。 貪心解碼(temperature=0)遇到列舉類問題會重複同一句。
部署配置同實測數字:deploy/cuda.md、deploy/ascend.md。
v2 點樣訓練
| 方法 | LoRA(PEFT)合併;r=32 / alpha=64 / dropout 0.05 |
| 掛喺邊 | q,k,v,o,gate,up,down(七個線性投影全部掛),可訓練 87.3M / 8.28B = 1.055% |
| 精度 | 基座 bf16,LoRA 參數 fp32;全程冇量化 |
| 數據 | train 68,202 / dev 1,000,max_len 1024 |
| 優化 | lr 1e-4 cosine,warmup 3%,wd 0.01,有效批 16 |
| 把關 | eval_strategy=steps(每 400 步)+ 早停 patience=3 + load_best_model_at_end |
| 結果 | 4×H100 跑咗 1 小時 1 分,2 epoch 跑滿都冇觸發早停,best eval_loss 1.2059 |
| 合併體檢 | 252/399 張量有改動(正好 36 層 × 7 投影),最大 ‖ΔW‖/‖W‖ = 0.0782 |
局限
- 知識增益有限(HKMMLU +2.29pp,全量口徑;上面 +3.94pp 嗰個係均衡抽樣高估咗)。
涉及香港本地事實時請自行核實:
hk_*子集(香港本地知識)本模型為 0.5334, 在 8 個模型中位列倒數第二,首位為 0.6243。此項為本模型弱項。 - 貪心解碼會重複,上面講過。
- 訓練數據以問答/指令為主,冇針對長文生成、代碼、數學做過優化。
- 未進行安全對齊評測。不應用於醫療、法律、金融等高風險場景。
數據同授權
訓練集 71,202 條(train 68,202 / dev 1,000 / test 2,000,seed=42,先切分後訓練),
係合併四個公開粵語來源嚟嘅。其中授權容許再分發嘅 27,207 條,已經發咗喺
Zeteng/cantonese-llm-data
嘅 v2-clean/;另外兩個來源,一個冇任何授權聲明、一個係 AGPL-3.0,所以唔再分發,
但構建腳本公開,任何人都復現得。
授權 cc-by-nc-nd-4.0:基座 Qwen3-8B 雖然係 Apache-2.0,但訓練數據含 CC-BY-NC 成分,
揀嘅係所有輸入裡面最嚴格嗰項,再加上 ND。本模型限非商業用途,而且唔可以公開發佈修改版
——自己 fine-tune 嚟用冇問題,想公開衍生版本請先聯絡我們。
取用方式:要申請
本倉庫已經開咗門禁(gated),逐個人工審批。喺 HF 頁面上點「申請取用」填表, 審核通過之後就下載得。之後所有調用都要帶 token:
from huggingface_hub import login
login() # 或者設 HF_TOKEN 環境變量
model = AutoModelForCausalLM.from_pretrained(mid, subfolder=sub, token=True)
取用後請標註第一署名單位「粵語語料庫建設與大模型評測重點實驗室」同資助編號 25ZD03。
關於倉庫名入面嗰個 int4
倉庫名稱屬 v1 遺留,易生誤解,說明如下:
- v1(倉庫根目錄)訓練時以 4-bit 載入基座(QLoRA),但發佈嘅權重未經量化,為 fp32。
- v2 主權重(
v2-qwen3-8b/)全程 bf16、冇量化。 - v2 真正嘅 int4 喺
v2-qwen3-8b-int4/,係訓練完之後才做嘅後量化(NF4)。
倉庫名照舊唔改,係為咗唔搞爛舊有嘅連結。
署名同資助
第一署名單位:粵語語料庫建設與大模型評測重點實驗室 (Key Laboratory for Cantonese Corpus Construction and Large Language Model Evaluation)
資助: 該實驗室 2025 年度研究課題,課題編號 25ZD03。
完整技術復盤同可以複用嘅評測腳本:https://github.com/Lam810/cantonese-llm-lab
引用
@misc{yuelab2026cantoneseqa,
author = {Zeteng Lin and Jing Tang},
title = {Cantonese QA: a Qwen3-8B LoRA fine-tune for Cantonese question answering},
year = {2026},
howpublished = {\url{https://huggingface.co/Zeteng/qwen_yue_qa_finetuned_int4}},
note = {Key Laboratory for Cantonese Corpus Construction and Large Language Model
Evaluation. Grant No. 25ZD03}
}