菜单

概述

相关源文件

本页面全面介绍OpenAI开发的自动语音识别(ASR)系统Whisper。Whisper是一款基于Transformer的模型,旨在提供强大的多语言语音识别和翻译功能。本文概述了该系统的目的、架构、功能和主要组成部分。

有关具体的用法说明,请参阅入门指南

什么是Whisper?

Whisper是一个通用语音识别系统,在包含68万小时多样化、大规模音频样本的数据集上进行了训练。该系统设计为一个多任务模型,能够执行多项语音处理任务:

  • 多语言语音识别 - 将音频转录为原始语音语言
  • 语音翻译 - 将外语语音翻译成英语文本
  • 语言识别 - 检测正在使用的语言
  • 语音活动检测 - 判断音频中何时出现语音

该模型在口音、背景噪声和技术性语言方面表现出鲁棒性,适合广泛的实际应用。

来源: README.md8-14 model-card.md1-19

系统架构

Whisper采用基于Transformer的序列到序列架构,围绕多个关键组件组织,这些组件协同工作以将语音音频转换为文本。

主要组件包括:

  1. 音频处理 (whisper/audio.py):将音频输入转换为对数梅尔谱图,作为模型输入。
  2. 模型架构 (whisper/model.py):定义了Transformer的编码器-解码器架构。
    • AudioEncoder:将梅尔谱图处理成音频特征。
    • TextDecoder:根据音频特征生成文本。
  3. 分词 (whisper/tokenizer.py):处理文本和词元ID之间的转换。
  4. 解码系统 (whisper/decoding.py):实现了从模型logits生成文本的各种策略。
  5. 单词时间戳生成 (whisper/timing.py):提供单词级时间戳。
  6. 转录API (whisper/transcribe.py):提供转录任务的高级接口。

该系统使用特殊词元作为任务指定符或分类目标,使单个模型能够处理多项语音处理任务。

来源: README.md11-15 model-card.md9-11

模型变体

Whisper提供多种模型尺寸,具有不同的性能和资源权衡。

大小参数仅限英语模型多语言模型所需显存相对速度
tiny39Mtiny.entiny~1 GB~10x
base74Mbase.enbase~1 GB~7x
small244Msmall.ensmall~2 GB~4x
medium769Mmedium.enmedium~5 GB~2x
large1550M不适用large~10 GB1x
turbo809M不适用turbo~6 GB~8x

带有.en后缀的模型针对仅限英语的应用程序进行了优化,并且往往表现更好,尤其是在较小的模型上。而turbo模型是large-v3的优化版本,可在精度损失最小的情况下提供更快的转录速度。

这些模型可以通过API中的load_model()函数加载。

来源: README.md58-74 model-card.md10-22

核心工作流程

使用Whisper的典型工作流程包括以下关键步骤:

1. 模型加载

第一步是使用load_model()函数加载预训练的Whisper模型。

2. 音频处理

使用whisper/audio.py中的函数处理音频。

  • load_audio():加载音频并重采样至16 kHz。
  • pad_or_trim():确保音频长度正确。
  • log_mel_spectrogram():将音频转换为对数梅尔谱图格式。

3. 转录

主要的转录工作流程使用以下任一方法:

  • 高级APItranscribe()方法,负责整个流程。
  • 低级API:单独的函数,如detect_language()decode()

高级API以30秒为窗口处理音频,对每个窗口进行自回归序列到序列预测。

4. 结果格式化

可以使用whisper/utils.py中的ResultWriter类,以各种格式(VTT、SRT、TXT、TSV、JSON)格式化转录结果。

来源: README.md104-141

性能与局限性

虽然Whisper在许多任务上表现出强大的性能,但它也有一些已知的局限性:

  • 幻觉:模型有时会生成音频中不存在的文本。
  • 重复:序列到序列架构可能产生重复的文本。
  • 不均衡的语言表现:准确性因语言而异,在训练数据较多的语言中表现更好。
  • 差异化性能:在不同的口音、方言和人口群体之间存在准确性差异。

有关Whisper在不同语言和任务上性能的详细评估,请参阅研究论文

来源: model-card.md56-65

本概述为理解Whisper系统提供了基础。有关详细的使用说明,请参阅入门指南以及后续的架构和实现页面。