词时间戳是 Whisper ASR 系统的一个关键功能,它为转录中的每个单词提供精确的时间信息。本文档介绍了 Whisper 如何通过动态时间规整和其他后处理技术,将模型的注意力模式与输出文本对齐来生成词级别的时间戳。
有关整个转录流程的信息,请参阅 转录流程。有关生成初始文本的解码系统的详细信息,请参阅 解码系统。
Whisper 的词时间戳功能从模型的交叉注意力层提取时间信息,以确定每个单词在音频中何时被说出。该系统通过以下方式工作:
来源: whisper/timing.py163-242 whisper/timing.py279-388
该系统使用 WordTiming 数据类来表示词时间戳信息
词时间戳生成依赖于两个主要函数:
| 功能 | 目的 |
|---|---|
find_alignment() | 从模型中提取交叉注意力模式,并应用 DTW 将标记与音频帧对齐 |
add_word_timestamps() | 将词时间戳添加到转录片段中,并处理边缘情况 |
merge_punctuations() | 将标点符号与其相邻的单词合并 |
来源: whisper/timing.py163-242 whisper/timing.py245-277 whisper/timing.py279-388
对齐算法是词时间戳系统的核心。它提取和处理模型的交叉注意力模式,以确定每个单词何时被说出。
该系统从模型中最适合对齐的特定层和头部提取交叉注意力权重。这些“对齐头部”在模型中是预先确定的,并且倾向于专注于将标记与相应的音频段对齐。
动态时间规整(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.py307-317 whisper/timing.py344-386
为了提高性能,词时间戳系统在可用时利用 GPU 加速。CUDA 实现使用 Triton 内核来并行化计算密集型操作。
dtw_cuda:使用 Triton 加速的动态时间规整median_filter_cuda:使用 Triton 加速的中值滤波如果 CUDA 不可用或加速失败,这两个函数都会优雅地回退到 CPU 实现。
来源: whisper/timing.py108-151 whisper/triton_ops.py1-109
最终结果是每个转录片段的词时间戳对象列表。
这些词时间戳被添加到转录结果的片段中,允许通过结果写入器将精确的时间信息包含在各种输出格式(VTT、SRT、JSON 等)中。