识别准确率被高估的三种常见情况

2026-08-24

语音识别的准确率之所以经常”看着好、用着崩”,多数时候不是有人造假,而是评测流程里有几个口子,会系统性地让数字偏乐观。

这不是某一家的问题。任何人第一次给自己的系统跑评测,只要没刻意防,几乎都会踩中其中一两条。下面讲机制,以及拿到数字时该怎么反过来核。

情况一:测试集和训练集悄悄重叠了

现象:系统在公开测试集上成绩漂亮,换成你自己录的音频就明显退步。

机制:现代语音模型的训练数据来自大范围爬取和多源拼接。公开数据集本身也在互联网上流通,被镜像、被二次打包、被塞进别的合集里。于是一段本该只出现在测试集里的音频,可能以另一个文件名、另一种切分方式进了训练集。

关键在于,这通常不是故意作弊。数据量大到一定程度,人工逐条排查来源已不现实,去重脚本又只能按哈希或文本比对来做——换个采样率重新编码一遍,哈希就对不上了。模型见过这段音频,评测的人未必知道。

而见过和没见过,难度是两回事:在见过的数据上,模型更像是在回忆,不是在识别。

怎么核:问测试集的来源。如果是广为流传的公开集,这个成绩只能当作横向比较的参考。你自己录、自己标的一批音频,哪怕规模很小,可信度也高于任何公开集——因为它百分之百没被训练过。

情况二:比对之前,文本先被”洗”过一遍

现象:报告里的错误率很低,但实际拿到的转写文本读起来毛病不少。

机制:算错误率要把识别结果和参考文本对齐比对,两边格式不一致会带来大量”看似错误其实无所谓”的差异。所以评测脚本里普遍有一步归一化:

  • 去掉全部标点符号;
  • 统一大小写;
  • 把数字统一成汉字读法,或反过来统一成阿拉伯数字;
  • 去掉空格、统一全角半角;
  • 去掉语气词、重复词。

这一步在做声学能力的横向比较时是合理的,它排除了后处理风格差异带来的噪声。问题在于,用户看到的不是归一化后的裸字符串,而是带标点、带数字格式的最终文本。

标点恢复和 ITN(逆文本规范化)恰恰是后处理里最容易出错的两块——断句断错、金额格式转错、日期读法没转对,这些在归一化之后全部消失,一个都不计入错误率。

于是就有了这种落差:字识别得没问题、成绩单也漂亮,但产品里贴出来的那段文字读着别扭。错误确实存在,只是评测把它洗掉了

怎么核:问清楚归一化做了哪几步。去掉标点,这个数字就不含标点恢复的质量;统一数字形式,它也不含 ITN 的质量。这两块要单独看。

情况三:静音和噪声段被裁掉了

现象:安静房间里的朗读没问题,一到真实的会议、门店、车内就大幅退步。

机制:为了让评测干净,测试音频常被预先处理——掐头去尾、切掉长静音、剔除信噪比太差或有人抢话的片段。理由也充分:这些片段标注员本来就听不清,没法给出参考文本。

但真实的线上音频恰恰主要由这些东西组成:大段静音、串进来的背景人声、远场混响、说话人离麦克风忽远忽近。它们不只是”更难识别”,还会引发另一类问题——幻觉式输出:模型在纯静音或纯噪声上被迫产出文字,可能凭空吐出一句无关的话。裁剪过的测试集没机会暴露这类失败。

裁剪还顺手替系统做完了断句这道题——而”该在哪断句”本身就是 VAD 的难点。

怎么核:问音频是否经过裁剪或人工挑选。理想的测试集保留原始整段录音,包括静音段和难听清的段落。

情况四:只报了一个平均值

前三条讲测试集本身的问题,这一条讲数字的呈现方式。

机制:错误率通常是把全部测试音频合在一起算的——总错误数除以总字数。如果绝大多数音频正常、少数几条彻底崩掉,崩掉的那部分会被大量正常样本稀释,平均值仍然好看。

而用户的感受是反着来的。用户对”平均表现”没有感知,记住的是崩掉的那几次。一份会议纪要大部分准确、有一小段完全错乱,用户的评价通常是”这东西不能用”。

长音频尤其如此。长录音出问题往往是整段错乱(切分切在语音中间、说话人切换处对齐乱了),错误成片出现而非零散分布。平均值最擅长掩盖的就是这种分布。

怎么核:要分位数,不要只要平均值。看表现最差的那批音频错到什么程度,再看它们有什么共同特征——通常会指向一个具体的、可修的工程问题。

拿到一个准确率数字,该问哪几个问题

这份清单对别人的报告和你自己的评测同样适用。任何一项答不上来,数字的解释力就要打折。

要问的问题为什么要问
测试集是公开的还是自建的?公开集可能已被训练过,只适合横向比
有没有做归一化?做了哪几步?去标点等于不计标点恢复的错,统一数字形式等于不计 ITN 的错
音频是否经过裁剪或人工挑选?裁掉静音和噪声会隐去断句问题和幻觉输出
报的是平均值还是分位数?平均值稀释掉的,正是用户唯一有感知的那部分
有没有分维度的结果?安静/嘈杂、近场/远场、朗读/交谈的差距通常很大
计算口径是什么?按字还是按词、中英混说怎么算、标点算不算
参考文本怎么标注的?口语词是否保留、错读是否照录,会改变分母
测试集多大、覆盖多少说话人?样本太少时,数字波动大于系统之间的差异

口径尤其值得追问:中文没有天然词边界,不同分词器算出的 WER 不一样,所以中文一般按字算 CER。没说清口径的两个数字,比较本身就不成立。见 WER 怎么算中文为什么用 CER

常见问题

问:那是不是所有公开的准确率数字都没用?

不是。它们在”同一套口径下横向比较不同系统”上有用,这正是公开评测集存在的意义。但它们不能用来预测你自己场景下的表现——两个用途别混。

问:评测前的归一化是不是就不该做?

看你想测什么。要单独衡量声学建模能力,归一化是必要的,否则后处理风格差异会淹没真正的差别;要衡量交付给用户的质量,就该在未归一化的完整文本上算。同一套音频跑两遍、报两个数字最清楚。

问:自己建测试集要多大规模才够?

没有通用门槛,但方向明确:覆盖度比总量更重要。与其录一大批同一个人在同一房间的音频,不如把说话人、口音、设备、距离、噪声环境铺开,每种少量。测试集要长得像你的线上流量,而不是像标准数据集。

问:怎么判断退步是模型问题还是管道问题?

看错误的形态。专名反复写错指向热词或语言模型;数字日期格式不对指向 ITN;断句离谱指向标点恢复;成片错乱指向长音频切分。定位方法见语音识别的四个环节

相关阅读

与其质疑别人的数字,不如建一套自己的测试集。只要它取自真实流量、没被裁剪、没被归一化洗过,它给出的数字哪怕难看,也是唯一能指导你决策的那一个。


本文讲的是语音识别评测方法上的通用陷阱,不针对任何具体系统、团队或评测报告。 文中不给准确率数字,因为脱离测试集、口径与场景的准确率不具备可比性。 我们没有对任何方案做过实测,请以你自己在业务数据上的评测结果为准。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。