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

本文主要是介绍深入了解 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:

pip install -U openai-whisper

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

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

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

# 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 模型转录音频文件:

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
Python 使用示例

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

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

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

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

import whispermodel = 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 项目。

这篇关于深入了解 Whisper 的架构、用法以及在语音识别领域的应用和性能特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058010

相关文章

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3