Whisper 幻觉:为什么 Whisper 会写出没人说过的话,以及怎么阻止它
作者 Ryleigh Newman · 发布于
Whisper 幻觉,指的是转写结果里没有人说过的话:一个短语翻来覆去地重复,在静音上冒出“Thank you for watching”(谢谢观看)这样的结束语,或者整句话都是编出来的。它们之所以出现,是因为 Whisper 写文字的方式和语言模型很像,当音频是静音、有噪声或者听不清的时候,它对“接下来通常是什么”的判断,可能压过它实际听到的内容。
OpenAI 自己的模型卡就对此发出了警告,2024 年的一项研究发现,在它测试的转写中,大约 1% 含有编造的短语。我做了 YapToText,一款免费的 Mac 听写 App,在你的 Mac 上运行 Whisper,因为我用手打字有困难,每天都靠听写,围绕模型做的工作里有相当一部分,就是为了抓住这一类错误。下面依次讲:幻觉是什么样子,为什么会出现,研究发现了什么,YapToText 怎么应对,以及不管用哪种 Whisper 方案你都能做什么,包括 whisper.cpp。
免费下载。无需账号,没有锁定的功能。需要搭载 Apple 芯片的 Mac 和 macOS 14 或更高版本。 源代码在 GitHub 上。
用其他语言阅读: English, Čeština, Deutsch, Español, Français, Magyar, Bahasa Indonesia, Italiano, 日本語, 한국어, Nederlands, Polski, Português, Русский, ไทย, Türkçe, Tiếng Việt, 繁體中文
步骤
- 一说完话就停止录音,或者在 Dictation 页面打开 Auto-stop after silence。
- 长时间思考时按空格键暂停,而不是把静音录进去。
- 在 AI Models 页面的 Language 选择器里选你说的语言。
- 转写文件之前,修剪长段静音和音乐,如果用 whisper-cli,还要把它转换成 16 位 WAV。
- 在 History 里点击 Show pipeline details,读一读原始转写,或者说话时按 2 使用 Raw Transcription。
Whisper 幻觉是什么样子
OpenAI 的 Whisper 论文用平实的话列出了几种失败方式:陷入重复循环,没有转写出一段音频开头或结尾的几个词,以及完全幻觉,也就是模型输出的转写与实际音频完全无关。实际使用中,它们表现为四种模式。幻觉不是听错的词。它是一个背后根本没有声音的词。
- 重复循环。 同一句话、短语或词一遍又一遍地出现,常常出现在逐渐沉默下去的录音结尾。OpenAI 的模型卡说,序列到序列的架构让模型容易生成重复的文字,束搜索和温度调度可以在一定程度上缓解,但不能完全解决。
- 静音里冒出的文字。 在 Whisper 代码仓库里标题为“Share your hallucinations here”的讨论串中,用户报告说,在静音、音乐或音效的位置,明明没有人说话,却出现了“Thank you for watching”和字幕署名之类的句子。
- 编造的句子。 从没有人说过的整句话。康奈尔大学对 Careless Whisper 研究的报道说,Whisper 偶尔会编造整个短语和句子,有时带有暴力的语言、编造的个人信息和虚假的网站。
- 标签和舞台提示。 读起来像剧本而不是说话的文字。YapToText 1.4 的发行说明记录了一项修复,针对转写里出现的幻觉说话人标签,比如“Male speaker:”。
相反的错误,也就是开头或结尾丢字,与此有关联,这也是为什么同一段录音可能既缺了第一个词,又多出一句编造的最后一行。普通的听错字是另一个问题,解决办法也不同,Mac 版 Whisper 指南里有介绍。
Whisper 为什么会产生幻觉
OpenAI 在它的模型卡里解释了原因。因为这些模型是用大规模的嘈杂数据以弱监督方式训练的,它们的预测里可能包含音频里并没有说出来的文字。模型卡认为,这是因为模型把“预测下一个词”和“转写音频本身”结合在了一起,并且说,在资源较少、较难被发现的语言里,这种现象可能更严重。当可以依据的声音很少时,模型里负责猜测的那一半就承担了更多的工作。
这就指向了容易引发它的几种情况:
- 静音和长时间停顿。 Careless Whisper 研究发现,说话时非发声时间占比更长的人,也就是停顿更久的人,出现幻觉的比例不成比例地高。
- 音乐和音效。 Whisper 代码仓库里的报告集中在没有人说话的片段上。
- 嘈杂或微弱的信号。 语音越不清楚,模型能用来锚定每个词的依据就越少。
- 语言。 OpenAI 说,表现因语言而异,差别很大,模型卡还说,在资源较少的语言里,幻觉可能更严重。
还有一个细节对发现幻觉有帮助。研究发现,OpenAI 的 Whisper API 产生的幻觉是不确定的,每次运行都会产生不同的随机文字,研究者就利用同一段音频两次运行结果的差异来找出它们。如果你的工具对同一段音频两次给出不同的文字,变化的那一部分就值得再看一眼。
Careless Whisper 研究发现了什么
这项研究是“Careless Whisper: Speech-to-Text Hallucination Harms”,作者是 Allison Koenecke、Anna Seo Gyeong Choi、Katelyn X. Mei、Hilke Schellmann 和 Mona Sloane,发表在 ACM 公平、问责与透明会议 FAccT 2024 上。比例很小。但一句编造的话造成的危害可能很大。
2026年10月5日在 arXiv 和 ACM Digital Library 上的论文,以及康奈尔大学的新闻报道中查阅。
- 他们测试了什么。 来自 AphasiaBank 的近 40 小时音频,共 13,140 段,说话人有失语症患者,也有对照组,2023 年发送给 OpenAI 的 Whisper API。
- 多常见。 大约 1% 的转写含有整个幻觉出来的短语或句子,这些内容在底层音频中以任何形式都不存在。
- 多严重。 38% 的幻觉含有明显的危害,比如延续暴力、编造不准确的关联,或者暗示虚假的权威。
- 针对谁。 失语症患者比对照组得到更多幻觉,非发声时间更多的片段也更容易产生幻觉。
- 随时间的变化。 作者在 2023 年 12 月重新运行这些音频时,许多例子已经消失,但 187 段音频中仍有 12 段产生了幻觉。
读这些数字时,有两点要分清。它们描述的是 2023 年那个样本在 OpenAI 托管 API 上的结果,不是 whisper.cpp,不是 Whisper Large v3 Turbo,也不是 YapToText,所以不能用它们来预测你自己的听写。它们也不是惊慌的理由:它们是让你读一读自己听写内容的理由,这本来也是好习惯。如果长时间停顿是你说话方式的一部分,按情况选择听写方式如实说明了 YapToText 可能在哪些地方不够用。
YapToText 怎么防范
YapToText 通过 whisper.cpp 运行原版的 Whisper Large v3 Turbo (Q5) 文件。我没有重新训练过模型。我做的是围绕它搭建的一套流程,这套流程有一部分就是为了不让没人说过的词进入你的文档。模型是原版的。功夫花在了它周围的防护上。
在 Whisper 听到任何内容之前
- 长时间的静音会先被压缩,再进行转写,这样模型就不会跑偏。
- 每次听写都会测量噪声,只有比例需要时,才会减去稳定的噪声。轻声说话时,声音会相对房间的背景声被提升。
- 嘈杂的片段会得到更深入的搜索。 片段测出有噪声时,解码方式会从贪心搜索切换到束搜索。
- 按键之前的半秒会被保留,所以开头的词不会被截掉。

