Encoder–Decoder ASR / Weak Supervision

Whisper 模型结构

Whisper 的关键不在于发明新的 Transformer 层,而在于把多语转写、英语翻译、语言识别和时间戳统一成一个有条件的文本生成任务,并用大规模弱监督音频训练同一套 Encoder–Decoder。

30 秒音频,逐 token 生成Encoder 一次读取整个窗口;Decoder 通过任务 Token 和 Cross-Attention 自回归输出文本与时间戳。

一、Whisper 把 ASR 变成带指令的文本生成

同一句声音可能需要原语言转写、翻译成英语、预测语言,或者输出带时间戳的字幕。Whisper 不为这些任务建立彼此独立的分类头,而是用特殊 Token 描述任务,再让同一个 Decoder 生成目标序列。

在 Whisper 之前,端到端 Attention Encoder-Decoder 已经是成熟的 ASR 路线;自监督语音预训练也能利用大量未标注音频。Whisper 的研究问题不同:如果直接扩展多样化的弱监督音频—文本配对,能否得到不依赖特定数据集微调、对口音、噪声和不同领域更稳健的模型?

OpenAI 报告原始 Whisper 在 680,000 小时多语、多任务监督数据上训练。论文强调其零样本跨数据集稳健性,同时也说明它并非在每个专门基准上都胜过针对该数据集优化的模型。Whisper 论文

一句定义

Whisper 是一个以固定长度 Log-Mel 频谱为输入、以带任务和时间戳 Token 的文本序列为输出的 Encoder–Decoder Transformer。

二、整体结构:Encoder 听完整窗口,Decoder 逐字写

Whisper Encoder–Decoder 模型结构30 秒音频转换为 Log-Mel 频谱,经卷积降采样和 Transformer Encoder 得到音频表示;任务 Token 与已生成文本进入自回归 Decoder,Decoder 通过 Cross-Attention 读取音频并输出文本和时间戳。 16 kHz 音频最多 30 秒窗口 Log-Mel 频谱25 ms 窗,10 ms 步长80 / 128 Mel bins Audio Encoder2 × Conv1D + GELU正弦位置编码双向 Transformer Blocks 音频上下文表示约 1500 个位置 / 30 秒 Decoder 输入 Token语言 + 任务 + 时间戳控制上一段提示 + 已生成文本 Text DecoderMasked Self-AttentionCross-AttentionMLP + 残差 + LayerNorm逐 token 自回归 Cross-Attention 下一个 Token文字 / 时间戳 / 结束追加到 Decoder 输入,继续下一步
概念图:展示 Whisper 的稳定结构,不代表所有尺寸的层数和宽度。small、medium、large 等版本主要改变 Transformer 深度与维度;large-v3 还把输入 Mel bins 增至 128。

三、音频 Encoder:30 秒约压成 1500 个位置

01 / RESAMPLE16 kHz 单声道

输入统一采样率,并截取或填充到模型窗口。

02 / MELLog-Mel

25 ms 分析窗、10 ms 步长,约产生 3000 帧。

03 / CONV两层 Conv1D

第二层 stride=2,将时间长度减半。

04 / POSITION正弦位置编码

让 Encoder 知道音频帧的时间顺序。

05 / ENCODER双向 Transformer

每个位置可利用整个 30 秒窗口。

30 秒 ÷ 10 ms hop ≈ 3000 个 Mel 时间帧 第二层卷积 stride = 2 → 约 1500 个 Encoder 位置 每个位置对应约 20 ms 的输入时间 这是表示分辨率,不等于字幕时间戳精度或端到端延迟。

Whisper 的卷积前端较轻,主体计算仍在 Transformer。Encoder 使用预归一化残差块和最终 LayerNorm。它不使用严格因果掩码,因此一个窗口末尾的信息可以影响窗口开头的表示,这有利于离线准确率,却意味着该 Encoder 不是原生低延迟流式结构。Whisper 官方实现

四、Decoder:文字历史与声音证据在 Cross-Attention 相遇

