模型概述
模型特點
模型能力
使用案例
🚀 自動語音識別模型Whisper-large-v3
本項目基於OpenAI的Whisper-large-v3模型,是用於自動語音識別(ASR)和語音翻譯的先進模型。它在多種語言上表現出色,能有效處理不同口音、背景噪音和專業語言,為開發者和研究者提供了強大的語音處理解決方案。
🚀 快速開始
模型支持語言
本模型支持眾多語言,包括但不限於英語(en)、中文(zh)、德語(de)、西班牙語(es)、俄語(ru)等。
模型使用示例
可通過以下鏈接體驗模型示例:
查看模型集合
查看我們上傳的所有文本轉語音(TTS)模型,請訪問 我們的集合。
學習微調TTS模型
學習如何微調TTS模型,請閱讀 我們的指南。
Unsloth Dynamic 2.0
Unsloth Dynamic 2.0 實現了卓越的準確性,性能優於其他領先的量化模型。
模型支持列表
模型名稱 | 免費筆記本鏈接 | 性能提升 | 內存使用降低 |
---|---|---|---|
Orpheus-TTS | 點擊在Colab上開始 | 快1.5倍 | 減少58% |
Whisper Large V3 | 點擊在Colab上開始 | 快1.5倍 | 減少50% |
Qwen3 (14B) | 點擊在Colab上開始 | 快2倍 | 減少70% |
Llama 3.2 Vision (11B) | 點擊在Colab上開始 | 快1.8倍 | 減少50% |
✨ 主要特性
- 先進的語音識別能力:Whisper是用於自動語音識別(ASR)和語音翻譯的先進模型,在超過500萬小時的標註數據上進行訓練,在零樣本設置下對許多數據集和領域具有很強的泛化能力。
- 多語言支持:支持眾多語言,能實現多種語言到英語的零樣本翻譯。
- 性能提升:與Whisper large-v2相比,large-v3模型在多種語言上表現出更好的性能,錯誤率降低10% - 20%。
- 靈活的使用方式:可通過
pipeline
類處理任意長度的音頻,支持多種解碼策略,可指定語言、任務和返回時間戳等。 - 速度和內存優化:提供多種速度和內存優化方法,如分塊長音頻處理、
torch compile
、Flash Attention 2和Torch Scale-Product-Attention(SDPA)等。
📦 安裝指南
要運行Whisper large-v3模型,首先需要安裝Transformers
庫。以下示例中,還會安裝Datasets
以從Hugging Face Hub加載玩具音頻數據集,以及Accelerate
以減少模型加載時間:
pip install --upgrade pip
pip install --upgrade transformers datasets[audio] accelerate
💻 使用示例
基礎用法
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)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
轉錄本地音頻文件
result = pipe("audio.mp3")
並行轉錄多個音頻文件
result = pipe(["audio_1.mp3", "audio_2.mp3"], batch_size=2)
啟用解碼策略
generate_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # zlib壓縮比閾值(在令牌空間中)
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
result = pipe(sample, generate_kwargs=generate_kwargs)
指定源音頻語言
result = pipe(sample, generate_kwargs={"language": "english"})
執行語音翻譯任務
result = pipe(sample, generate_kwargs={"task": "translate"})
返回句子級時間戳
result = pipe(sample, return_timestamps=True)
print(result["chunks"])
返回單詞級時間戳
result = pipe(sample, return_timestamps="word")
print(result["chunks"])
組合使用參數
result = pipe(sample, return_timestamps=True, generate_kwargs={"language": "french", "task": "translate"})
print(result["chunks"])
直接使用模型 + 處理器API
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor
from datasets import Audio, 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
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
dataset = dataset.cast_column("audio", Audio(processor.feature_extractor.sampling_rate))
sample = dataset[0]["audio"]
inputs = processor(
sample["array"],
sampling_rate=sample["sampling_rate"],
return_tensors="pt",
truncation=False,
padding="longest",
return_attention_mask=True,
)
inputs = inputs.to(device, dtype=torch_dtype)
gen_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # zlib壓縮比閾值(在令牌空間中)
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
pred_ids = model.generate(**inputs, **gen_kwargs)
pred_text = processor.batch_decode(pred_ids, skip_special_tokens=True, decode_with_timestamps=False)
print(pred_text)
📚 詳細文檔
模型細節
Whisper是基於Transformer的編碼器 - 解碼器模型,也稱為序列到序列模型。有英語專用和多語言兩種類型。英語專用模型針對英語語音識別任務進行訓練,多語言模型同時針對多語言語音識別和語音翻譯進行訓練。
Whisper模型有五種不同大小的配置,最小的四種有英語專用和多語言版本,最大的檢查點僅為多語言版本。所有十個預訓練檢查點都可在 Hugging Face Hub 上找到。具體如下:
大小 | 參數 | 英語專用 | 多語言 |
---|---|---|---|
tiny | 39 M | 鏈接 | 鏈接 |
base | 74 M | 鏈接 | 鏈接 |
small | 244 M | 鏈接 | 鏈接 |
medium | 769 M | 鏈接 | 鏈接 |
large | 1550 M | x | 鏈接 |
large-v2 | 1550 M | x | 鏈接 |
large-v3 | 1550 M | x | 鏈接 |
微調指南
預訓練的Whisper模型對不同數據集和領域具有很強的泛化能力,但通過微調可以進一步提高其在某些語言和任務上的預測能力。博客文章 使用Transformers微調Whisper 提供了使用最少5小時標註數據微調Whisper模型的詳細步驟。
評估使用說明
- 目標用戶:這些模型的主要目標用戶是研究當前模型的魯棒性、泛化能力、性能、偏差和限制的AI研究人員。不過,Whisper作為一種ASR解決方案對開發者也很有用,特別是對於英語語音識別。
- 使用建議:模型主要在ASR和語音翻譯到英語的任務上進行訓練和評估,在約10種語言上顯示出較強的ASR結果。在將模型部署到特定上下文和領域之前,強烈建議用戶進行充分的評估。
- 使用警告:
- 請勿在未經個人同意的情況下使用Whisper模型轉錄其錄音,也不要將這些模型用於任何主觀分類。
- 不建議在高風險領域(如決策場景)使用,因為準確性的缺陷可能導致結果出現明顯缺陷。模型旨在轉錄和翻譯語音,將其用於分類不僅未經過評估,而且不合適,特別是用於推斷人類屬性。
訓練數據
large-v3檢查點在100萬小時的弱標註音頻和400萬小時使用Whisper large-v2收集的偽標註音頻上進行訓練。如 隨附論文 所述,特定語言的轉錄性能與該語言的訓練數據量直接相關。
性能和侷限性
- 優點:與許多現有的ASR系統相比,模型對口音、背景噪音、專業語言具有更強的魯棒性,能實現多種語言到英語的零樣本翻譯,語音識別和翻譯的準確性接近當前先進水平。
- 缺點:
- 幻覺問題:由於模型在大規模噪聲數據上進行弱監督訓練,預測結果可能包含音頻輸入中實際未說出的文本(即幻覺)。
- 語言性能不均:模型在不同語言上的表現不均,在資源較少和/或可發現性較低的語言或訓練數據較少的語言上準確性較低。
- 口音和方言差異:在特定語言的不同口音和方言上表現不同,可能導致不同性別、種族、年齡或其他人口統計標準的說話者的單詞錯誤率較高。
- 重複文本問題:模型的序列到序列架構容易生成重複文本,雖然可以通過束搜索和溫度調度在一定程度上緩解,但無法完全解決。
更廣泛的影響
- 積極影響:Whisper模型的轉錄能力有望用於改進輔助工具。雖然模型本身不能直接用於即時轉錄,但基於其構建的應用程序可能實現接近即時的語音識別和翻譯。
- 潛在風險:發佈Whisper模型可能帶來潛在的雙重用途問題。雖然希望該技術主要用於有益目的,但使ASR技術更易於獲取可能使更多人能夠構建強大的監控技術或擴大現有監控工作。此外,模型可能具有識別特定個人的能力,這帶來了與雙重用途和性能差異相關的安全問題。
🔧 技術細節
模型架構
Whisper是基於Transformer的編碼器 - 解碼器模型,也稱為序列到序列模型。
模型改進
Whisper large-v3與之前的 large 和 large-v2 模型架構相同,但有以下細微差異:
- 頻譜圖輸入使用128個Mel頻率 bins,而不是80個。
- 新增了粵語的語言令牌。
訓練數據
large-v3模型在100萬小時的弱標註音頻和400萬小時使用Whisper large-v2收集的偽標註音頻上進行訓練,訓練了2.0個週期。
速度和內存優化
- 分塊長音頻處理:Whisper的感受野為30秒,對於更長的音頻,可使用分塊長音頻處理方法,將長音頻文件分割成較短的片段進行獨立轉錄,然後拼接結果。
- torch compile:Whisper的前向傳播與
torch compile
兼容,可實現4.5倍的速度提升。 - Flash Attention 2:如果GPU支持,建議使用 Flash-Attention 2 以提高性能。
- Torch Scale-Product-Attention (SDPA):如果GPU不支持Flash Attention,建議使用PyTorch的 scaled dot-product attention (SDPA)。
📄 許可證
本項目使用 Apache-2.0 許可證。
BibTeX引用
@misc{radford2022whisper,
doi = {10.48550/ARXIV.2212.04356},
url = {https://arxiv.org/abs/2212.04356},
author = {Radford, Alec and Kim, Jong Wook and Xu, Tao and Brockman, Greg and McLeavey, Christine and Sutskever, Ilya},
title = {Robust Speech Recognition via Large-Scale Weak Supervision},
publisher = {arXiv},
year = {2022},
copyright = {arXiv.org perpetual, non-exclusive license}
}



