菜单

解码系统

相关源文件

Whisper 解码系统将编码器生成的音频特征转换为有意义的文本转录或翻译。它处理语言检测、令牌生成策略,并应用各种约束来产生高质量的结果。本文介绍了从初始 logits 到最终文本输出的解码管道的核心组件。

有关词级时间戳的信息,请参阅词级时间戳

系统概览

解码系统围绕一套模块化、可互换的组件构建,这些组件协同工作以将模型输出转换为文本。核心协调器是DecodingTask类,它协调专用组件之间的交互。

来源:whisper/decoding.py508-513

配置选项

解码行为可以通过DecodingOptions数据类进行高度配置

参数类型默认描述
taskstr"transcribe""transcribe" (X→X) 或 "translate" (X→English)
languageOptional[str]None语言代码;如果为 None,则使用检测到的语言
temperature浮点数0.0控制采样中的随机性(0=确定性)
beam_sizeOptional[int]None用于束搜索的束数
patienceOptional[float]None束搜索耐心参数
length_penaltyOptional[float]None控制排序中的长度偏好
promptOptional[Union[str, List[int]]]None用于条件设置的先前上下文
prefixOptional[Union[str, List[int]]]None当前上下文的前缀
suppress_tokensOptional[Union[str, Iterable[int]]]"-1"生成期间要抑制的令牌
without_timestampsbool禁用时间戳生成
max_initial_timestampOptional[float]1.0约束第一个时间戳

来源:whisper/decoding.py80-115

解码过程

主要的解码工作流由DecodingTask.run()方法管理

来源:whisper/decoding.py713-789

语言检测

语言检测发生在主要解码过程之前

这决定了在初始序列中使用哪个语言令牌,除非在选项中提供了特定语言。

来源:whisper/decoding.py18-77 whisper/decoding.py666-678

解码策略

该系统支持两种主要的解码策略

1. 贪婪解码

使用于temperature=0或未指定束搜索时

来源:whisper/decoding.py272-298

2. 束搜索解码

使用于指定了beam_size

束搜索维护多个候选序列,跟踪它们的累积对数概率,并使用耐心参数来确定何时停止。

来源:whisper/decoding.py301-404

使用 KV 缓存进行推理

PyTorchInference类处理解码器的有效前向传播

KV 缓存通过以下方式显著提高了解码效率

  • 缓存先前解码步骤的键和值张量
  • 在后续步骤中仅处理最后一个令牌
  • 支持对束搜索进行缓存值的重排

来源:whisper/decoding.py144-177

Logit 过滤

Logit 过滤器按顺序应用以修改输出分布

主要过滤器

  1. SuppressBlank:防止在序列开头生成空白令牌
  2. SuppressTokens:抑制指定的令牌(例如,非语音令牌、特殊令牌)
  3. ApplyTimestampRules:强制执行时间戳生成规则
    • 使时间戳成对出现(EOT 之前除外)
    • 确保时间戳不递减
    • 防止零长度段
    • 控制初始时间戳值

来源:whisper/decoding.py407-570

序列排序

MaximumLikelihoodRanker从每个组中选择最佳候选序列

评分方法

  • 简单的长度归一化(除以序列长度)
  • Google 的神经机器翻译长度惩罚公式(当设置了length_penalty时)

来源:whisper/decoding.py190-213

公共 API

使用解码系统的主要入口点是decode()函数

此函数

  1. 创建一个DecodingTask实例,包含模型和选项
  2. 处理梅尔频谱图
  3. 返回包含以下内容的DecodingResult对象
    • 音频特征
    • 检测到的语言
    • 语言概率(如果已检测到)
    • 令牌 ID
    • 转录/翻译的文本
    • 平均对数概率
    • 非语音概率
    • 使用的温度
    • 压缩比

来源:whisper/decoding.py792-826

整合

解码系统将这些组件结合起来,将梅尔频谱图转换为文本

来源:whisper/decoding.py713-789

与转录管道的集成

解码系统融入了更广泛的 Whisper 架构

解码系统的输出通常会传递给单词时间戳生成系统进行进一步处理。

来源:whisper/decoding.py792-826

总结

Whisper 解码系统提供了一个灵活的框架,用于将音频特征转换为文本。其模块化设计支持不同的解码策略、具有 KV 缓存的高效推理以及通过 Logit 过滤实现的约束强制。该系统处理语音识别的挑战性方面,例如时间戳生成和多语言支持。