Decoder 的 Masked Self-Attention 只能读取当前 token 左边已经生成的 token;Cross-Attention 则读取全部 Encoder 音频表示。每一步输出一个词表分布,选择文字、时间戳或结束 token,再把结果追加到输入继续下一步。

Masked Self-Attention

回答“根据已经写出的文字,下一段语言上可能是什么”。它提供拼写、语法和长距离搭配能力。

Cross-Attention

回答“音频窗口里哪里支持这个候选”。它把文本生成约束在声音表示上,但不能从结构上保证绝不脱离声音。

Decoder 的输入 embedding 与输出词表投影共享权重,并使用学习式位置 embedding。训练采用 teacher forcing:真实前缀作为输入,预测下一个目标 token;推理时使用模型自己的历史输出,因此错误可能传播。

语言能力既是优势也是风险

当声音清楚时,文本历史能修正同音词和领域表达;当输入是静音、音乐、噪声或截断语句时,同一 Decoder 仍能生成语言上流畅的内容。因此“读起来通顺”不能替代实体、数字、静音幻觉和删除错误评测。

五、特殊 Token 如何统一四类任务

Whisper 把任务配置编码进同一个输出序列。下面是一条中文、原语言转写、带时间戳输出的概念序列:

<|startoftranscript|><|zh|><|transcribe|><|0.00|>你好<|1.24|><|endoftext|>
Token 类别作用例子
语言指定或预测音频语言<|zh|><|en|>
任务原语言转写或翻译为英语<|transcribe|><|translate|>
时间戳控制启用或关闭时间戳生成<|notimestamps|>
时间戳表示 30 秒窗口中的相对时间以 20 ms 为粒度的时间 token
文本Byte-level BPE 文字 token多语文本、标点和空格

时间戳不是独立回归头输出的浮点数,而是 Decoder 词表的一部分。原论文将 0–30 秒按 20 ms 量化成时间 token,使文本与分段边界可以交替生成。Whisper 论文 §2.2

六、长音频:顺序滑窗不是原生流式

Whisper 长音频滑窗解码长音频按约 30 秒窗口顺序处理,每个窗口经 Encoder 和 Decoder 输出时间戳及文本,最后时间戳决定下一窗口起点,可将上一段文字作为下一窗口提示。 长音频时间轴当前约 30 秒窗口下一个窗口继续 Encoder + Decoder输出文字与时间戳 提交已完成片段最后时间戳决定移动量可保留上一段文字作为 prompt 移动窗口并重复 每个窗口内部仍使用完整双向 Encoder;边界可能重算,错误 prompt 也可能传播解决“长文件能否转写”,不等于低延迟、稳定 partial、状态缓存式实时识别
概念图:Whisper 的官方顺序长音频算法根据时间戳推进窗口;第三方实现也常用 VAD、固定切块或 overlap。具体边界处理并非模型层结构的一部分。

如果把长录音预先用 VAD 切成多个片段并行处理,可以提高吞吐,却可能丢失跨段上下文;如果顺序带入前文,可以保持专名和语气,但错误文本也可能污染下一段。工程系统需要在吞吐、上下文和错误传播之间选择。

Whisper 可以一边说一边实时出字吗?

可以通过短块、重叠窗口和增量提交构建近实时体验,但原始 Whisper Encoder 看的是完整窗口,没有原生 cache-aware 状态协议。严格实时系统还要处理右看、重复计算、partial 回滚和端点检测,因此“能包装成流式接口”与“模型原生为流式训练”应分开描述。

七、模型尺寸、large-v3 与 Turbo

经典 Whisper 系列保持 Encoder 与 Decoder 等宽、等深,主要通过增加隐藏维度和 Transformer 层数扩展容量。下表中的层数写作“Encoder / Decoder”。

模型隐藏维度注意力头层数参数量
tiny38464 / 439M
base51286 / 674M
small7681212 / 12244M
medium10241624 / 24769M
large12802032 / 321.55B

这些数字描述模型容量,不直接等于某台机器上的速度。官方仓库给出的显存和相对速度也附带具体硬件与推理条件,部署时仍应在自己的音频长度、语言、beam、精度和批量设置下测量。Whisper 官方模型列表

