🚀 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等。
🚀 快速開始
本模型可用於法語語音識別任務,能在多種庫中使用,下面將詳細介紹其使用方法。
✨ 主要特性
- 蒸餾優化:減少解碼器層數,降低內存使用和推理時間,同時保持性能。
- 減少幻覺:降低長文本轉錄中的幻覺風險。
- 推測解碼:可與原始模型結合,提高推理速度。
- 多格式支持:支持多種庫,方便在不同環境中使用。
📦 安裝指南
根據不同的使用場景,需要安裝不同的依賴庫,以下是一些常見的安裝命令:
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
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)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
feature_extractor=processor.feature_extractor,
tokenizer=processor.tokenizer,
torch_dtype=torch_dtype,
device=device,
max_new_tokens=128,
)
dataset = load_dataset("bofenghuang/asr-dummy", "fr", split="test")
sample = dataset[0]["audio"]
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
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)
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)
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,
)
dataset = load_dataset("bofenghuang/asr-dummy", "fr", split="test")
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
📚 詳細文檔
性能評估
我們在短文本和長文本轉錄上對模型進行了評估,並在分佈內和分佈外數據集上進行了測試,以全面分析其準確性、泛化性和魯棒性。
請注意,報告的WER是在將數字轉換為文本、去除標點符號(除了撇號和連字符)並將所有字符轉換為小寫後的結果。
所有公共數據集的評估結果可在此處找到。
短文本轉錄

由於缺乏現成的法語域外(OOD)和長文本測試集,我們使用了Zaion Lab的內部測試集進行評估。這些測試集包含來自呼叫中心對話的人工標註音頻轉錄對,其特點是背景噪音大且包含特定領域的術語。
長文本轉錄

長文本轉錄使用🤗 Hugging Face管道進行,以加快評估速度。音頻文件被分割成30秒的片段並並行處理。
訓練細節
我們收集了一個包含超過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團隊在整個項目中提供的及時支持。
🔧 技術細節
本模型是基於Whisper-Large-V3-French進行蒸餾得到的,通過減少解碼器層數和使用大規模數據集進行蒸餾,提高了模型的效率和性能。在推理過程中,可使用推測解碼技術,結合草稿模型和主模型,提高推理速度。
📄 許可證
本項目採用MIT許可證。
致謝