转写结果返回之后
- 重复循环会被抓出来并删除。 有一道防护会折叠 Whisper 在静音结尾掉进去的循环,从 1.4 起,以静音结尾的长听写不再把最后一句话反复重复。
- 编造的说话人标签会被删除,舞台提示也一样。在 1.4 的修复之前,像“Male speaker:”这样的标签甚至可能被当成词汇学进去。
- 静音里幻觉出来的客套话会被抓出来并删除。
- 静音不会输入任何东西。 如果一次听写只有静音,YapToText 会显示“Didn't catch that”,并且不转写任何内容。
- 较短的转写会再处理一遍。 如果返回的文字比输入的语音短,就会运行一次补救处理。
整理模型出错的时候
除了 Raw Transcription 之外,每种模式都会把转写交给你 Mac 上的一个小型整理模型,而语言模型也会编造。App 会检查它的工作:如果结果读起来像助手的回复,长度远远超过你说的内容,重复了参考文字,或者凭空加了省略号,就会被丢弃,改为输入原始的转写。整理模型还被告知,不要丢掉任何一句话,也不要添加你没说过的内容。AI 听写页面介绍了这些规则。
这些改动,在发布之前都会用我自己真实听写的一套测试来衡量。那只是一个人的录音,不是基准测试,而且“抓住并删除”不等于“永远不会发生”:新类型的幻觉仍然可能漏过去。
看看 Whisper 实际听到了什么
分辨幻觉和整理出错的最快办法,是看 Whisper 在其他任何东西碰它之前输出了什么。如果编造的文字在原始转写里,就是 Whisper 写的。如果不在,就是整理环节造成的。
第 1 步:在 History 里打开这条听写
- 你: 打开 History,找到这条听写,点击 Show pipeline details。
- YapToText: 在最终文字上方显示原始转写,下方是模式、语言和耗时。
- 确认: 把原始转写和你记得自己说过的话对照着读。

