Whisper 解码系统将编码器生成的音频特征转换为有意义的文本转录或翻译。它处理语言检测、令牌生成策略,并应用各种约束来产生高质量的结果。本文介绍了从初始 logits 到最终文本输出的解码管道的核心组件。
有关词级时间戳的信息,请参阅词级时间戳。
解码系统围绕一套模块化、可互换的组件构建,这些组件协同工作以将模型输出转换为文本。核心协调器是DecodingTask类,它协调专用组件之间的交互。
解码行为可以通过DecodingOptions数据类进行高度配置
| 参数 | 类型 | 默认 | 描述 |
|---|---|---|---|
task | str | "transcribe" | "transcribe" (X→X) 或 "translate" (X→English) |
language | Optional[str] | None | 语言代码;如果为 None,则使用检测到的语言 |
temperature | 浮点数 | 0.0 | 控制采样中的随机性(0=确定性) |
beam_size | Optional[int] | None | 用于束搜索的束数 |
patience | Optional[float] | None | 束搜索耐心参数 |
length_penalty | Optional[float] | None | 控制排序中的长度偏好 |
prompt | Optional[Union[str, List[int]]] | None | 用于条件设置的先前上下文 |
prefix | Optional[Union[str, List[int]]] | None | 当前上下文的前缀 |
suppress_tokens | Optional[Union[str, Iterable[int]]] | "-1" | 生成期间要抑制的令牌 |
without_timestamps | bool | 否 | 禁用时间戳生成 |
max_initial_timestamp | Optional[float] | 1.0 | 约束第一个时间戳 |
主要的解码工作流由DecodingTask.run()方法管理
语言检测发生在主要解码过程之前
这决定了在初始序列中使用哪个语言令牌,除非在选项中提供了特定语言。
来源:whisper/decoding.py18-77 whisper/decoding.py666-678
该系统支持两种主要的解码策略
使用于temperature=0或未指定束搜索时
使用于指定了beam_size时
束搜索维护多个候选序列,跟踪它们的累积对数概率,并使用耐心参数来确定何时停止。
PyTorchInference类处理解码器的有效前向传播
KV 缓存通过以下方式显著提高了解码效率
Logit 过滤器按顺序应用以修改输出分布
MaximumLikelihoodRanker从每个组中选择最佳候选序列
评分方法
length_penalty时)使用解码系统的主要入口点是decode()函数
此函数
DecodingTask实例,包含模型和选项DecodingResult对象解码系统将这些组件结合起来,将梅尔频谱图转换为文本
解码系统融入了更广泛的 Whisper 架构
解码系统的输出通常会传递给单词时间戳生成系统进行进一步处理。
Whisper 解码系统提供了一个灵活的框架,用于将音频特征转换为文本。其模块化设计支持不同的解码策略、具有 KV 缓存的高效推理以及通过 Logit 过滤实现的约束强制。该系统处理语音识别的挑战性方面,例如时间戳生成和多语言支持。