OpenAI开源Whisper-large-v3语音识别模型

本文目录

  • whisper-large-v3模型介绍
    • whisper模型参数版本&&以及支持的语言
  • 手把手实操教你部署whisper-large-v3推理进行语音文字识别
    • 配置对应的环境
    • 加载whisper-large-v3的模型权重
    • 对英文语音-进行语音文字识别
    • 对edge-tts生成-普通话语音-语音文字识别
    • 对edge-tts生成-粤语口音-语音文字识别
    • 对edge-tts生成-陕西话口音-语音文字识别
    • 对ChatTTS生成-普通话语音-语音文字识别
  • 参加文档

whisper-large-v3模型介绍

Whisper 是由openai发布的一个预训练的自动语音识别(ASR)和语音翻译模型。它在 68 万小时的标记数据上进行了训练,Whisper 模型展现出了强大的泛化能力,能够在不需要微调的情况下适应许多数据集和领域。目前开源最新版本为whisper-large-v3。

Whisper large-v3 与之前的大模型在架构上相同,除了以下微小的差异:

  • 输入使用 128 个梅尔频率波段而不是 80 个
  • 增加了一个用于粤语的新语言标记

在训练数据量上,large-v3模型采用了100万小时的弱标签音频和400万小时的伪标签音频,后者是通过large-v2模型收集的。新模型在这些混合数据集上训练了2.0个周期,最终表现出比large-v2更优的性能。

whisper模型参数版本&&以及支持的语言

图片其中对应各个版本模型在huggingface网址上下载情况如下;图片

手把手实操教你部署whisper-large-v3推理进行语音文字识别

配置对应的环境

import torch
import transformers
import torchaudio
print("torch: ",torch.__version__)# torch:  2.1.2
print("transformers: ",transformers.__version__)#transformers:  4.41.2
print("torchaudio: ", torchaudio.__version__)#torchaudio:  2.1.2

加载whisper-large-v3的模型权重

import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset

device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v3"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
    model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
model

对应的whisper网络结构如下;图片可以看出,whisper 网络采用了 encoder-decoder 架构。

对英文语音-进行语音文字识别

这里是官方提供的语音识别例子,如下:

pipe = pipeline(
    "automatic-speech-recognition",
    model=model,
    tokenizer=processor.tokenizer,
    feature_extractor=processor.feature_extractor,
    max_new_tokens=128,
    chunk_length_s=30,
    batch_size=16,
    return_timestamps=True,
    torch_dtype=torch_dtype,
    device=device,
)

dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
print(sample)
result= pipe(sample)
print("whisper-large-v3 语音文字识别结果:\n", result["text"])

输出的效果:

{'path': '0d38672e0bbdbdc460af55b8bb84a15b2730db2819f2af64f9c777d4d586f2de', 'array': array([0.00238037, 0.0020752 , 0.00198364, ..., 0.00024414, 0.00048828,
       0.0005188 ]), 'sampling_rate': 16000}

图片

对edge-tts生成-普通话语音-语音文字识别

!edge-tts –voice zh-CN-YunyangNeural
–text “我们的人生不是只有成功和失败两个词,坚持和奋斗同样有意义。
接纳自己的不完美、肯定和认可自己,是我们这一生重要的课题。” –write-media test.mp3
生成的语音文件:

from IPython.display import Audio
waveform, sample_rate = torchaudio.load("test.mp3")
result = pipe({'array':waveform.numpy()[0],'sampling_rate':sample_rate})
print("whisper-large-v3 语音文字识别结果:\n", result["text"])
Audio(waveform, rate=sample_rate, autoplay=True)

输出的效果:图片

whisper-large-v3 语音文字识别结果:

我们的人生不是只有成功和失败两个词,坚持和奋斗同样有意义。接纳自己的不完美,肯定和认可自己,是我们这一生重要的课题。
可以看出能够轻松识别普通话的语音文本内容。

对edge-tts生成-粤语口音-语音文字识别
之前给大家介绍过4K Star! 这款开源edge-tts效果超过ChatTTS,支持粤语方言、陕西方言、台湾方言等语音合成,关键是还免费~, 下面我将利用edge-tts来生成对应的粤语口音,看whisper模型是否能够识别出对应的文字。