第 2 步:下一条用原始方式听写
- 你: 说话的时候按 2,在 Auto mode 开启的默认顺序里,它就是 Raw Transcription。
- YapToText: 对这一条听写,输入 Whisper 的原话,只加基本标点,不经过 AI 模型。
- 确认: 输入的就是 Whisper 听到的内容。想让每条听写都保持原始状态,请在 Home 页面关闭 Post-transcription analysis。
每条 History 记录的导出菜单里有 Copy Raw Transcript,它会把整理之前的版本放进剪贴板。如果你想在每条较长的听写输入之前先读一遍,请在 Settings,Advanced,Text output 里打开 Review before inserting。模式指南说明了每种模式可以改动什么。
在任何 Whisper App 里预防幻觉
大多数幻觉都是从静音里长出来的,所以最好的预防办法,就是少给 Whisper 一些静音。这些办法对任何 Whisper App 都有效,适用的地方会写出 YapToText 的设置名称。输入的静音越少,输出的编造词句就越少。
- 说完就停。 一说完话就按键,不要让录音一直开着。在 YapToText 里,Dictation 页面 Recording 卡片中的 Auto-stop after silence(默认关闭)会在安静 0.5 到 5 秒后结束听写。
- 有意停顿。 中间想很久的话,按 空格键 暂停听写,再按一次继续。空格不会被输入。
- 设置语言。 在 AI Models 页面的 Language 选择器里选你说的语言,而不是让 Whisper 自己判断。语言页面列出了全部 29 种。
- 给它干净的信号。 麦克风靠近,房间安静,关掉音乐。YapToText 的 Pause music and video while dictating(默认开启)会在你说话时暂停播放。
- 先修剪录音。 转写文件之前,用任何音频编辑器剪掉开头和结尾的长段静音和音乐。
- 在要紧之前先读一遍。 凡是要发送、归档或引用的内容,都读一读原始转写。

