菜单

词级时间戳

相关源文件

词时间戳是 Whisper ASR 系统的一个关键功能,它为转录中的每个单词提供精确的时间信息。本文档介绍了 Whisper 如何通过动态时间规整和其他后处理技术,将模型的注意力模式与输出文本对齐来生成词级别的时间戳。

有关整个转录流程的信息,请参阅 转录流程。有关生成初始文本的解码系统的详细信息,请参阅 解码系统

词时间戳生成概述

Whisper 的词时间戳功能从模型的交叉注意力层提取时间信息,以确定每个单词在音频中何时被说出。该系统通过以下方式工作:

  1. 分析解码器的交叉注意力模式
  2. 找到注意力模式和文本标记之间的最佳对齐
  3. 将标记级对齐转换为词级别时间戳
  4. 后处理结果以处理标点符号和边缘情况

来源: whisper/timing.py163-242 whisper/timing.py279-388

核心组件

WordTiming 类

该系统使用 WordTiming 数据类来表示词时间戳信息

来源: whisper/timing.py154-161

关键函数

词时间戳生成依赖于两个主要函数:

功能目的
find_alignment()从模型中提取交叉注意力模式,并应用 DTW 将标记与音频帧对齐
add_word_timestamps()将词时间戳添加到转录片段中,并处理边缘情况
merge_punctuations()将标点符号与其相邻的单词合并

来源: whisper/timing.py163-242 whisper/timing.py245-277 whisper/timing.py279-388

对齐算法

对齐算法是词时间戳系统的核心。它提取和处理模型的交叉注意力模式,以确定每个单词何时被说出。

来源: whisper/timing.py163-242

交叉注意力提取

该系统从模型中最适合对齐的特定层和头部提取交叉注意力权重。这些“对齐头部”在模型中是预先确定的,并且倾向于专注于将标记与相应的音频段对齐。

来源: whisper/timing.py185-207

动态时间规整

动态时间规整(DTW)是用于查找注意力模式和文本标记之间最佳对齐的关键算法。该系统包含 CPU 和 CUDA 加速的实现以提高性能。

来源: whisper/timing.py57-151 whisper/triton_ops.py13-40

中值滤波

系统在对齐之前应用中值滤波来平滑注意力权重。与 DTW 一样,它也具有 CPU 和 CUDA 加速的实现。

来源: whisper/timing.py19-54 whisper/triton_ops.py43-109

将词时间戳添加到片段

add_word_timestamps() 函数将词级别的时间戳集成到转录片段中

来源: whisper/timing.py279-388

标点符号处理

该系统通过将标点符号与其相邻的单词合并来正确处理它们。

来源: whisper/timing.py245-277

边缘情况处理

该系统包含一些处理边缘情况的启发式方法。

  1. 句子边界的长单词:如果句子边界的单词超过中值单词时长的两倍,则会被截断。
  2. 片段边界对齐:片段中的第一个和最后一个单词会进行调整,以更好地与片段级别的时间戳对齐。
  3. 长停顿后的单词:显着停顿后的单词会得到特殊处理,以确保其时长合理。

来源: whisper/timing.py307-317 whisper/timing.py344-386

CUDA 加速

为了提高性能,词时间戳系统在可用时利用 GPU 加速。CUDA 实现使用 Triton 内核来并行化计算密集型操作。

  1. dtw_cuda:使用 Triton 加速的动态时间规整
  2. median_filter_cuda:使用 Triton 加速的中值滤波

如果 CUDA 不可用或加速失败,这两个函数都会优雅地回退到 CPU 实现。

来源: whisper/timing.py108-151 whisper/triton_ops.py1-109

词时间戳输出格式

最终结果是每个转录片段的词时间戳对象列表。

这些词时间戳被添加到转录结果的片段中,允许通过结果写入器将精确的时间信息包含在各种输出格式(VTT、SRT、JSON 等)中。

来源: whisper/timing.py332-338