测试日期: 2026-09-09 报告版本: V1.0
一、测试概述
1.1 被测模型
• 模型: sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03(Zipformer CTC 架构,int8 量化,仅支持中文,模型文件 367MB)
• 解码方式: greedy_search(贪心搜索),无语言模型(LM)约束
• 官方基准(README): aishell 测试集 WER 1.74%,wenetspeech test_net 5.92%,test_meeting 7.75%
1.2 测试环境与工具链
• 推理框架: sherpa-onnx 1.13.7(Python API),CPU 推理,4 线程
• 拼音转换与比对: pypinyin 0.55(TONE3 数字标调 + 轻声标 5;声母/韵母用 INITIALS / FINALS_TONE3 分解)
• 测试集: ① 受控 TTS 测试集 40 条(Windows 中文语音 Huihui 合成,16kHz/16bit/单声道),覆盖声调最小对、平翘舌、前后鼻音、n-l 区分、多音字、轻声、数字、自然语句;② 模型自带官方 test_wavs(真实语音)
1.3 评测指标
• 字符错误率 CER:转写汉字与参考文本的编辑距离
• 带调拼音音节错误率(PY-SER):含声调判定的拼音序列错误率------对应"拼音准确性"的核心指标
• 不带调拼音音节错误率:只看声母韵母组合、忽略声调
• 声母/韵母错误率:把音节拆成字母级单元(a/o/e、b/p/m/f、zh/ch/sh、an/ang 等)分别比对,对应"字母发音准确性判定"需求
• 声调准确率、同音字替换统计(汉字错但拼音对的占比)
二、测试结果
2.1 受控 TTS 测试集总体结果(40 条)
|------------|---------------------------|
| 指标 | 数值 |
| 字符错误率 CER | 3.66%(错 15 字,其中同音字替换 9 个) |
| 带调拼音音节错误率 | 3.17% |
| 声调准确率 | 98.24% |
| 不带调拼音音节错误率 | 1.46% |
| 声母错误率(字母级) | 1.46% |
| 韵母错误率(字母级) | 1.46% |
说明: 40 条中全部 15 个错误均来自"孤立声调最小对"5 条(tone_01~05)。经基频(F0)分析及对照实验验证,该 5 条错误主要由 TTS 合成孤立混读声调失真造成(详见 2.4),不反映模型真实能力。
2.2 核心结果:排除失真声调项后的 35 条
|------------|--------|
| 指标 | 数值 |
| 字符错误率 CER | 0.00% |
| 带调拼音音节错误率 | 0.00% |
| 不带调拼音音节错误率 | 0.00% |
| 声母错误率(字母级) | 0.00% |
| 韵母错误率(字母级) | 0.00% |
结论: 在平翘舌、前后鼻音、n-l、多音字、轻声、数字、自然语句等真实使用形态下,模型转写 35/35 全部正确,字母级声母/韵母错误率均为 0,拼音准确性表现优秀。
2.3 分项表现
|-----------|--------|---------|-------------|-----------|-----------|
| 类别 | 条数 | CER | 带调拼音SER | 声母SER | 韵母SER |
| 儿化 | 1 | 0.00% | 0.00% | 0.00% | 0.00% |
| 轻声 | 3 | 0.00% | 0.00% | 0.00% | 0.00% |
| 前后鼻音 | 6 | 0.00% | 0.00% | 0.00% | 0.00% |
| 自然语句 | 7 | 0.00% | 0.00% | 0.00% | 0.00% |
| n/l 区分 | 3 | 0.00% | 0.00% | 0.00% | 0.00% |
| 数字 | 3 | 0.00% | 0.00% | 0.00% | 0.00% |
| 多音字 | 8 | 0.00% | 0.00% | 0.00% | 0.00% |
| 平翘舌 | 4 | 0.00% | 0.00% | 0.00% | 0.00% |
| 声调最小对(孤立) | 5 | 75.00% | 65.00% | 30.00% | 30.00% |
注意: "声调最小对"行的高错误率源于 TTS 孤立混读失真(见 2.4),非模型缺陷。
2.4 声调分辨能力对照实验(孤立声调项归因)
"声调最小对"5 条的高错误率做了三组对照归因:
• 对照 A --- 同声调四连音: 分别合成"妈妈妈妈/麻麻麻麻/马马马马/骂骂骂骂",int8 模型 4/4 全部正确区分。证明模型对孤立音节具备声调分辨能力。
• 对照 B --- 载体句孤立声调: "第一个字念妈...骂"出现声调塌缩,结合 F0 分析(合成音频声调轮廓异常),指向 TTS 合成失真。
• 对照 C --- 跨模型一致性: int8、fp32、SenseVoice 三个不同架构模型在 5 条孤立声调项上全部出现大比例错误(错误模式一致),进一步证明错误源于合成音频本身,而非某个模型的缺陷。
建议: 声调判定应在单词/短语/句子等自然发音形态下进行;如产品核心是"单字发音判定",建议用真人录制样本补充评测(见 4.4)。
2.5 官方 test_wavs(真实语音)
0.wav: 对我做了介绍那么我想说的是呢大家如果对我的研究感兴趣呢
1.wav: 重点呢想谈三个问题首先呢就是这一轮全球金融动荡的表现
8k.wav_raw: 深入的分析这一次全球金融动荡背后的根源
8k.wav_soxr16k: 深入的分析这一次全球金融动荡背后的根源
0.wav 输出与官方文档示例完全一致;8k.wav 直接输入(sherpa 内部重采样)与 soxr 高质量重采样结果一致。
差异分析(以 SenseVoice / Paraformer 为参考):
• 0.wav: 本模型"对我做了介绍那么我想说的是呢...",SenseVoice 与 Paraformer 均为"对我做了介绍啊那么我想说的是呢..."(Paraformer 句尾还捕捉到"嗯"),即原音频带语气词,本模型存在漏字。
• 8k.wav: 本模型与 Paraformer 均为"深入的分析...",SenseVoice 为"深度的分析...",二比一倾向"深入"。
说明: 真实语音精度以官方 WER 为准(aishell 1.74% / wenetspeech net 5.92% / meeting 7.75%),测试仅作一致性验证。
2.6 多模型对比(同一测试集,排除失真声调项后的 35 条)
|---------------------------|---------|-------------|--------------|-----------|-----------|
| 模型 | CER | 带调拼音SER | 不带调拼音SER | 声母SER | 韵母SER |
| zipformer-ctc-zh int8(被测) | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
| zipformer-ctc-zh fp32 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
| SenseVoice int8(参考模型) | 0.26% | 0.51% | 0.00% | 0.00% | 0.00% |
|---------------------------|-----------------------------|-----------------------------|---------------------|
| 模型 | 0.wav | 1.wav | 8k.wav |
| zipformer-ctc-zh int8(被测) | 对我做了介绍那么我想说的是呢大家如果对我的研究感... | 重点呢想谈三个问题首先呢就是这一轮全球金融动荡的... | 深入的分析这一次全球金融动荡背后的根源 |
| zipformer-ctc-zh fp32 | 对我做了介绍那么我想说的是呢大家如果对我的研究感... | 重点呢想谈三个问题首先呢就是这一轮全球金融动荡的... | 深入的分析这一次全球金融动荡背后的根源 |
| SenseVoice int8(参考模型) | 对我做了介绍啊那么我想说的是呢大家如果对我的研究... | 重点呢想谈三个问题首先呢就是这一轮全球金融动荡的... | 深度的分析这一次全球金融动荡背后的根源 |
注: SenseVoice 为独立强模型,其转写可作为真实语音的参考文本用于差异分析。从对比可见: ① int8 与 fp32 完全一致,量化无损;② 干净语音上本模型 35/35 全对,与强模型持平;③ 三个模型在失真声调项上同时出错,证实 2.4 的归因。
三、拼音"精度不好"的问题定位
根据测试与模型特性分析,拼音精度问题主要来自以下四个层面:
3.1 模型层面:int8 量化 + 纯声学解码
• int8 量化约损失 1~2 个百分点识别精度(详见 4.2 量化对比数据);
• CTC + 贪心搜索无语言模型约束:对同音字("蓝/难""陈/程"等)完全靠声学打分,同音不同字时容易选错------汉字错了,拼音也就错了;
• 对孤立音节、短词语的声学信息量不足,细节(声调、送气、前后鼻音)判别比长句更困难。
3.2 输入层面:采样率不匹配
• 模型要求 16kHz 输入;若前端采集/回放链路把 8kHz 音频直接送入,识别精度会显著下降,应先重采样到 16kHz(本机 sherpa 内部重采样与 soxr 结果一致,可放心使用)。
3.3 应用层面:把"汉字错误"与"拼音错误"混为一谈
• 测试中全部 9 个汉字替换错误均为同音字替换(拼音完全相同)。若应用只关心拼音(如发音打分),这类错误不影响拼音准确性;若产品同时展示汉字,则需按 4.1 做同音字后处理。
3.4 场景层面:发音判定需要"拼音约束"而非"自由转写"
• 发音准确性判定场景通常已知目标内容(学生跟读"b p m f"等),自由转写模型把"读音不准"自由发挥成别的字词,导致判定误差放大。应采用拼音约束解码或强制对齐方案(见 4.4)。
四、提高精度的升级建议
4.1 短期(不改模型,纯软件层,1~3 天见效)
• 同音字替换器: sherpa-onnx 已内置 HomophoneReplacer(from_zipformer_ctc 的 hr_dict_dir/hr_lexicon/hr_rule_fsts 参数)。用产品领域词表(课程词表、指令词表)做同音纠正,拼音与汉字可同时修正。
• 拼音级后处理: 转写结果用 pypinyin 转拼音,对"目标拼音→候选字"做词典匹配修正;对 b/p、d/t、zh/z、an/ang 等混淆对做规则复核(结合声学置信度二次判定)。
• 逆文本正则化: from_zipformer_ctc 支持 rule_fsts/rule_fars(ITN 规则 FST),数字、日期等标准化。
• 输入链路加固: 统一 16kHz/16bit/单声道;8kHz 源先 soxr 重采样。
4.2 中期(同框架升级模型,1~2 周)
• int8 → fp32: 本报告实测 fp32 与 int8 在全部 40 条测试上结果完全一致(量化损失为 0),说明本模型 int8 量化质量良好,此升级路径收益有限、不推荐为精度手段(仅当内存充裕且追求极限时考虑)。
• 换用更新更强模型(sherpa-onnx 生态,接口兼容,这是真正的精度杠杆): ① FireRed ASR2 CTC zh_en int8(2026-02-25,最新 CTC 模型,可直接替换,精度显著更高);② Paraformer-Large 离线模型(中文场景口碑好);③ SenseVoice(多语言,中文精度更高;本报告实测其对真实语音的细节捕捉优于本模型,但计算量更大)。
• 语言模型重打分: 新版 sherpa-onnx 支持 OfflineLM(n-gram LM)对候选结果重打分,明显降低同音字/近音字错误。
4.3 中期(数据与工程)
• 建立拼音专项回归测试集(本报告 40 条测试集与脚本已就绪,可直接纳入 CI,脚本位于 F:\sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03\pinyin_test),每次换模型/调参数自动跑分对比;
• 收集真实场景语音(儿童/学习者发音样本),做针对性评测与微调。
4.4 长期(发音判定场景的架构级方案)
• 拼音约束解码: 目标内容已知时,用"词典+发音字典(lexicon)→ WFST(HLG)"约束解码,让模型只在目标拼音空间内做声学打分,直接输出"该读 a 是否读成了 o"级别的判定结果;sherpa-onnx 的 CTC FST 解码器(ctc_fst_decoder_config + HLG 图)正是为此设计。
• 强制对齐 + 置信度打分: 对每个目标拼音单元(声母/韵母/声调)输出置信度,按 a/o/e、b/p/m/f 逐字母给出判定与纠错提示,而非整句转写。
• 模型微调: 用发音评估领域数据(带声调标注的儿童/学习者语料)微调或蒸馏专用小模型。
4.5 优先级建议
|---------|-------------------------------------------|----------------|----------|
| 优先级 | 措施 | 预计收益 | 工作量 |
| P0 | 输入采样率统一 16kHz + 拼音级后处理词典 | 消除一类系统误差;同音字纠正 | 1~3 天 |
| P0 | 换用 FireRed ASR2 CTC 等更新模型(fp32 实测无收益,不推荐) | 整体精度显著提升 | 0.5~2 天 |
| P1 | 同音字替换器接入领域词表 | 领域词准确率大幅提升 | 3~5 天 |
| P1 | 拼音专项回归测试纳入发布流程 | 每次升级可量化对比 | 1~2 天 |
| P2 | LM 重打分 / HLG 拼音约束解码 | 同音近音错误显著下降 | 1~2 周 |
| P2 | 发音判定改为拼音约束+置信度方案 | 判定业务根本性提升 | 2~4 周 |
五、附录
5.1 错误明细(TTS 集,15 个错误全部来自失真声调项)
|---------|----------|----------|---------|-------------|
| ID | 参考文本 | 模型输出 | CER | 带调拼音SER |
| tone_01 | 妈麻马骂 | 妈妈妈妈 | 75.00% | 75.00% |
| tone_02 | 通同桶痛 | 通通痛 | 50.00% | 50.00% |
| tone_03 | 汪王往望 | 网网 | 100.00% | 75.00% |
| tone_04 | 衣移椅亿 | 一一 | 100.00% | 75.00% |
| tone_05 | 猫毛卯帽 | 猫毛毛 | 50.00% | 50.00% |
5.2 测试资产清单
• 测试集定义: pinyin_test\tts_cases.txt(40 条,分类标注)
• 测试音频: pinyin_test\tts\wav\*.wav(16kHz/16bit/单声道)
• 测试脚本: pinyin_test\test_pinyin.py(可复跑,支持 int8/fp32/SenseVoice 多模型对比)
• 原始结果: pinyin_test\results.json
• TTS 合成脚本: pinyin_test\gen_tts.ps1;对照实验: pinyin_test\tts_check\