模型概述
模型特點
模型能力
使用案例
🚀 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 等 |



