让Whisper不再瞎编:一招“对比解码“,WER暴降24.3%,速度还快了48%
Whisper有个臭名昭著的老毛病——长音频一转录,就开始给你瞎编。甚至同一句话连续重复输出十几遍,把你的会议记录变成复读机现场。
这个毛病叫幻觉。做过ASR的人都懂那种心痛:一小时录音,你等了十几分钟转录完,打开一看,前面好好的,中间不知道哪里起开始跑偏,后面全是鬼打墙。
最近看了一篇挺有意思的论文,叫 Whisper-CD。它不重训模型、不改权重、不动架构,就在解码那一步上做了点"手脚",结果把幻觉按得死死的,CORAAL基准上词错率最多掉了24.3个百分点,速度反而比beam search还快48%。
我第一反应是:不讲武德。
一、先聊聊Whisper为啥会瞎编
Whisper的解码方式是"自回归"——一个字一个字往外吐,吐出来的字又会喂回去当下文。
这套机制在短音频上工作得还行,一到长音频就容易脱轨:
- 幻觉:凭空编造原音频里根本没说过的话
- 重复循环:卡在同一个短语里疯狂复读,“好的好的好的好的…”
- 内容遗漏:直接跳过一整段内容,像没听见一样
你想想看,这三个问题放在真实场景里有多离谱:医生问诊录音漏掉关键病史、法庭速记凭空多出一句当事人没说的话、会议纪要中间插一段复读机——下游应用根本没法用。
过去大家的解法是加 beam search:每一步保留多条候选路径,最后挑一条得分最高的。
听起来很美好。但实际用过的都知道:
- 慢。路径越多越慢,长音频直接让你等到怀疑人生
- 开销大。多条路径同步维护,显存占用成倍增加
- 治不了根。因为模型自己都觉得那句瞎编的是对的——你搜索再多条路径,出来的也都是差不多的错
简单说就是:模型的"信念"本身就歪了,你在歪掉的分布里挑最大值,再挑也是错的。
二、Whisper-CD的反常识思路:给模型故意喂"坏音频"
这篇论文的作者切入角度,我第一次看到的时候愣了一下。
他们的思路是这样的:
既然模型在瞎编的时候自己也是"自信"的,那我们就测一测——如果我给它一份明显不对的坏音频,它在哪些词上依然很自信?
换句话说,凡是模型在坏音频上还敢自信输出的词,基本就是它在瞎编。
因为一个诚实的模型,看到噪声音频应该是迷茫的、低置信度的。如果它看到噪声还坚持输出某个词,那这个词大概率不是从音频里听出来的,而是从它的"语言先验"里脑补出来的——也就是幻觉。
这个思路本质上是对比解码(Contrastive Decoding):
最终输出 = 干净音频的logits − 坏音频的logits
把模型在坏音频上依然"确信"的部分减掉,剩下的才是真正从原音频里听出来的东西。
不加训练,不改模型,就在解码这一步做减法——就这一下,幻觉直接塌方。
三、三种"污染音频"的黑魔法
论文的核心问题是:坏音频到底怎么造?
作者给了三种方案,每一种对应一种"故障模式":
| 污染方式 | 干的事 | 对应治疗哪种幻觉 |
|---|---|---|
| 高斯噪声注入 | 往原音频加一层白噪 | 治模型"听不清也要瞎编" |
| 静音信号替换 | 把音频换成一段寂静 | 治模型"没声音也要输出" |
| 音频时间偏移 | 把音频在时间轴上挪一段 | 治模型"对齐错了还硬凑" |
说真的,每一种都打在了幻觉的七寸上。
最后用一个叫 log-sum-exp 的公式把三种负样本的信号合并,形成一个"多负样本对比目标"。这步很关键——因为单一种污染只能治一种病,合并起来才能把三种幻觉一起按住。
打个比方,这就像医生给你做体检:
- 测一次血压,只能发现高血压
- 测一次血糖,只能发现糖尿病
- 测一遍全套,什么毛病都藏不住
模型在三种"坏音频"上的集体表现,暴露出它在哪些token上是真听出来的,哪些是它在自嗨。
四、最炸的是实验数据
我把论文里的数据拎出来给你看:
在五个英文长音频基准上全面提升(Earnings22、CORAAL、VoxPopuli、TED等):
| 数据集 | 改进幅度 |
|---|---|
| CORAAL(非洲裔美式英语) | WER 降低最多 24.3 个百分点 |
| Earnings22(财报电话会) | 显著下降 |
| 其他三个长音频基准 | 一致收益 |
等等,CORAAL那个24.3个百分点是什么概念?
要知道,ASR领域能把WER绝对值降1个点都能发顶会。这篇一次性降了24.3个,而且还是训练无关的推理时方法,我反复确认了几遍,没看错。
更离谱的是速度:
对比解码比传统 beam search 还快 48%
这是我最服的一点。
按常识,你增加了一个额外的对比过程,计算量应该更大、更慢。但作者的实现用 log-sum-exp 巧妙地合并了多条负样本的前向,反而比 beam search 维护多条候选路径还省事。
精度上去了,速度也上去了——这种"帕累托改进"的好事,在ASR里极少见。
五、为什么说这件事意义大
坦率的讲,过去几年 ASR 圈讨论 Whisper 的幻觉问题,大家的方案都很重:
- 重训模型:收集更好的数据、加对抗样本、上RLHF——成本高,门槛高
- 加后处理:用LLM做二次修正、加语言模型rerank——又慢又贵
- 换架构:搞流式模型、搞cache-aware——改动太大,不通用
Whisper-CD的路线完全相反:
什么都不改,只改解码。几行代码的事,直接即插即用。
这意味着:
- 任何部署中的Whisper服务,一夜之间都能升级 — 不用重训、不用重新部署模型
- 开源社区零成本跟进 — HuggingFace上的Whisper调用接口加几个参数就行
- 不消耗额外显存 — 对比解码用的是同一个模型权重,只是多跑几次推理
- 方法论是可迁移的 — 理论上可以用到其他自回归语音模型,甚至文本LLM上
我很理解很多做AI的同行,过去两年被各种"重方案"搞怕了——动不动就是RLHF、动不动就是百万条数据。
但这篇论文让我重新相信一件事:
真正聪明的研究,往往不是堆资源,而是换个角度看问题。
六、写在最后
如果你是做ASR落地的工程师,我强烈建议你把这个方法跑一下。核心代码应该不会超过50行——改改Whisper的解码循环,加一个对比loss,调一下权重,齐活。
如果你是研究者,这个思路有很多延展方向:
- 应用到其他自回归生成任务(LLM、TTS)
- 探索更多"负样本构造"方式
- 和投机采样结合,能不能再提速?
这篇论文给我最大的启发是:有时候让模型变聪明,不是教它更多东西,而是教它"什么时候该闭嘴"。
Whisper学会了对自己的幻觉说不——这个事情,可能比模型本身更有价值。
参考论文:Whisper-CD: Accurate Long-Form Speech Recognition using Multi-Negative Contrastive Decoding
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)