whisper语音识别模型


这个仓库是OpenAI的Whisper项目,它是一个通用的语音识别模型。下面从项目概述、模型架构、主要模块和类、安装与使用等方面进行详细介绍:

项目概述

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

模型架构

  • 整体架构:采用Transformer序列到序列模型,在各种语音处理任务上进行训练,包括多语言语音识别、语音翻译、口语语言识别和语音活动检测。这些任务通过一组特殊的标记(tokens)来联合表示,由解码器进行预测,使得单个模型可以替代传统语音处理管道中的多个阶段。
  • 具体组件
    • AudioEncoder:对音频的梅尔频谱图进行编码,将其转换为特征表示。
    • TextDecoder:根据编码器输出的音频特征和输入的文本标记,生成预测的文本标记序列。

主要模块和类

1. model.py

  • ModelDimensions:数据类,用于存储模型的各种维度信息,如音频特征维度、文本上下文长度等。
  • Whisper:核心模型类,包含编码器(AudioEncoder)和解码器(TextDecoder),提供了嵌入音频、计算对数概率、前向传播等方法。
  • AudioEncoder:对音频的梅尔频谱图进行编码,通过卷积层和自注意力块提取音频特征。
  • MultiHeadAttention:多头注意力机制,支持自注意力和交叉注意力,可使用缩放点积注意力(SDPA)进行加速。
  • ResidualAttentionBlock:残差注意力块,包含自注意力层、交叉注意力层(可选)和前馈神经网络。

2. decoding.py

  • Inference:推理接口,定义了计算对数概率、重新排列键值缓存和清理缓存的方法。
  • SequenceRanker:序列排序器接口,用于对候选序列进行排序。
  • MaximumLikelihoodRanker:最大似然排序器,根据对数概率和长度惩罚选择最佳序列。
  • TokenDecoder:标记解码器接口,定义了重置状态、更新序列和最终确定候选序列的方法。
  • SuppressTokens:对数概率过滤器,用于抑制某些标记的对数概率。

3. tokenizer.py

  • Tokenizer:分词器类,封装了tiktoken库,提供了对特殊标记的快速访问和编码解码方法。

4. triton_ops.py

  • dtw_kernel:动态时间规整(DTW)内核,使用Triton进行加速。

安装与使用

安装

可以使用以下命令下载并安装(或更新到)最新版本的Whisper:

pip install -U openai-whisper

或者从GitHub仓库安装:

pip install 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

使用

以下是一些命令行使用示例:

# 转录音频文件,使用turbo模型
whisper audio.flac audio.mp3 audio.wav --model turbo

# 转录非英语音频文件,指定语言
whisper japanese.wav --language Japanese

# 翻译语音为英语
whisper japanese.wav --language Japanese --task translate

可用模型

仓库提供了六种模型大小,其中四种有仅支持英语的版本,它们在速度和准确性之间进行了权衡。不同模型的参数数量、所需显存和相对速度如下: | Size | Parameters | English-only model | Multilingual model | Required VRAM | Relative speed | |:------:|:----------:|:------------------:|:------------------:|:-------------:|:--------------:| | tiny | 39 M | tiny.en | tiny | ~1 GB | ~10x | | base | 74 M | base.en | base | ~1 GB | ~7x | | small | 244 M | small.en | small | ~2 GB | ~4x | | medium | 769 M | medium.en | medium | ~5 GB | ~2x | | large | 1550 M | N/A | large | ~10 GB | 1x | | turbo | 809 M | N/A | turbo | ~6 GB | ~8x |

版本更新

仓库的CHANGELOG.md文件记录了版本更新信息,例如在v20231106版本中添加了large-v3模型。

Robust Speech Recognition via Large-Scale Weak Supervision

源码