模型简介
模型特点
模型能力
使用案例
🚀 Whisper-Large-V3-French-Distil-Dec16
Whisper-Large-V3-French-Distil是Whisper-Large-V3-French的一系列蒸馏版本。通过将解码器层数从32层减少到16层、8层、4层或2层,并使用大规模数据集进行蒸馏,具体可参考这篇论文。
这些蒸馏变体在保持性能(取决于保留的层数)的同时,减少了内存使用和推理时间,并降低了幻觉风险,特别是在长文本转录中。此外,它们可以与原始的Whisper-Large-V3-French模型无缝结合进行推测性解码,与单独使用该模型相比,可提高推理速度并保证输出的一致性。
该模型已被转换为多种格式,便于在不同的库中使用,包括transformers、openai-whisper、fasterwhisper、whisper.cpp、candle、mlx等。
🚀 快速开始
本模型可用于自动语音识别任务,支持多种使用方式和库,下面将详细介绍其性能、使用方法、训练细节等内容。
✨ 主要特性
- 蒸馏优化:减少解码器层数,降低内存使用和推理时间,同时保持性能并减少幻觉风险。
- 多格式支持:转换为多种格式,可在transformers、openai-whisper等多个库中使用。
- 推测性解码:可与原始模型结合进行推测性解码,提高推理速度。
📦 安装指南
根据不同的使用库,安装方法有所不同,以下是部分库的安装示例:
OpenAI Whisper
pip install -U openai-whisper
Faster Whisper
pip install faster-whisper
Whisper.cpp
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
make
💻 使用示例
Hugging Face Pipeline
import torch
from datasets import load_dataset
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
# Load model
model_name_or_path = "bofenghuang/whisper-large-v3-french-distil-dec16"
processor = AutoProcessor.from_pretrained(model_name_or_path)
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_name_or_path,
torch_dtype=torch_dtype,
low_cpu_mem_usage=True,
)
model.to(device)
# Init pipeline
pipe = pipeline(
"automatic-speech-recognition",
model=model,
feature_extractor=processor.feature_extractor,
tokenizer=processor.tokenizer,
torch_dtype=torch_dtype,
device=device,
# chunk_length_s=30, # for long-form transcription
max_new_tokens=128,
)
# Example audio
dataset = load_dataset("bofenghuang/asr-dummy", "fr", split="test")
sample = dataset[0]["audio"]
# Run pipeline
result = pipe(sample)
print(result["text"])
Hugging Face Low-level APIs
import torch
from datasets import load_dataset
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
# Load model
model_name_or_path = "bofenghuang/whisper-large-v3-french-distil-dec16"
processor = AutoProcessor.from_pretrained(model_name_or_path)
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_name_or_path,
torch_dtype=torch_dtype,
low_cpu_mem_usage=True,
)
model.to(device)
# Example audio
dataset = load_dataset("bofenghuang/asr-dummy", "fr", split="test")
sample = dataset[0]["audio"]
# Extract feautres
input_features = processor(
sample["array"], sampling_rate=sample["sampling_rate"], return_tensors="pt"
).input_features
# Generate tokens
predicted_ids = model.generate(
input_features.to(dtype=torch_dtype).to(device), max_new_tokens=128
)
# Detokenize to text
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
print(transcription)
📚 详细文档
性能表现
我们在短文本和长文本转录上对模型进行了评估,并在分布内和分布外数据集上进行了测试,以全面分析其准确性、泛化性和鲁棒性。
请注意,报告的WER是在将数字转换为文本、去除标点符号(除了撇号和连字符)并将所有字符转换为小写后的结果。
所有公共数据集的评估结果可在此处找到。
短文本转录
由于缺乏现成的法语域外(OOD)和长文本测试集,我们使用了Zaion Lab的内部测试集进行评估。这些测试集包含了来自呼叫中心对话的人工标注音频转录对,其背景噪音明显且包含特定领域的术语。
长文本转录
长文本转录使用了🤗 Hugging Face管道进行快速评估。音频文件被分割成30秒的片段并并行处理。
使用方法
Hugging Face Pipeline
该模型可以轻松地与🤗 Hugging Face的pipeline
类一起用于音频转录。
对于长文本转录(超过30秒),可以通过传递chunk_length_s
参数来激活该过程。这种方法将音频分割成较小的片段,并行处理,然后通过找到最长公共序列在步幅处连接它们。虽然这种分块长文本方法与OpenAI的顺序算法相比可能会在性能上略有妥协,但它提供了9倍的推理速度。
Hugging Face Low-level APIs
也可以使用🤗 Hugging Face的低级API进行转录,这样可以对过程进行更多控制,示例如下:
推测性解码
推测性解码可以使用一个草稿模型来实现,该模型本质上是Whisper的蒸馏版本。这种方法保证了与单独使用主Whisper模型相同的输出,提供了2倍的推理速度,并且只增加了少量的内存开销。
由于蒸馏后的Whisper与原始模型具有相同的编码器,因此在推理过程中只需要加载其解码器,并且编码器输出在主模型和草稿模型之间共享。
使用Hugging Face管道进行推测性解码很简单 - 只需在生成配置中指定assistant_model
即可。
OpenAI Whisper
还可以采用OpenAI在其原始论文中概述的带有滑动窗口和温度回退的顺序长文本解码算法。
首先,安装openai-whisper包:
然后,下载转换后的模型:
现在,可以按照仓库中提供的使用说明转录音频文件:
Faster Whisper
Faster Whisper是OpenAI的Whisper模型和顺序长文本解码算法在CTranslate2格式下的重新实现。
与openai-whisper相比,它提供了高达4倍的推理速度,同时消耗更少的内存。此外,模型可以量化为int8,进一步提高其在CPU和GPU上的效率。
首先,安装faster-whisper包:
然后,下载转换为CTranslate2格式的模型:
现在,可以按照仓库中提供的使用说明转录音频文件:
Whisper.cpp
Whisper.cpp是OpenAI的Whisper模型的重新实现,用纯C/C++编写,没有任何依赖。它与各种后端和平台兼容。
此外,模型可以量化为4位或5位整数,进一步提高其效率。
首先,克隆并构建whisper.cpp仓库:
接下来,从Hugging Face Hub下载转换后的ggml权重:
现在,可以使用以下命令转录音频文件:
Candle
Candle-whisper是OpenAI的Whisper模型在candle格式下的重新实现 - 这是一个用Rust构建的轻量级ML框架。
首先,克隆candle仓库:
使用以下命令转录音频文件:
为了使用CUDA,在示例命令行中添加--features cuda
:
MLX
MLX-Whisper是OpenAI的Whisper模型在MLX格式下的重新实现 - 这是一个基于Apple硅的ML框架。它支持诸如惰性计算、统一内存管理等功能。
首先,克隆MLX Examples仓库:
接下来,安装依赖项:
下载原始OpenAI格式的pytorch检查点并将其转换为MLX格式(由于仓库已经很大且转换非常快,我们这里没有包含转换后的版本):
现在,可以使用以下命令转录音频:
训练细节
我们收集了一个包含超过2500小时法语语音识别数据的复合数据集,其中包括Common Voice 13.0、Multilingual LibriSpeech、Voxpopuli、Fleurs、Multilingual TEDx、MediaSpeech、African Accented French等数据集。
由于一些数据集(如MLS)只提供没有大小写和标点的文本,我们使用了🤗 Speechbox的自定义版本,使用bofenghuang/whisper-large-v2-cv11-french模型从有限的符号集中恢复大小写和标点。
然而,即使在这些数据集中,我们也观察到了一些质量问题。这些问题包括音频和转录在语言或内容上的不匹配、分割不佳的话语、脚本化语音中缺失单词等。我们构建了一个管道来过滤掉许多这些有问题的话语,旨在提高数据集的质量。因此,我们排除了超过10%的数据,并且在重新训练模型时,我们注意到幻觉现象显著减少。
在训练方面,我们使用了🤗 Distil-Whisper仓库中提供的脚本。模型训练在GENCI的Jean-Zay超级计算机上进行,我们感谢IDRIS团队在整个项目中提供的及时支持。
致谢
- OpenAI创建并开源了Whisper模型。
- 🤗 Hugging Face集成了Whisper模型,并在Transformers和Distil-Whisper仓库中提供了训练代码库。
- Genci为该项目慷慨提供了GPU计算时长。
📄 许可证
本项目采用MIT许可证。
信息表格
属性 | 详情 |
---|---|
模型类型 | 自动语音识别模型 |
训练数据 | 包含Common Voice 13.0、Multilingual LibriSpeech、Voxpopuli、Fleurs、Multilingual TEDx、MediaSpeech、African Accented French等超过2500小时的法语语音识别数据 |



