Whisper

简介

Whisper 是一种自动语音识别 (ASR) 系统,经过 680,000 小时从网络收集的多语言和多任务监督数据的训练。我们表明,使用如此庞大且多样化的数据集可以提高对口音、背景噪音和技术语言的鲁棒性。此外,它还可以进行多种语言的转录,以及从这些语言翻译成英语。我们开源模型和推理代码,作为构建有用应用程序和进一步研究鲁棒语音处理的基础。

Whisper 架构是一种简单的端到端方法,以编码器-解码器 Transformer 的形式实现。输入音频被分成 30 秒的块,转换为对数梅尔频谱图,然后传递到编码器。解码器经过训练来预测相应的文本标题,并与特殊标记混合在一起,指导单个模型执行语言识别、短语级时间戳、多语言语音转录和英语语音翻译等任务。

其他现有方法经常使用更小、更紧密配对的音频文本训练数据集,1 2 ,3或使用广泛但无监督的音频预训练。4 ,5 ,6 由于 Whisper 是在大型且多样化的数据集上进行训练的,并且没有针对任何特定数据集进行微调,因此它无法击败专门研究 LibriSpeech 性能的模型,而 LibriSpeech 性能是语音识别领域著名的竞争基准。然而,当我们在许多不同的数据集上测量 Whisper 的零样本性能时,我们发现它更加稳健,并且比这些模型的错误少了 50%。

Whisper 的音频数据集大约有三分之一是非英语的,它交替地被赋予以原始语言转录或翻译成英语的任务。我们发现这种方法在学习语音到文本翻译方面特别有效,并且在 CoVoST2 到英语零样本翻译上优于有监督的 SOTA。

https://openai.com/research/whisper
https://github.com/openai/whisper

快速开始

Whisper 是一种通用语音识别模型。它是在大量不同音频数据集上进行训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。

Transformer 序列到序列模型针对各种语音处理任务进行训练,包括多语言语音识别、语音翻译、口语识别和语音活动检测。这些任务联合表示为由解码器预测的标记序列,允许单个模型取代传统语音处理管道的许多阶段。多任务训练格式使用一组特殊标记作为任务说明符或分类目标。

我们使用 Python 3.9.9 和 PyTorch 1.10.1 来训练和测试我们的模型,但代码库预计与 Python 3.8-3.11 和最新的 PyTorch 版本兼容。该代码库还依赖于一些 Python 包,最引人注目的是OpenAI 的 tiktoken 的快速标记器实现。您可以使用以下命令下载并安装(或更新到)最新版本的 Whisper:

pip install -U openai-whisper

或者,以下命令将从该存储库中提取并安装最新的提交及其 Python 依赖项:

pip install git+https://github.com/openai/whisper.git

要将软件包更新到此存储库的最新版本,请运行:

pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

它还需要在您的系统上安装 ffmpeg 命令行工具,大多数包管理器都可以提供该工具:

# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg

# on Arch Linux
sudo pacman -S ffmpeg

# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg

# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg

# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg

您可能还需要安装 Rust,以防 tiktoken 未为您的平台提供预构建的轮子。如果您在执行上述pip install 命令时遇到安装错误,请按照入门页面安装 Rust 开发环境。此外,您可能还需要配置 PATH 环境变量,例如 export PATH="$HOME/.cargo/bin:$PATH"。如果安装失败并出现 “No module named ‘setuptools_rust’” 的错误,您需要安装 setuptools_rust,例如通过运行以下命令:

pip install setuptools-rust

可用型号和语言

有五种模型大小,其中四种只有英文版本,提供速度和准确性的权衡。以下是可用模型的名称及其相对于大型模型的近似内存要求和推理速度;实际速度可能因许多因素而异,包括可用的硬件。

Size Parameters English-only model Multilingual model Required VRAM Relative speed
tiny 39 M tiny.en tiny ~1 GB ~32x
base 74 M base.en base ~1 GB ~16x
small 244 M small.en small ~2 GB ~6x
medium 769 M medium.en medium ~5 GB ~2x
large 1550 M N/A large ~10 GB 1x

对于只使用英语的应用程序来说,.en模型往往表现得更好,特别是对于tiny.enbase.en模型。我们发现对于small.enmedium.en模型,这种差异变得不那么显著。

Whisper 的性能会因语言而异。下图展示了大型 v3 和大型 v2 模型在不同语言的性能,使用了 WERs(词错误率)或 CER(字符错误率,以斜体显示),这些错误率在 Common Voice 15 和 Fleurs 数据集上进行了评估。其他模型和数据集的附加 WER/CER 指标可在本文附录 D.1、D.2 和 D.4 中找到,以及附录 D.3 中的 BLEU(双语评估替代品)分数用于翻译。

命令行使用

以下命令将使用medium模型转录音频文件中的语音:

whisper audio.flac audio.mp3 audio.wav --model medium

默认设置(选择模型small)非常适合转录英语。要转录包含非英语语音的音频文件,您可以使用以下选项指定语言–language:

whisper japanese.wav --language Japanese

添加–task translate会将演讲翻译成英语:

whisper japanese.wav --language Japanese --task translate

运行以下命令查看所有可用选项:

whisper --help

有关所有可用语言的列表,请参阅tokenizer.py 。

Python 使用

也可以在 Python 中执行转录:

import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])

在内部,该 transcribe() 方法读取整个文件并使用 30 秒滑动窗口处理音频,对每个窗口执行自回归序列到序列预测。

whisper.detect_language() 下面是和的示例用法 whisper.decode(),它提供了对模型的较低级别访问。

import whisper

model = whisper.load_model("base")

# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)

# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)

# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")

# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)

# print the recognized text
print(result.text)
作者:Jeebiz  创建时间:2023-12-28 00:03
最后编辑:Jeebiz  更新时间:2023-12-28 16:43