Whisper AI 的工作原理:完整指南
对OpenAI开源语音识别模型的技术深挖:从梅尔频谱图到Transformer解码。
OpenWhispr
工程
目录
Whisper是OpenAI开发的自动语音识别(ASR)模型。 它于2022年9月发布,是一个通用语音识别系统,使用从互联网收集的68万小时多语言音频数据训练而成。Whisper采用编码器-解码器Transformer架构,将音频转换为log-mel频谱图,通过神经网络编码器处理,并以自回归方式解码文本token。它支持99种语言的转写、翻译为英文、语言识别和时间戳预测,而且全部在一个统一模型中完成。与多数商业ASR服务不同,Whisper的权重在MIT许可证下完全开源,由此催生了繁荣的移植、优化和应用生态,包括whisper.cpp这个C/C++实现,让Whisper能够实际用于实时、设备端语音识别。
最后更新:2026年2月17日。本文中的定量主张均已与至少两个主要来源交叉核对。
事实核查快照(双来源)
- Whisper发布时间、训练规模和许可证: OpenAI于2022年9月发布Whisper,使用68万小时数据训练,并采用MIT许可证。 arXiv论文 · OpenAI Whisper仓库
- 任务范围和语言支持: Whisper支持99种语言的转写、翻译成英文、语言识别和时间戳token。 Whisper模型卡 · Whisper README
- 英文基准背景: 约3% WER是在LibriSpeech test-clean上针对英文评估的基准数字,不是通用真实世界错误率。 large-v2模型卡 · 基准详情
- 近期模型更新: large-v3在许多语言上报告的错误率低于large-v2,turbo则通过更小的解码器计算量专注于降低延迟。 large-v3模型卡 · turbo发布讨论
- 与OpenWhispr的关系: OpenWhispr通过whisper.cpp使用Whisper,为桌面平台提供本地、离线优先的听写。 whisper.cpp · OpenWhispr
Whisper 如何处理音频
为什么它对 OpenWhispr: 很重要
通过 whisper.cpp 在本地运行 — 原始音频保留在设备上。
模型大小控制速度/准确性的权衡。
相同的管道支持 macOS、Windows 和 Linux 之间的听写。
Whisper是什么?
Whisper由OpenAI的Alec Radford、Jong Wook Kim、Tao Xu、Greg Brockman、Christine McLeavey和Ilya Sutskever在论文“Robust Speech Recognition via Large-Scale Weak Supervision”中提出。代码和模型权重于2022年9月以MIT许可证发布在GitHub上。
在Whisper之前,最先进的语音识别系统通常使用经过整理、人工标注的数据集训练,这些数据集往往局限于特定语言、口音或领域。Whisper打破了这一做法,使用从互联网抓取的音频与文字稿配对数据,规模达到68万小时,且数据非常多样。关键洞见在于,这种“弱监督”方式——使用不完美的机器生成或用户上传文字稿,而不是人工逐条标注的数据——可以产生一个在语言、口音、背景噪声和技术词汇上都非常稳健的模型。
结果是一个可以处理多种语音任务的单一模型:转写(同语种语音转文本)、翻译(任意语言语音转英文文本)、语言识别,以及带时间戳的语音活动检测。这种多任务能力通过一套特殊token系统嵌入到模型架构中,用这些token指定要执行的任务。
Whisper的开源发布意义重大。它让高质量ASR变得人人可用,开发者、研究人员和公司都能使用一个可与商业API竞争的模型,而且不需要按分钟付费、不需要把音频发送到云端,也没有供应商锁定。这推动了whisper.cpp、Faster Whisper等工具,以及建立在它们之上的几十个应用的发展,其中也包括OpenWhispr。
架构深挖
Whisper使用编码器-解码器Transformer架构,这与原始Transformer(Vaswani et al., 2017)以及许多机器翻译系统背后的基本设计相同。编码器处理音频,解码器生成文本。下面是每个阶段的工作方式。
音频预处理
在任何神经网络处理之前,原始音频会被转换成一种声音的可视化表示,称为log-mel频谱图。流程如下:
- 音频被重采样为16,000 Hz(16 kHz单声道)。
- 使用25毫秒窗口和10毫秒步幅(hop length)计算短时傅里叶变换(STFT)。
- 频谱被投影到80个梅尔频率滤波器组(large-v3为128个)上,这些滤波器通过对数间隔近似人类听觉感知。
- 应用对数缩放,生成最终的log-mel频谱图。
- 频谱图被分成30秒块。短于30秒的音频会补零,长音频会按顺序分块处理。
结果是一个形状为(80, 3000)的二维表示——80个梅尔通道,3,000个时间步(30秒,10ms步幅)。它类似一张图像,编码器处理它的方式也很像视觉模型处理像素数据。
编码器
编码器把梅尔频谱图转换成一串学习到的音频表示。它包含:
- 两个1D卷积层 — 第一个卷积的kernel size为3、padding为1,后接GELU激活。第二个卷积的kernel size为3、stride为2、padding为1,会把时间维度减半,把3,000个时间步下采样到1,500个位置。
- 正弦位置嵌入 — 与解码器不同,编码器使用固定的正弦嵌入(不是学习得到的)来编码每个时间步的位置。
- Transformer块 — 一叠标准Transformer编码器层,每层包含多头自注意力和带GELU激活的前馈网络,并通过残差连接和层归一化连接。
输出是一串1,500个上下文化音频特征向量——输入音频每20毫秒对应一个向量——解码器在生成文本时会对这些向量进行注意力计算。
解码器
解码器以自回归方式生成文本token:一次生成一个token,每个token都依赖编码后的音频和之前生成的所有token。它包含:
- Token嵌入层 — 将token ID转换为稠密向量表示。
- 学习到的位置嵌入 — 与编码器的正弦嵌入不同,解码器使用随模型一起训练的位置嵌入。
- 带交叉注意力的Transformer块 — 每个解码器层有三个子层:masked self-attention(防止模型看到未来token)、对编码器输出的cross-attention(让模型“听”音频),以及前馈网络。
最终的解码器输出会被投影到词表上,生成token概率。解码策略包括贪心搜索、束搜索和基于温度的采样。
特殊Token与多任务训练
Whisper通过一套巧妙的特殊token系统,用单个模型执行多种任务。这些token充当指令。解码器输入遵循如下结构:
<|startoftranscript|> <|en|> <|transcribe|> <|notimestamps|> Hello, how are you today? <|endoftext|><|startoftranscript|>— 表示输出序列开始。<|en|>— 指定语言(99个语言token之一)。可以自动检测,也可以手动设置。<|transcribe|>或<|translate|>— 指定是转写原语言,还是翻译成英文。<|notimestamps|>— 控制是否生成时间戳token。启用时间戳时,模型会生成类似<|0.00|>和<|2.40|>这样的时间偏移token,将文本与音频对齐。
这种统一token格式意味着,一个模型无需单独的模型头或微调,就能执行转写、翻译、语言检测和带时间戳转写。任务完全由提供给解码器的token序列决定。
训练数据
原始Whisper模型(tiny到large-v2)使用从互联网收集的音频和文字稿配对数据训练,总量为680,000小时。这个数据集并未公开。它的关键特征是弱监督:文字稿标签没有经过人工标注者逐条验证,而是来自字幕、闭合字幕以及其他用户生成的音频配套文本。
数据组成
根据官方模型卡,68万小时训练集组成如下:
| 片段 | 小时 | 占比 | 说明 |
|---|---|---|---|
| 英语 ASR | 438,000 | 65% | 带英文文字稿的英文音频 |
| 翻译(其他语言到英语) | 126,000 | 18% | 带英文文字稿的非英文音频 |
| 多语言 ASR | 117,000 | 17% | 带母语文字稿的非英文音频(覆盖98种语言) |
训练数据中英文占比很高(65%),这解释了为什么Whisper在英文上的表现明显优于低资源语言。对于2023年11月发布的large-v3模型,OpenAI将训练集扩展到100万小时弱标注音频,并额外加入400万小时伪标注音频,这些伪标签是用Whisper large-v2在未标注数据上生成的,是一种自训练或知识蒸馏形式。
为什么“弱监督”很重要
大多数早期ASR系统使用LibriSpeech(960小时)或Common Voice(每种语言几千小时)这样的数据集训练,这些数据集经过精心整理并由人类验证。Whisper选择用标签质量换规模:68万小时对比传统系统使用的几百到几千小时。论文证明这个取舍是值得的。来自互联网的数据多样性让Whisper在真实世界条件下非常稳健:背景噪声、重叠语音、口音、领域词汇,以及会让基于录音棚级朗读语音训练的模型感到困难的声学环境。
不过,弱监督也带来了一个已知限制:幻觉。因为训练文字稿并不完美,模型有时会生成听起来合理但实际并未被说出的文本,尤其是在静音或非常安静的片段中。这是该方法固有的取舍,也是仍在持续改进的方向。
模型尺寸
Whisper提供多个尺寸,从3900万到15.5亿参数不等。小模型更快但精度较低;大模型更准确但需要更多计算和内存。.en变体是英文专用模型,通常在英文上表现更好,尤其是较小尺寸。large模型没有英文专用版本。
| 模型 | 参数量 | 英文专用 | VRAM | 相对速度 |
|---|---|---|---|---|
| tiny | 39 M | tiny.en | ~1 GB | ~10x |
| base | 74 M | base.en | ~1 GB | ~7x |
| small | 244 M | small.en | ~2 GB | ~4x |
| medium | 769 M | medium.en | ~5 GB | ~2x |
| large (v1, v2, v3) | 1,550 M | -- | ~10 GB | 1x |
| turbo (large-v3-turbo) | 809 M | -- | ~6 GB | ~8x |
速度以large模型为参照。VRAM要求指原始Python实现中通过fp16精度进行GPU推理。whisper.cpp使用的内存明显更少(例如large模型需要约3.9 GB RAM,而不是约10 GB VRAM)。
turbo模型(2024年10月发布)是large-v3的蒸馏版本,解码器显著更小。它保留了large-v3的大部分精度,同时速度约快8倍,因此在速度重要时是很强的选择。注意,turbo不支持翻译任务。
large模型经历了三次迭代:large-v1(2022年9月)、large-v2(2022年12月)和large-v3(2023年11月)。每个版本都提高了精度,其中large-v3引入了128个梅尔频率bin(从80个提升),并使用更大的数据集训练。关于每个尺寸以及如何选择的详细拆解,请参阅我们的Whisper模型尺寸指南。
Whisper有多准确?
Whisper的精度通常用词错误率(WER)衡量,即被错误转写的词所占比例(插入、删除和替换合并计算)。WER越低越好。
英文基准
在LibriSpeech test-clean上,Whisper large-v2的WER约为3.0%[1][2]。这是最常用的英文ASR基准之一,由有声书中的干净朗读语音组成。这个结果可与商业ASR系统和专门训练的模型竞争,尽管在LibriSpeech这个特定基准上,针对该数据集微调的专用模型可以达到更低WER。Whisper的强项不在于击败狭窄基准,而在于稳健性,即在广泛真实世界条件下保持稳定表现。
Large-v3的改进
根据OpenAI的评估,在Common Voice 15和Fleurs评估数据集上,对于模型错误率低于60%的语言,Whisper large-v3相较large-v2显示出10-20%的错误减少[2][3]。这些改进在非英文语言上尤其明显,因为扩大的训练数据(总计500万小时)在这些语言上带来的差异最大。
Whisper的对比表现(2026年2月)
自Whisper发布以来,更新的开源ASR模型已经在干净语音基准上超过它。NVIDIA的Parakeet TDT(0.6B参数)在LibriSpeech test-clean上达到1.69% WER,Canary模型达到1.6% WER,都明显低于Whisper large-v3的约2.7%。不过,由于生态成熟、语言覆盖广,以及whisper.cpp等优化运行时可用,Whisper仍是部署最广泛的开源ASR模型。
词错误率:Whisper 与开源竞争对手
LibriSpeech test-clean(英语朗读演讲)——越低越好
来源:Hugging Face 模型卡、NVIDIA 模型卡、Open ASR Leaderboard (Feb 2026)。仅限纯英语朗读语音 - 现实世界的准确性因音频质量、口音和领域而异。商业 API 被省略,因为它们不发布 LibriSpeech 基准。
注:商业云API(Deepgram Nova-3、Google Chirp、AssemblyAI Universal-2)不公布LibriSpeech WER数字,因此无法在这张图中直接比较。它们的基准使用专有真实世界测试集。OpenAI还在2025年3月发布了GPT-4o-transcribe,这是一个仅API可用的模型(不开源,也不基于Whisper),据称错误率更低,但它只能在云端使用,无法本地推理。
Whisper擅长的地方
- +对口音和方言的稳健性 — 使用多样化互联网音频训练,Whisper比只在朗读语音上训练的系统更能处理地区口音。
- +背景噪声耐受性 — 即使有音乐、其他说话人或环境噪声,模型也能保持合理精度。
- +专业词汇 — 由于训练数据覆盖广,Whisper比许多通用ASR系统更能处理特定领域术语(医疗、法律、技术)。
- +多语言能力 — 单一模型支持99种语言,无需按语言单独微调。
Whisper吃力的地方
- -幻觉 — 最常被提到的问题。在静音或非常安静的片段中,Whisper可能生成从未说出的文本。这是弱监督训练方式的后果。
- -低资源语言 — 训练数据较少的语言(68万小时中大部分是英文)错误率明显更高。
- -重复文本生成 — 自回归解码器可能会“卡住”,反复生成同一句话。带特定参数的束搜索可以缓解,但不能完全消除。
- -默认并非实时 — Whisper处理30秒块,因此存在固有延迟。流式方案(如whisper.cpp的实时模式)可以绕过这一点,但会增加复杂度。
whisper.cpp与本地推理
原始Whisper实现需要Python、PyTorch和支持CUDA的GPU,才能获得合理性能。这使它不适合桌面应用、移动设备和边缘部署。Georgi Gerganov创建的whisper.cpp解决了这个问题。
whisper.cpp是一个用纯C/C++完整重新实现的Whisper推理引擎,没有依赖。它读取相同的模型权重,但运行时不需要Python、不需要PyTorch,也不需要GPU(虽然有GPU会大幅受益)。关键特性包括:
- 零运行时内存分配 — 所有内存都预先分配,使性能可预测,并适合嵌入式系统。
- Apple Silicon优化 — 在搭载M系列芯片的Mac上,编码器可以通过Core ML运行在Apple Neural Engine上,相比仅CPU执行快3倍以上。Metal GPU加速也支持完整GPU推理。
- 量化支持 — 模型可量化为4位、5位或8位整数精度,在几乎不损失精度的情况下显著降低内存使用并提高速度。
- GPU加速 — 支持NVIDIA CUDA(通过cuBLAS)、Vulkan(跨厂商)、OpenVINO(Intel)以及用于CPU加速的OpenBLAS。
- 语音活动检测(VAD) — 内置VAD可跳过静音片段,同时提升速度和文字稿质量。
内存要求(whisper.cpp)
| 模型 | 磁盘大小 | 所需RAM |
|---|---|---|
| tiny | 75 MB | ~273 MB |
| base | 142 MB | ~388 MB |
| small | 466 MB | ~852 MB |
| medium | 1.5 GB | ~2.1 GB |
| large | 2.9 GB | ~3.9 GB |
whisper.cpp可运行在macOS(Intel和Apple Silicon)、Linux、Windows、iOS、Android、FreeBSD、Raspberry Pi,甚至可通过WebAssembly在浏览器中运行。它能在普通消费级硬件上实现快于实时的转写,包括Raspberry Pi 4和iPhone 13这样的小设备。
正是这种可移植性,让本地、私密的语音识别变得可行。像OpenWhispr这样的应用在底层使用whisper.cpp,提供完全运行在用户设备上的实时按键说话听写,音频永远不会离开机器。
Whisper vs 其他ASR系统
Whisper处在更大的语音识别系统生态中。下面是它与常见替代方案的比较。
Google Cloud Speech-to-Text
Google的云端ASR服务。精度优秀,尤其是英文,支持实时流式处理和话者分离。主要区别在于:它是专有服务,需要把音频发送到Google服务器,并按处理的音频分钟计费。Whisper在通用场景下精度相近,可本地运行且免费,但缺少内置流式处理和话者分离。
Amazon Transcribe (AWS)
Amazon的云端ASR,与AWS生态紧密集成。提供医疗转写、呼叫分析和自定义词汇。取舍与Google类似:依赖云端、按分钟计费、专有。对于需要离线运行、开源许可或避免供应商锁定的应用,Whisper更合适。
Mozilla DeepSpeech
Mozilla基于Baidu Deep Speech研究的开源ASR引擎。它曾是最早的高质量开源ASR模型之一,但Mozilla在2021年停止了活跃开发。Whisper在精度、多语言支持和社区势能上已经实质性取代DeepSpeech。DeepSpeech仍可作为轻量、易理解的基线,但不再推荐用于新项目。
Vosk
一个开源离线语音识别工具包,支持20多种语言,模型小而快。Vosk非常适合资源受限环境,它的模型只有Whisper的一小部分大小,并且能在低功耗硬件上良好运行。取舍是精度:Vosk明显不如Whisper,尤其在口音语音、噪声音频和专业词汇上。
Faster Whisper (CTranslate2)
使用SYSTRAN的CTranslate2推理引擎重新实现的Whisper。它运行相同的Whisper模型,精度相同,但速度最高可比原始OpenAI实现快4倍,内存使用也更低。Faster Whisper基于Python(不同于whisper.cpp的C/C++),是服务器端批量转写的强选择。它支持CUDA GPU和带INT8量化的CPU推理。
实际应用
Whisper结合了精度、多语言支持和开源可用性,已经成为大量应用的基础:
桌面听写
OpenWhispr等应用使用whisper.cpp,在macOS、Windows和Linux上提供系统级按键说话听写。音频在本地处理,不会发送到云端。
字幕生成
Whisper的时间戳预测非常适合生成字幕和闭合字幕。stable-ts和auto-subtitle等工具会自动化这一工作流。
播客和会议转写
Whisper很擅长长音频转写,尤其是配合分块处理方式。许多播客编辑器和会议记录工具使用Whisper(或Faster Whisper)批量转写录音。
翻译和本地化
Whisper内置的翻译能力(任意语言转英文)用于跨语言内容访问、媒体本地化和实时翻译原型。
无障碍
面向聋人和听障用户的实时字幕、面向运动障碍用户的语音界面,以及音频描述转写,都是Whisper正在被部署的活跃领域。
数据标注和研究
研究人员使用Whisper创建伪标注数据集来训练其他模型,这与OpenAI创建large-v3训练数据的方法相同。它也被广泛用于语言学研究和语料库构建。
来源和延伸阅读
- [论文] Radford, A., Kim, J. W., Xu, T., Brockman, G., McLeavey, C., & Sutskever, I. (2022). Robust Speech Recognition via Large-Scale Weak Supervision. arXiv:2212.04356. arxiv.org/abs/2212.04356
- [代码] OpenAI Whisper GitHub仓库。 github.com/openai/whisper
- [代码] whisper.cpp — Georgi Gerganov的C/C++移植版。 github.com/ggml-org/whisper.cpp
- [模型卡] Hugging Face上的Whisper large-v2(LibriSpeech test-clean WER基准:约3.0%)。 huggingface.co/openai/whisper-large-v2
- [模型卡] Hugging Face上的Whisper large-v3(相较v2错误减少10-20%)。 huggingface.co/openai/whisper-large-v3
- [模型卡] Hugging Face上的Whisper large-v3-turbo(面向低延迟的蒸馏变体)。 huggingface.co/openai/whisper-large-v3-turbo
- [模型卡] OpenAI Whisper模型卡(训练数据组成拆解)。 github.com/openai/whisper/blob/main/model-card.md
- [发布说明] OpenAI large-v3发布公告和评估说明。 github.com/openai/whisper/discussions/1762
- [发布说明] OpenAI turbo发布讨论和速度取舍。 github.com/openai/whisper/discussions/2363
- [代码] Faster Whisper — SYSTRAN基于CTranslate2的重新实现。 github.com/SYSTRAN/faster-whisper
- [产品] OpenWhispr通过whisper.cpp使用Whisper进行本地听写工作流。 openwhispr.com
用OpenWhispr在本地试用Whisper
OpenWhispr使用Whisper(通过whisper.cpp)在macOS、Windows和Linux上提供本地、私密的听写。按键说话、支持99+种语言、无需云端。免费试用。
无需账户 · 可离线使用 · 永远开源