中文语音识别为什么看 CER 不看 WER
中文语音识别不按词算错误率,而按字算 CER(Character Error Rate),根本原因只有一条:中文书面语没有天然的词边界,词数本身就不是一个客观量。
英文句子里,空格已经替你把词切好了,“how are you”就是三个词,谁来数都一样。中文没有这个东西。“语音识别系统”是一个词、两个词还是三个词,取决于你用哪个分词器。而 WER 的分母恰恰是参考文本的词数——分母都不稳定,算出来的比率自然没法拿来比。
WER 的公式推导和手算过程属于WER 怎么算:一个公式说清语音识别的准确率,本篇不重复,只讲中文为什么必须换一套口径。
换个分词器,错误率就变了
举个具体的例子。参考文本是:
我们需要一个语音识别系统
识别结果把”识别”错成了”是别”,其余全对。这是一处替换错误,事实层面没有任何争议。
现在看两种分词方式:
- 粗粒度分词器切成:我们 / 需要 / 一个 / 语音识别系统 → 共 4 个词。错的那个字落在”语音识别系统”里,这一整个词判错,WER = 1 / 4。
- 细粒度分词器切成:我们 / 需要 / 一 / 个 / 语音 / 识别 / 系统 → 共 7 个词。只有”识别”这个词判错,WER = 1 / 7。
同一段音频、同一个模型、同一处错误,两个数字差了将近一倍。变的不是识别质量,只是分词工具。
如果按字算:参考文本 12 个字,错 1 个字,CER = 1 / 12。换谁来数都是 12,这个分母不会因为换工具而变。
CER 就是把”词”换成”字”
CER 与 WER 是同构的,公式一模一样:
CER =(替换数 + 删除数 + 插入数)/ 参考文本的字数
同样由参考文本与识别结果之间的编辑距离对齐得出,同样在插入错误足够多时可以超过 100%——分子里的插入数不受分母约束。唯一的改动就是把计数单位从”词”降到”字”,从而绕开分词这个不确定环节。
要注意 CER 换来的是可比性,不是”更准确地描述体验”。它让不同团队、不同时间的数字能放在一起看,仅此而已。
中英混说,口径必须写出来
现实里的中文语音很少是纯中文。“这个 API 的 latency 有点高”这类句子,一半汉字一半英文单词。这时候按字算就出问题了:英文单词如果拆成字母来数,一个 latency 就顶七个计数单位,权重被严重放大;整词算又和汉字的粒度对不齐。
常见约定是:中文按字、英文按词,混在一起统计,有时写作 MER(混合错误率)。这是个合理的折中,但它是约定而不是标准——有人把英文也按字符算,有人把连续英文当一个整体,有人干脆把英文段落单独统计。
所以真正的关键结论是:口径必须随测试集一起说明。一个孤零零的 CER 数字,如果没告诉你英文怎么处理、标点算不算、数字用什么形式,它就不具备被比较的资格。这不是学究气,是因为上面那些选择造成的差异,经常比模型之间的真实差距还大。
CER 也在掩盖东西
按字算解决了分母的争议,但它把所有错误都当成等价的一个单位,这本身也丢掉了信息:
- 同音字错误和不相干错误,对 CER 的贡献完全一样。把”在”识别成”再”,读者一眼扫过去基本不受影响;把”在”识别成”载”,句子可能就读不通了。两者在 CER 里都是”错 1 个字”。
- 标点算不算字,结果会明显不同。标点由后处理模型补,本身就是一个独立的误差来源。把标点纳入统计,测的是整条管道;剔除标点,测的是声学识别。两个数字不该混着比。
- 数字用什么形式也会左右结果。“二零二五年”和”2025 年”字数不同,评测前有没有做逆文本规范化、比对时统一成哪种形式,都会改变分母和错误计数。
所以合理的做法是:CER 用来做纵向对比和回归监控,具体错在哪、影响多大,还得回去看错误样本。只盯一个数字优化,很容易把资源花在对用户无感的地方。
评测口径检查清单
下次有人给你一个 CER 数字,按这七条挨个问。问不出来的,就当这个数字不存在:
| 要追问的 | 为什么重要 |
|---|---|
| 1. 字怎么数的?标点、空格算不算? | 直接决定分母,是差异最大的一项 |
| 2. 中英混说按什么口径?英文按词还是按字符? | 不说清就无法与任何其他数字比较 |
| 3. 评测前做了哪些归一化?(去标点、繁简统一、数字转写、大小写) | 归一化越多,数字越好看,也越远离真实产品 |
| 4. 测试集从哪来?有没有可能和训练数据重叠? | 公开集被反复训练过,成绩会虚高 |
| 5. 音频有没有被裁过?静音段、串音段是否保留? | 裁干净的音频不代表线上录到的音频 |
| 6. 报的是平均还是分布?最差的那批长什么样? | 少数长音频的崩溃会被平均值稀释 |
| 7. 是每条算一个 CER 再取平均,还是全部错误求和除以全部字数? | 前者(宏平均)里短句权重被放大,后者(微平均)由长音频主导,两个数经常对不上 |
第 7 条最容易被忽略,也最容易在两个团队对数时吵起来——双方公式都没错,只是聚合方式不同。报数字的时候顺手写一句聚合方式,能省掉很多来回。
常见问题
问:中文场景下 WER 就完全没用了吗?
不是没用,是不能跨团队比。如果你在自己内部固定一个分词器、固定一份测试集,WER 的变化趋势依然是有效信号。它失效的地方是横向比较:别人报的 WER 和你的 WER 不是同一把尺子。
问:CER 低是不是就等于用户体验好?
不一定。关键信息错一个字(比如金额、人名、订单号)造成的后果,远大于虚词错三个字,但 CER 分不出来。业务上通常要额外定一个关键字段准确率,单独盯专名和数字。
问:粤语、方言、少数民族语言呢?
原则一样:看这门语言的书面形式有没有天然的、无歧义的切分单位。有汉字书写体系的一般沿用按字算;使用拼音文字且有空格分词的,用 WER 更自然。真正要小心的是书写不规范的语言,参考文本本身就不唯一,这时候光换指标解决不了问题,得先把标注规范定死。
问:那我到底该怎么开始?
先建一份用你自己业务音频做的测试集,把上面那七条口径当作测试集文档的一部分写下来。指标是拿来做决策的,决策的前提是数字可比。
相关阅读
本文讲的是语音识别评测领域的通用口径问题,不绑定某一个具体实现。 各家系统与各份公开测试集的统计规则差异很大,请以你所用系统或数据集的官方说明为准。 我们没有对任何方案做过性能实测,因此全文不给准确率、速度一类的数字。