测试文本和对应的语音文件
!edge-tts –voice zh-HK-WanLungNeural
–text “我们的人生不是只有成功和失败两个词,坚持和奋斗同样有意义。
接纳自己的不完美、肯定和认可自己,是我们这一生重要的课题。” –write-media test.mp3
生成的语音文件:

进行语音识别
%%time
waveform, sample_rate = torchaudio.load(“test.mp3”)
result = pipe({‘array’:waveform.numpy()[0],’sampling_rate’:sample_rate})
print(“whisper-large-v3 语音文字识别结果:\n”, result[“text”])
Audio(waveform, rate=sample_rate, autoplay=True)
识别的效果:图片

whisper-large-v3 语音文字识别结果:
我们的人生不是只有成功和失败两个词,坚持和奋斗同样有意义。接纳自己的不完美,肯定和认可自己,是我们这一生重要的课题。
可以看出,whisper模型能够准确地识别出edge-tts生成-粤语口音对应的文字。

对edge-tts生成-陕西话口音-语音文字识别
!edge-tts –voice zh-CN-shaanxi-XiaoniNeural
–text “我们的人生不是只有成功和失败两个词,坚持和奋斗同样有意义。
接纳自己的不完美、肯定和认可自己,是我们这一生重要的课题。” –write-media test.mp3
生成的语音文件:

waveform, sample_rate = torchaudio.load(“test.mp3”)
result = pipe({‘array’:waveform.numpy()[0],’sampling_rate’:sample_rate})
print(“whisper-large-v3 语音文字识别结果:\n”, result[“text”])
Audio(waveform, rate=sample_rate, autoplay=True)
输出的效果:图片

whisper-large-v3 语音文字识别结果:
那么的人生,不似只有成功和失败两个词,坚持和奋斗,同样又一一。解那资绩的不完美,恳定和认可资绩,是那么这一生中央的课题。
可以看出对陕西话口音类的语音识别准确率较差,推测是缺少该部分的样本导致识别失败。

对ChatTTS生成-普通话语音-语音文字识别
利用ChatTTS生成测试文本语音
%%time
my_text=”””如是有一天,星空炸裂,乾坤倾覆,只剩下你一个人,虽无敌世间,但到头来却只能回忆,看红颜
白发如雪,魂归黄土,看友人倒在岁月中,沉睡墓地,到了那个时候,你便会有相应的心境了。
“””
params_infer_code = {‘prompt’:’[speed_2]’, ‘temperature’:.1,’top_P’:0.9, ‘top_K’:1, ‘spk_emb’ : speaker}
params_refine_text = {‘prompt’:’[oral_5][laugh_0][break_6]’}

wavs = chat.infer([my_text],
do_text_normalization=True,
params_refine_text=params_refine_text,
params_infer_code=params_infer_code)
finally_wavs = torch.tensor(np.concatenate(wavs,axis=-1))
Audio(finally_wavs, rate=24_000, autoplay=True)
生成的语音文件:

result = pipe({‘array’:finally_wavs.numpy()[0],’sampling_rate’:24_000})
result = pipe({‘array’:finally_wavs.numpy()[0],’sampling_rate’:24_000})
print(“whisper-large-v3 语音文字识别结果:\n”, result[“text”])
Audio(finally_wavs, rate=sample_rate, autoplay=True)
识别的文字:

whisper-large-v3 语音文字识别结果:
如是有一天呢星空炸裂乾坤倾覆只剩下你一个人虽无敌世间但到头来却只能回忆就看红颜白发如雪魂归黄土看有人倒在那个岁月中啊就是沉睡墓地就是到了那个时候你便会有相应的心境了
整体运行效果展示:图片

可以看出,ChatTTS在语音合成中添加了口语,比如‘啊’、‘呢’之类的词,大家可以听上面的”ChatTTS生成的语音”语音文件,whisper-large-v3 模型也能够准确的识别出对应的语气词。

参加文档
huggingface国内镜像: https://hf-mirror.com/openai/whisper-large-v3

作者:Jeebiz  创建时间:2024-06-19 10:03
最后编辑:Jeebiz  更新时间:2025-05-12 09:20