MiraEcho
全部文章

拿字错率挑 ASR 模型,是挑不出来的

约 8 分钟
  • ASR
  • 评测
  • 指标

你能读到的每一份 ASR 对比,都是围着字错率(WER / CER)组织的。A 模型在某个榜上 4.1%,B 模型 5.3%,结论好像自己就写出来了。它是个正经的研究指标,却是个很差的采购指标——因为它回答的那个问题,几乎没有哪个产品真的在问。

字错率数的是编辑次数(替换、插入、删除)除以参考文本的字数。每个字算一次,每个字权重相同。 问题就出在后半句:在一份真正有用的转写里,字和字之间根本不等价。

看一段客服通话里的两个错误:

「我想取消订单 A-4471」 → 「我想取消订单 A-4417

「我想取消这个订单」 → 「我想取消那个订单」

两个都是一次替换,对字错率的贡献一模一样。其中一个会把退款打到错误的订单上,另一个什么都不影响。任何把这两者打成同一分的指标,量的都不是你产品在乎的东西。

出事的错误集中在哪

真正让你付出代价的失败,集中在很小一撮 token 类型上,而且恰好就是通用模型最容易 out of distribution 的那几类:

专名。 产品名、公司名、人名。一份商务转写里的信息量大半压在它们身上,而它们又是词表里最难的部分:低频、常常压根不是常规词、有时连有上下文的人类听者都会听岔。

数字与标识符。 订单号、剂量、价格、日期、账号。这里的错误不是「质量下降」,是事实错误。把「十五」转成「五十」的模型,产出的是一个通顺、合理、彻底错误的句子——而且不像被听坏的专名,下游没有任何环节会觉得它可疑。

领域词汇。 每个行业都有几百个通用模型几乎没见过的词。这些词错了,转写在懂行的人眼里就是一堆胡话,不管周围那些语气词的字错率有多漂亮。

与此同时,那些最容易转对的字——的、了、嗯、就是说——数量上又是最多的,它们主宰了分母。一个模型完全可以在「的」和「嗯」上明显强过对手、在字错率上赢、然后在每一份真有人读的转写上输。

字错率根本看不见的那些失效

除了权重问题,还有几种对产品至关重要的行为,这个指标是完全瞎的。

在非语音段上流畅地编。 基于注意力的现代 ASR 被训练成产出「像话的文本」,于是当你喂给它静音、呼吸声、音乐或者等待彩铃时,有些模型照样给你一个像话的句子。常见产物是训练里见得太多的套话——字幕组署名、「感谢观看」、口播模板。在切好的干净语音评测集上这永远不会发生,所以它永远不会进那个数字;而在一段夹着三十秒等待音乐的通话录音里,它一直在发生。它比漏识别更糟,因为它是以正文的格式、自信地给出来的。

流式中间结果的抖动。 流式场景下,模型在听完整句之前就要吐假设,然后随着上下文到来不断改写。最终转写可能非常好——而字错率正是在最终转写上算的——与此同时屏幕上的实时字幕一句话里当着用户的面重写三次。用户体验到的是那些改写,不是最终文本。 两个最终字错率完全相同的模型在这里可以天差地别,而这个指标在结构上就没有能力告诉你谁是谁。

分段与说话人归属。 如果模型把两个人的话并成一段,或者把一句话劈成两段,拼接文本上的字错率可以接近满分,而你应用真正消费的那个结构化输出是错的。凡是把转写喂给下游 LLM 的链路,在乎这件事远超过在乎字数。

标点与大小写。 按惯例通常在算分前就被剥掉了。而它通常正是「一份人能读的转写」和「一份人读不下去的转写」之间的差别;如果你把转写喂给模型,它还会实打实影响下游模型的理解。

中英混说。 评测集是单语的,而这个世界上大部分地方的真实说话不是。一个能把「一句中文里夹三个英文产品名」处理好的模型,在你的真实流量上会赢过一个名义上更强的模型,而没有任何标准榜单会提前告诉你这一点。

那该量什么

以上不是在论证「不要指标」,而是在论证:按错误对你的代价加权去量。

实体错误率。 把你的应用真正消费的那些 token 挑出来——人名、ID、数字、领域术语——只在它们上面算准确率。这通常是在几百条语音上做一点标注的工作量,而它区分模型的锐度远高于字错率,因为它把那些正在抹平差距的虚词全部剔除了。

非语音段的幻觉率。 攒一个小的对抗集:静音、等待音乐、背景人声、键盘声、一声咳嗽。正确输出是空。量每个模型多久编一次。有些各方面都很优秀的模型在这一项上败得很惨,而这件事你应该在上线前知道,不是上线后。

中间结果稳定性。 流式场景把每一次中间假设都记下来,统计每句话里「已经显示出来的前缀被改写」发生了多少次。这个数才预测实时字幕是「稳」还是「跳」。它要和「多早吐出中间结果」配对看,因为两者直接互换——任何模型只要多等一会儿都能显得很稳。

端到端任务准确率。 如果 ASR 后面接的是一个抽结构化结果的 LLM,那就直接给结构化结果打分。这是唯一一个自动按真实下游代价给错误加权的量法,而且它有时会告诉你:更差的转写反而带来更好的结果——因为 LLM 能修某些类别的错误,修不了另一些。

测试集要用你自己的流量攒

这里最值钱的其实不是某个具体指标,而是评测音频来自你的产品。一百条真实录音、认真人工转写一遍,对「该买哪个模型」的信息量超过任何公开榜单,因为它们带着你的声学环境、你的口音、你的词汇、你的背景噪声和你的麦克风素质。

公开评测集大多是朗读语音或者精编的广播音频:干净、近场、单说话人、不抢话、无压缩伪影、没人在车里打电话。上面每一条缺口,都是模型排名会重排的地方。榜单冠军在真实流量上输掉是常事,原因通常一点都不神秘——榜单里没有你用户所处的那些条件。

一百条足够看出显著差异,工作量是一天。做一次,并且在每次考虑换模型时重跑一次,是语音领域杠杆最高的一项评测实践。

结论

字错率适合在固定语料上追踪研究进展。它不适合作为采购决策的依据:它给每个字同样的权重,它无视最终转写之前发生的一切,它也看不见非语音音频和流式各自引入的失效模式。

去量承载语义的那些 token,显式地测它会不会凭空编字,量你的实时字幕自我改写得有多厉害——并且全部在你自己用户的录音上做。你得到的排名不会是榜单上那个,但它会是站得住的那个。

用 MiraEcho 把它做出来

流式 TTS、实时 ASR、声音克隆,一个 API Key 全都有,免费开始。

免费开始使用