模型简介
模型特点
模型能力
使用案例
🚀 Whisper-Large-V3-French-Distil-Dec8
Whisper-Large-V3-French-Distil-Dec8 是 Whisper-Large-V3-French 的一系列蒸馏版本。它通过将解码器层数从 32 层减少到 16、8、4 或 2 层,并使用大规模数据集进行蒸馏得到,具体可参考这篇 论文。该模型能减少内存使用和推理时间,同时保持性能(基于保留的层数),并降低幻觉风险,特别是在长文本转录中。此外,它还可以与原始的 Whisper-Large-V3-French 模型无缝结合进行推测解码,与单独使用该模型相比,可提高推理速度并保持输出的一致性。该模型已转换为多种格式,便于在不同库中使用,包括 transformers、openai-whisper、fasterwhisper、whisper.cpp、candle、mlx 等。
🚀 快速开始
本模型可用于自动语音识别任务,以下将详细介绍其性能评估、使用方法、训练细节等内容。
✨ 主要特性
- 蒸馏优化:减少解码器层数,降低内存使用和推理时间,同时保持性能并减少幻觉风险。
- 多格式支持:转换为多种格式,可在不同库中使用。
- 推测解码:可与原始模型结合进行推测解码,提高推理速度。
📦 安装指南
根据不同的使用场景,需要安装不同的依赖库,以下是部分使用场景的安装命令:
OpenAI Whisper
pip install -U openai-whisper
Faster Whisper
pip install faster-whisper
💻 使用示例
基础用法
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-dec8"
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"])
高级用法
推测解码
import torch
from datasets import load_dataset
from transformers import (
AutoModelForCausalLM,
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"
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)
# Load draft model
assistant_model_name_or_path = "bofenghuang/whisper-large-v3-french-distil-dec2"
assistant_model = AutoModelForCausalLM.from_pretrained(
assistant_model_name_or_path,
torch_dtype=torch_dtype,
low_cpu_mem_usage=True,
)
assistant_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,
generate_kwargs={"assistant_model": assistant_model},
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"])
📚 详细文档
性能评估
我们在短文本和长文本转录上对模型进行了评估,并在分布内和分布外数据集上进行了测试,以全面分析其准确性、泛化性和鲁棒性。报告的 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 在原始 论文 中概述的带有滑动窗口和温度回退的顺序长文本解码算法。
Faster Whisper
Faster Whisper 是 OpenAI 的 Whisper 模型和顺序长文本解码算法在 CTranslate2 格式中的重新实现。与 openai-whisper 相比,它提供了高达 4 倍的推理速度,同时消耗更少的内存。此外,模型可以量化为 int8,进一步提高其在 CPU 和 GPU 上的效率。
Whisper.cpp
Whisper.cpp 是 OpenAI 的 Whisper 模型的重新实现,用纯 C/C++ 编写,没有任何依赖。它与各种后端和平台兼容。此外,模型可以量化为 4 位或 5 位整数,进一步提高其效率。
Candle
Candle-whisper 是 OpenAI 的 Whisper 模型在 candle 格式中的重新实现,candle 是一个用 Rust 构建的轻量级 ML 框架。
MLX
MLX-Whisper 是 OpenAI 的 Whisper 模型在 MLX 格式中的重新实现,MLX 是一个基于 Apple silicon 的 ML 框架,支持延迟计算、统一内存管理等功能。
训练细节
我们收集了一个包含超过 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 在 Transformers 和 Distil-Whisper 仓库中集成了 Whisper 模型并提供了训练代码库。
- Genci 为该项目慷慨提供了 GPU 时长。
🔧 技术细节
本模型是 Whisper-Large-V3-French 的蒸馏版本,通过减少解码器层数和使用大规模数据集进行蒸馏得到。蒸馏过程中,保留了模型的编码器,只对解码器进行了修改。在训练过程中,使用了多种法语语音识别数据集,并对数据进行了预处理和过滤,以提高数据集的质量。在评估过程中,使用了 WER 指标来评估模型的性能,并在短文本和长文本转录上进行了测试。
📄 许可证
本项目采用 MIT 许可证。
属性 | 详情 |
---|---|
模型类型 | 自动语音识别模型 |
训练数据 | 包含超过 2500 小时法语语音识别数据的复合数据集,包括 Common Voice 13.0、Multilingual LibriSpeech、Voxpopuli、Fleurs、Multilingual TEDx、MediaSpeech、African Accented French 等 |