按键和快捷键页面介绍了空格键、Esc 和其他按键。
给 whisper.cpp 用户的建议
如果你通过 whisper.cpp 自己运行 Whisper,输入的音频由你控制,而大部分预防工作就在这里。干净、修剪过的音频,是最便宜的防幻觉办法。
- 正确转换。 whisper.cpp 的 README 说,whisper-cli 目前只能处理 16 位 WAV 文件,并给出了转换其他格式的 ffmpeg 命令。
- 先修剪。 转换之前剪掉长段静音和音乐,这样模型根本看不到它们。
- 能设置语言就设置。 查看 whisper-cli 的帮助输出,找语言选项,而不是依赖自动检测。
- 试试别的模型大小。 如果你只说英语而且内存紧张,OpenAI 说,只支持英语的 .en 模型在处理英语时往往表现更好,tiny 和 base 尤其明显。
- 了解实时模式是什么。 whisper-stream 每半秒对麦克风采样一次并连续转写,README 称它是一个朴素的示例。
终端: 用 README 里的命令,把修剪过的录音转换成 whisper-cli 能读取的 WAV 格式。
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav结果: ffmpeg 把 output.wav 写成 16 kHz、单声道、16 位的音频,然后你把它交给 -f 后面的 whisper-cli。
你为 whisper.cpp 下载的模型文件在 YapToText 里也能用:在 AI Models 页面的 Your own models 下,Add Model 可以接收任何 whisper.cpp 的 GGML .bin 文件。本地 Whisper 指南有完整的设置、模型大小和内存数据。
没有任何防护能保证的事
- 每一种幻觉。 这些防护能抓住我见过、也测试过的模式。新的模式可能漏过去,所以原始转写始终只需点一下就能看到。
- 从没听到的话。 没有任何防护能找回麦克风没有捕捉到的语音,删掉编造的文字留下的是一个空缺,而不是真正说过的话。
- 我自己的比率。 我没有测量过 YapToText 或任何模型的幻觉率,所以这一页只引用已发表的研究,并说明它的局限。
- 文件转写的额外功能。 文件的转写结果是纯文本,没有时间戳,所以无法从一行可疑的文字跳到它在音频里的位置。音频文件页面介绍了这项功能。
- 把长时间停顿当作说话风格。 Whisper 是通用模型,除了压缩静音之外,YapToText 里没有任何设计改变它处理长停顿语音的方式。
- Intel Mac。 YapToText 需要 macOS 14 或更高版本的 Apple 芯片 Mac。
防护能降低概率。读一读你听写的内容,仍然是最后一道检查。
小结
- 它是什么。 它是背后没有语音的文字:循环、静音里的结束语、编造的句子和标签。
- 为什么。 Whisper 既转写也预测,静音、停顿、音乐和噪声给了预测发挥的空间。
- 在 YapToText 里。 长时间的静音会被压缩。重复循环、说话人标签和静音里的客套话会被删除。过度膨胀的整理结果会被丢弃。
- 对任何人。 说完就停,修剪静音,设置语言,并读一读原始转写。
YapToText 在 Mac App Store 上免费,Whisper 在你的 Mac 上运行。
少给 Whisper 一些静音,并检查它写了什么。如果 YapToText 输入了你没说过的话,请在 GitHub 上提交 issue,并附上 History 里的原始转写。每一条我都会看。
免费下载。无需账号,没有锁定的功能。需要搭载 Apple 芯片的 Mac 和 macOS 14 或更高版本。 源代码在 GitHub 上。
指南
更多指南(英文)
资料来源
- https://arxiv.org/abs/2402.08021 (查阅于 2026年10月5日)
- https://dl.acm.org/doi/10.1145/3630106.3658996 (查阅于 2026年10月5日)
- https://news.cornell.edu/stories/2024/06/ai-speech-text-can-hallucinate-violent-language (查阅于 2026年10月5日)
- https://github.com/openai/whisper/blob/main/model-card.md (查阅于 2026年10月5日)
- https://cdn.openai.com/papers/whisper.pdf (查阅于 2026年10月5日)
- https://github.com/openai/whisper/discussions/1873 (查阅于 2026年10月5日)
- https://github.com/openai/whisper (查阅于 2026年10月3日)
- https://github.com/ggml-org/whisper.cpp (查阅于 2026年10月3日)
- https://github.com/ryleighnewman/YapToText (查阅于 2026年10月3日)
- https://apps.apple.com/us/app/yaptotext/id6786382289 (查阅于 2026年10月3日)
常见问题
Whisper 为什么会产生幻觉?
OpenAI 的模型卡说,Whisper 是用大规模嘈杂数据训练的,可能输出并没有说出口的文字,很可能是因为它在转写的同时也在预测下一个词。静音、长时间停顿、音乐和噪声给这种预测提供了更多发挥的空间。
Whisper 为什么会写出“thank you for watching”?
这是一种已知的、发生在静音或音乐上的幻觉。Whisper 代码仓库里“Share your hallucinations here”讨论串中的用户,把它和字幕署名一起报告过。说完话就停止录音,并修剪掉静音,能少给它一些发挥的空间。
Whisper 为什么一直重复同样的文字?
OpenAI 的论文把陷入重复循环列为一种失败方式,它的模型卡说这种架构容易产生重复的文字。循环常常出现在静音的结尾,YapToText 的防护会把它折叠掉。
Whisper 幻觉有多常见?
Careless Whisper 研究发现,在它 2023 年的样本里,OpenAI 的 Whisper API 的转写大约有 1% 含有编造的短语或句子。你自己的比率取决于你的音频、你的模型和你的 App。
怎么解决 Whisper 幻觉?
少给它一些静音:说完就停,有意停顿,并修剪录音。设置语言,保证麦克风信号干净,并读一读原始转写,这样你就能看到 Whisper 实际写了什么。
YapToText 会产生幻觉吗?
它运行的是 Whisper,所以可能会。它会压缩长时间的静音,删除重复循环、编造的说话人标签和静音里幻觉出来的客套话,并丢弃远远超过你说的内容的整理结果。History 里能看到原始转写。