SenseVoice 微调后,英文识别反而变差了
SenseVoice 微调后,英文识别反而变差了
原本想做一个更懂 IT 中文和中英混说的轻量 ASR。三阶段训练跑完后,中文指标明显变好,英文技术演讲却大量截断甚至空输出。继续增加 epoch 前,我先评估每个 checkpoint,再尝试基座与微调权重插值。
最终在当前 1,700 条测试集上,50/50 插值将总体 CER 从基座 13.36% 降到 11.62%,中文和英文都低于基座。它是当前候选模型,尚未通过独立 IT 热词验收,不能称为最终发布模型。
从计划数字回到实际交付
本篇合并 8 月 10 日的目标方案、数据候选清单、单机交付方案,以及 8 月 18 日试训、8 月 20 日插值报告。早期提过 LoRA、72 小时数据、12,000 热词,后来没有按这些目标交付。
实际使用 FunASR 的监督微调入口,训练硬件记录为北京区单台 g5.xlarge / A10G。交付数据如下:
| 划分 | 样本 | 时长 | 真人 / 合成 |
|---|---|---|---|
| train | 58,154 | 53.61 h | 26,354 / 31,800 |
| valid | 2,213 | 1.98 h | 2,213 / 0 |
| test | 1,700 | 1.70 h | 1,700 / 0 |
训练包总计 57.29 小时,约 144 个规范热词。合成只进入 train,同文本最多六个音频版本,时长限制 0.6–20 秒。按录音、会议、演讲或文本组切分,并排除跨 split 同文本冲突,减少泄漏;这仍不能替代独立业务测试。
候选名单也不等于最终训练清单。Earnings-25 等未进入最终交付,代码许可证、模型权重条款、语料许可必须分别处理,不能沿用早期“统一 Apache-2.0、可直接再发布”的说法。本文记录实验结果,不作模型再发布授权结论。SenseVoice 项目
冒烟通过只证明链路能跑
最初小样本评测只有 16 条 AMI 英文短句,缺少基座对照,无法判断质量。冒烟还暴露:脚本取训练入口时混入日志、冻结参数传入格式不符,以及 checkpoint 写满 96 GB 根卷。
修正脚本后,工作区移到 NVMe,最终模型、日志和评测备份到 EBS。现场修复版本被拉回本地,但历史记录中的交付 tar 重打包仍是待办,不能把它写成已完成。
正式试训采用每阶段一轮的 1/1/1:
| 阶段 | 数据 | 学习率 | 参数策略 |
|---|---|---|---|
| Stage 1 | 全 train | 2e-4 | 冻结 encoder.0–9,约 85.1% 参数仍可训练 |
| Stage 2 | 全 train | 2e-5 | 全量解冻 |
| Stage 3 | 合成热词 | 5e-6 | 全量解冻 |
这不是 LoRA。冻结了一部分层,也不等于只更新很少参数。
统一统计口径再比较
早期报告出现最终 CER 27.77%,后续统一 corpus-level 评测为 28.01%;语言分组数字也不同。旧表与新表不能混用。本文只使用 8 月 20 日完整阶段/插值对比中的 corpus CER:累计编辑错误数除以累计参考字符数,而不是逐样本 CER 的简单平均。
文本规范、标点、大小写、空格和中文分词会影响 CER/WER。WER 可以因插入项超过 100%,不能因此判断工具坏了,也不能把格式匹配收益全当成声学能力提升。当前比较是在同一评测流程下的结果,跨报告比较仍需原始输出重算。
英文退化主要发生在 Stage 1
| 变体 | 总体 CER | 中文 CER | 英文 CER | FOSDEM CER |
|---|---|---|---|---|
| 基座 | 13.36% | 15.02% | 12.21% | 13.30% |
| Stage 1 | 36.76% | 6.73% | 62.24% | 88.13% |
| Stage 2 | 29.27% | 6.66% | 48.43% | 67.72% |
| Stage 3 | 28.01% | 6.70% | 46.05% | 64.22% |
Stage 1 同时获得中文收益和严重英文退化。Stage 2/3 部分恢复,但仍远差于基座,证据不支持“Stage 3 是唯一原因”。
训练集中中文/混合标签占 89.4% 样本,英文 10.6%。中文合成时长 24.84 h,英文合成 3.77 h,加上 Stage 1 较高学习率、较多可训练参数,都是候选影响因素。阶段比较定位了退化发生点,没有单因素消融,不能分配各因素的因果贡献。
第一次插值其实没有插进去
基座权重是直接的 OrderedDict,微调 checkpoint 则把权重放在 state_dict。脚本误读为 model,首次三组插值实际等同于基座。
修正格式识别、确认 917 个共有权重键及实际变化后,才重新完整评测。下面是计算形态,不是可直接替换官方导出流程的脚本:
# Illustration: validate keys, shapes, dtypes, and checkpoint format first.
# Apply interpolation to compatible floating-point weights.
interpolated = (1 - alpha) * baseline + alpha * fine_tuned不仅要检查“文件生成成功”,还要验证模型实际变化,并保留原始基座、checkpoint、alpha 和评测配置。
50/50 在当前测试中取得平衡
| 变体 | 总体 CER | 中文 CER | 英文 CER | FOSDEM CER | ASCEND CER |
|---|---|---|---|---|---|
| 基座 | 13.36% | 15.02% | 12.21% | 13.30% | 23.95% |
| 25% 微调 | 12.93% | 14.47% | 11.92% | 12.95% | 23.13% |
| 50% 微调 | 11.62% | 11.75% | 11.79% | 12.91% | 21.76% |
| 75% 微调 | 13.54% | 7.03% | 19.24% | 24.22% | 17.14% |
| 100% 微调 | 28.01% | 6.70% | 46.05% | 64.22% | 15.47% |
50/50 的总体下降为 1.74 个百分点,约 13.0% 相对下降。英文下降只有 0.42 个百分点,没有置信区间,不能据此宣称显著提升。它只是本轮比较中更合适的平衡点,不证明所有数据、所有模型都该采用 50/50。
同一 test 被用于选 alpha,它已经参与模型选择。下一步应使用未参与选择的独立集,避免把调参结果当成无偏泛化估计。
把模型对比做成可重复的实验
每个候选都应有同一份运行清单:模型权重哈希、配置与词表、FunASR/依赖版本、解码参数、数据 manifest 哈希、音频预处理与文本归一化规则。只留 CER 汇总表,无法区分权重差异、调用参数差异和评测程序改变。
按 utterance ID 保存 reference、hypothesis、语言/数据源、编辑错误数和参考字符数,再计算 corpus CER。样本文件不存在、推理异常或输出为空应按事先制定的规则记录,不能把失败样本从分母里悄悄删掉。对英文技术演讲,短输出可能是删除错误,重复片段可能是插入错误,单一 CER 数字不能解释它们属于同一种退化。
进一步做组级分析时,以录音、talk 或 meeting 为单位处理相关性。一个长演讲切成很多片段不等于很多独立试验。若后来估计置信区间,也应按合适的组采样,不能把同一场演讲的高度相关切片当作互不相关。这次报告没有给出统计显著性结果,当前提升只是该评测集上的观察。
权重插值必须检查结构与内容
插值公式中的 α 指微调权重比例:0 是基座,1 是微调模型。两端需要相同参数语义、key 集合、shape 和兼容配置;同名文件或相同参数数量不够。记录中的 917 个 key 对上,只是检查链的一部分,不能省略实际内容差异与推理结果。
对浮点张量按统一 dtype 计算再保存;非浮点 buffer 不应无条件套公式,要制定明确的保留规则。写出后重新加载,核对选择的几个代表张量,确认 α=0/1 的边界对应预期;中间值应确实与两端不同。权重文件来自可信来源,不能为检查随意加载未知 checkpoint 中的可执行对象。
本次首次把 wrapper 里的 model 当作参数字典,而实际权重在 state_dict,生成结果等效基座。正确修复不只是“换一个 key”:还要让 key 缺失、shape 不匹配或输出没有变化时明确报错,不能静默生成一份看起来正常的模型。随后用固定小样本检查输出,再运行完整评测。
选择 50/50 之后,应锁定候选及解码设置,用没有参与选择 α 的新业务集验收。热词识别、中文整体、英文长段和中英混说分别设阈值;普通词不能为了热词提升而显著受损。只有在验收、许可与发布包检查完成后,才决定是否发布,不能把更多 epoch 当作这些检查的替代。
下一步先验收热词,不扩大训练
8 月 20 日评测和训练已结束,GPU 空闲、候选权重及评测持久备份完成,新的 2/2/1、8/8/5 均未启动。当前更有价值的是独立 IT 场景验收:术语召回、误插入率、数字/端口/IP、长英文和中英混说。
若仍不满足要求,下一轮再对采样平衡、Stage 1 学习率和冻结范围做小规模可比实验。更多 epoch 不能自动修复错误训练方向。
这轮最大的收获是三个检查顺序:先验证实际交付,随后按阶段比较能力,最后验证插值产物真的改变了权重。训练通过、评测改善和业务可用,是三个不同的里程碑。
本文日期采用主 KB 首次 Git 提交日期 2026-08-20(UTC+8),提交 b84a4fe。操作与评测时间在正文单独注明;写作期间未连接或修改生产设备。
