Whisper有个臭名昭著的老毛病——长音频一转录,就开始给你瞎编。甚至同一句话连续重复输出十几遍,把你的会议记录变成复读机现场。

这个毛病叫幻觉。做过ASR的人都懂那种心痛:一小时录音,你等了十几分钟转录完,打开一看,前面好好的,中间不知道哪里起开始跑偏,后面全是鬼打墙。

最近看了一篇挺有意思的论文,叫 Whisper-CD。它不重训模型、不改权重、不动架构,就在解码那一步上做了点"手脚",结果把幻觉按得死死的,CORAAL基准上词错率最多掉了24.3个百分点,速度反而比beam search还快48%

我第一反应是:不讲武德。

一、先聊聊Whisper为啥会瞎编

Whisper的解码方式是"自回归"——一个字一个字往外吐,吐出来的字又会喂回去当下文。

这套机制在短音频上工作得还行,一到长音频就容易脱轨

  • 幻觉:凭空编造原音频里根本没说过的话
  • 重复循环:卡在同一个短语里疯狂复读,“好的好的好的好的…”
  • 内容遗漏:直接跳过一整段内容,像没听见一样

你想想看,这三个问题放在真实场景里有多离谱:医生问诊录音漏掉关键病史、法庭速记凭空多出一句当事人没说的话、会议纪要中间插一段复读机——下游应用根本没法用

过去大家的解法是加 beam search:每一步保留多条候选路径,最后挑一条得分最高的。

听起来很美好。但实际用过的都知道:

  1. 。路径越多越慢,长音频直接让你等到怀疑人生
  2. 开销大。多条路径同步维护,显存占用成倍增加
  3. 治不了根。因为模型自己都觉得那句瞎编的是对的——你搜索再多条路径,出来的也都是差不多的错

简单说就是:模型的"信念"本身就歪了,你在歪掉的分布里挑最大值,再挑也是错的。

二、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的路线完全相反

什么都不改,只改解码。几行代码的事,直接即插即用。

这意味着:

  1. 任何部署中的Whisper服务,一夜之间都能升级 — 不用重训、不用重新部署模型
  2. 开源社区零成本跟进 — HuggingFace上的Whisper调用接口加几个参数就行
  3. 不消耗额外显存 — 对比解码用的是同一个模型权重,只是多跑几次推理
  4. 方法论是可迁移的 — 理论上可以用到其他自回归语音模型,甚至文本LLM上

我很理解很多做AI的同行,过去两年被各种"重方案"搞怕了——动不动就是RLHF、动不动就是百万条数据。

但这篇论文让我重新相信一件事:

真正聪明的研究,往往不是堆资源,而是换个角度看问题。

六、写在最后

如果你是做ASR落地的工程师,我强烈建议你把这个方法跑一下。核心代码应该不会超过50行——改改Whisper的解码循环,加一个对比loss,调一下权重,齐活。

如果你是研究者,这个思路有很多延展方向:

  • 应用到其他自回归生成任务(LLM、TTS)
  • 探索更多"负样本构造"方式
  • 和投机采样结合,能不能再提速?

这篇论文给我最大的启发是:有时候让模型变聪明,不是教它更多东西,而是教它"什么时候该闭嘴"。

Whisper学会了对自己的幻觉说不——这个事情,可能比模型本身更有价值。


参考论文:Whisper-CD: Accurate Long-Form Speech Recognition using Multi-Negative Contrastive Decoding

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