深入了解 Whisper 的架构、用法以及在语音识别领域的应用和性能特征

Whisper: 通用语音识别模型详解

概述

Whisper 是一个基于 Transformer 序列到序列模型的通用语音识别系统,经过训练可以执行多语种语音识别、语音翻译和语言识别任务。本文将深入介绍 Whisper 的工作原理、设置方法、可用模型及其性能评估。

方法

Whisper 使用 Transformer 序列到序列模型,同时支持多语种语音识别、语音翻译、语种识别和语音活动检测等任务。这些任务被联合表示为解码器需要预测的一系列标记,使得单个模型可以替代传统语音处理流水线的多个阶段。多任务训练格式使用一组特殊的标记作为任务标识符或分类目标。

设置

我们使用 Python 3.9.9 和 PyTorch 1.10.1 对模型进行训练和测试,但代码库预计与 Python 3.8-3.11 和最近的 PyTorch 版本兼容。依赖于一些 Python 包,尤其是 OpenAI 的 tiktoken 用于快速的分词器实现。您可以通过以下命令下载安装或更新到最新版本的 Whisper:

bash 复制代码
pip install -U openai-whisper

如果需要安装到最新的提交版本,请使用以下命令:

bash 复制代码
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

此外,Whisper 还依赖于命令行工具 ffmpeg,您可以通过以下方式在不同平台上安装:

bash 复制代码
# Ubuntu 或 Debian
sudo apt update && sudo apt install ffmpeg

# Arch Linux
sudo pacman -S ffmpeg

# MacOS 使用 Homebrew
brew install ffmpeg

# Windows 使用 Chocolatey
choco install ffmpeg

# Windows 使用 Scoop
scoop install ffmpeg

在某些情况下,您可能需要安装 Rust,以便于 tiktoken 为您的平台提供预构建的轮子。如果在安装过程中出现错误,请参考 Rust 开发环境的安装指南。

可用模型与语言

Whisper 提供了五种模型尺寸,其中四种是仅英文的版本,提供了速度和准确性之间的平衡。以下是可用模型的名称及其对应的内存需求和相对于大型模型的推理速度:

  • tiny:39M 参数,约需 1GB VRAM,推理速度约为大型模型的32倍。
  • base:74M 参数,约需 1GB VRAM,推理速度约为大型模型的16倍。
  • small:244M 参数,约需 2GB VRAM,推理速度约为大型模型的6倍。
  • medium:769M 参数,约需 5GB VRAM,推理速度约为大型模型的2倍。
  • large:1550M 参数,约需 10GB VRAM,基准速度。

对于英文应用,特别是对于 tiny.en 和 base.en 模型,性能表现更优。然而,对于 small.en 和 medium.en 模型,性能差距较小。

Whisper 的性能

Whisper 的性能因语言而异。下图显示了在 Common Voice 15 和 Fleurs 数据集上评估的大型-v3 和大型-v2 模型的词错误率(WER)或字符错误率(以斜体显示)。其他模型和数据集的评估指标可以在论文的附录中找到。

命令行用法

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

bash 复制代码
whisper audio.flac audio.mp3 audio.wav --model medium

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

bash 复制代码
whisper japanese.wav --language Japanese

添加 --task translate 将语音翻译为英文:

bash 复制代码
whisper japanese.wav --language Japanese --task translate

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

bash 复制代码
whisper --help
Python 使用示例

您也可以在 Python 中执行转录:

python 复制代码
import whisper

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

内部地,transcribe() 方法会读取整个文件,并在每个 30 秒的滑动窗口上执行自回归序列到序列预测。

使用 whisper.detect_language() 和 whisper.decode() 提供了更低级别的访问方式,可以访问模型的功能。

python 复制代码
import whisper

model = whisper.load_model("base")

# 加载音频并填充/修剪以适合 30 秒
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)

# 生成对数梅尔频谱图并移动到与模型相同的设备
mel = whisper.log_mel_spectrogram(audio).to(model.device)

# 检测语音的语种
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")

# 解码音频
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)

# 打印识别的文本
print(result.text)

通过上述介绍,您可以深入了解 Whisper 的架构、用法以及在语音识别领域的应用和性能特征。这些信息将帮助您更好地理解和应用 Whisper 项目。

相关推荐
薛定谔的猫19825 分钟前
二十一、基于 Hugging Face Transformers 实现中文情感分析情感分析
人工智能·自然语言处理·大模型 训练 调优
发哥来了12 分钟前
《AI视频生成技术原理剖析及金管道·图生视频的应用实践》
人工智能
数智联AI团队24 分钟前
AI搜索引领开源大模型新浪潮,技术创新重塑信息检索未来格局
人工智能·开源
不懒不懒37 分钟前
【线性 VS 逻辑回归:一篇讲透两种核心回归模型】
人工智能·机器学习
冰西瓜6001 小时前
从项目入手机器学习——(四)特征工程(简单特征探索)
人工智能·机器学习
Ryan老房1 小时前
未来已来-AI标注工具的下一个10年
人工智能·yolo·目标检测·ai
丝斯20112 小时前
AI学习笔记整理(66)——多模态大模型MOE-LLAVA
人工智能·笔记·学习
小鸡吃米…2 小时前
机器学习中的代价函数
人工智能·python·机器学习
chatexcel3 小时前
元空AI+Clawdbot:7×24 AI办公智能体新形态详解(长期上下文/自动化任务/工具粘合)
运维·人工智能·自动化
bylander3 小时前
【AI学习】TM Forum《Autonomous Networks Implementation Guide》快速理解
人工智能·学习·智能体·自动驾驶网络