版本主要结构变化没有改变的部分
Whisper large-v2原始 large 系列的 80-bin Log-Mel 与深 Encoder–Decoder30 秒窗口、AED、自回归输出
Whisper large-v3输入从 80 增至 128 Mel bins;新增粤语语言 Token,并使用扩展后的多语数据训练Encoder–Decoder Transformer 范式
large-v3-turbo保留 large-v3 Encoder,将 Decoder 从 32 层裁到 4 层并继续训练;约 809M 参数逐 token 自回归、30 秒窗口和特殊 Token 接口

Turbo 的思路很直接:既然每个音频窗口只运行一次 Encoder,而 Decoder 要为每个输出 token 运行一次,就优先缩短 Decoder。它减少逐 token 成本,但没有把 Whisper 变成 CTC 或 Paraformer 式并行输出。OpenAI Whisper Turbo 发布说明

速度倍率必须带运行条件

不同实现可能使用 PyTorch、CTranslate2、TensorRT、量化、不同 beam 和 batch。只凭模型名比较“快几倍”容易把结构收益与推理引擎优化混在一起。

八、Whisper、CTC 与 Paraformer 的结构差异

比较轴WhisperCTCParaformer
输出方式自回归逐 token帧级全并行,再合并 blank/重复预测长度后 token 级整句并行
文本依赖强左侧历史给定 Encoder 后较弱双向 Decoder 建模整句
任务控制语言、翻译、时间戳 Token通常由独立头或外部流程完成以 ASR 并行输出为主
长音频30 秒顺序滑窗或第三方分段由 Encoder 上下文与解码实现决定通常配合 VAD 分段或专门在线模型
主要优势多语、多任务、跨域稳健简单、快速、易对齐速度与输出上下文折中
主要风险自回归延迟、重复和幻觉语言建模弱长度与候选错误传播

不存在仅凭架构名称就能宣布的全局赢家。离线多语与翻译重视 Decoder 的条件生成能力;端侧和高并发更重视并行输出;严格实时还需要有限右看和状态缓存,而这不是三列中任一 Decoder 名称单独决定的。

九、Whisper 的证据边界与失效模式

大规模弱监督带来的是稳健性,不是绝对无误

Whisper 论文的主要证据是跨多个数据集的零样本表现,而不是在单一干净基准上始终领先。网页字幕和弱监督数据覆盖广,也包含错位、缺失和机器生成字幕;团队通过过滤和去重降低问题,但训练目标仍会继承数据噪声。

时间戳是生成结果,不是精确声学对齐保证

时间 token 与文字一起由 Decoder 生成,适合片段级字幕。若业务需要稳定字级或词级时间戳,通常还需要 forced alignment、专门对齐模型或后处理验证。

语言先验可能覆盖声学证据

静音、音乐、被截断音频、极端噪声和错误前文提示都可能诱发重复或无依据文字。生产系统应设置 VAD、no-speech 阈值、重复检测、置信度门限与最大压缩比等保护,并在自己的失败集上调参。

最低限度评测集

除了 WER/CER,加入静音、噪声、重口音、数字专名、代码切换、长停顿、音乐、重复语句和截断音频;同时记录实体忠实度、无声段输出、时间戳偏差、RTF 与显存。

边界结论

Whisper 的结构优势来自一个统一、可扩展的条件生成接口和多样化训练数据,而不是特殊的声学层。它很适合离线多语转写、翻译与字幕,但逐 token Decoder、30 秒窗口和生成式错误决定了它并非端侧、高并发或严格实时场景的默认最优解。

十、一手资料

  1. A. Radford et al. Robust Speech Recognition via Large-Scale Weak Supervision.
  2. OpenAI. Introducing Whisper.
  3. OpenAI. Whisper 官方代码仓库.
  4. OpenAI. Encoder–Decoder 官方实现.
  5. OpenAI. Whisper large-v3-turbo 发布说明.
  6. OpenAI. Whisper large-v3-turbo 官方组织模型卡.

评论加载中...