模型概述
模型特點
模型能力
使用案例
語言:
- 英語
- 中文
- 德語
- 西班牙語
- 俄語
- 韓語
- 法語
- 日語
- 葡萄牙語
- 土耳其語
- 波蘭語
- 加泰羅尼亞語
- 荷蘭語
- 阿拉伯語
- 瑞典語
- 意大利語
- 印尼語
- 印地語
- 芬蘭語
- 越南語
- 希伯來語
- 烏克蘭語
- 希臘語
- 馬來語
- 捷克語
- 羅馬尼亞語
- 丹麥語
- 匈牙利語
- 泰米爾語
- 挪威語
- 泰語
- 烏爾都語
- 克羅地亞語
- 保加利亞語
- 立陶宛語
- 拉丁語
- 毛利語
- 馬拉雅拉姆語
- 威爾士語
- 斯洛伐克語
- 泰盧固語
- 波斯語
- 拉脫維亞語
- 孟加拉語
- 塞爾維亞語
- 阿塞拜疆語
- 斯洛文尼亞語
- 卡納達語
- 愛沙尼亞語
- 馬其頓語
- 布列塔尼語
- 巴斯克語
- 冰島語
- 亞美尼亞語
- 尼泊爾語
- 蒙古語
- 波斯尼亞語
- 哈薩克語
- 阿爾巴尼亞語
- 斯瓦希里語
- 加利西亞語
- 馬拉地語
- 旁遮普語
- 僧伽羅語
- 高棉語
- 紹納語
- 約魯巴語
- 索馬里語
- 南非荷蘭語
- 奧克語
- 格魯吉亞語
- 白俄羅斯語
- 塔吉克語
- 信德語
- 古吉拉特語
- 阿姆哈拉語
- 意第緒語
- 老撾語
- 烏茲別克語
- 法羅語
- 海地克里奧爾語
- 普什圖語
- 土庫曼語
- 新挪威語
- 馬耳他語
- 梵語
- 盧森堡語
- 緬甸語
- 藏語
- 他加祿語
- 馬爾加什語
- 阿薩姆語
- 韃靼語
- 夏威夷語
- 林加拉語
- 豪薩語
- 巴什基爾語
- 爪哇語
- 巽他語
標籤:
- 音頻
- 自動語音識別
- hf-asr排行榜
小部件:
- 示例標題: Librispeech樣本1 src: https://cdn-media.huggingface.co/speech_samples/sample1.flac
- 示例標題: Librispeech樣本2 src: https://cdn-media.huggingface.co/speech_samples/sample2.flac
模型索引:
- 名稱: whisper-medium
結果:
- 任務:
名稱: 自動語音識別
類型: automatic-speech-recognition
數據集:
名稱: LibriSpeech (乾淨)
類型: librispeech_asr
配置: clean
分割: test
參數:
語言: en
指標:
- 名稱: 測試WER 類型: wer 值: 2.9
- 任務:
名稱: 自動語音識別
類型: automatic-speech-recognition
數據集:
名稱: LibriSpeech (其他)
類型: librispeech_asr
配置: other
分割: test
參數:
語言: en
指標:
- 名稱: 測試WER 類型: wer 值: 5.9
- 任務:
名稱: 自動語音識別
類型: automatic-speech-recognition
數據集:
名稱: Common Voice 11.0
類型: mozilla-foundation/common_voice_11_0
配置: hi
分割: test
參數:
語言: hi
指標:
- 名稱: 測試WER 類型: wer 值: 53.87
- 任務:
名稱: 自動語音識別
類型: automatic-speech-recognition
數據集:
名稱: LibriSpeech (乾淨)
類型: librispeech_asr
配置: clean
分割: test
參數:
語言: en
指標:
管道標籤: automatic-speech-recognition 許可證: apache-2.0
Whisper
Whisper是一個預訓練的自動語音識別(ASR)和語音翻譯模型。經過68萬小時標記數據的訓練,Whisper模型展示了在無需微調的情況下,對許多數據集和領域具有強大的泛化能力。
Whisper由OpenAI的Alec Radford等人在論文通過大規模弱監督實現魯棒語音識別中提出。原始代碼倉庫可以在這裡找到。
免責聲明: 本模型卡的部分內容由Hugging Face團隊撰寫,部分內容複製粘貼自原始模型卡。
模型詳情
Whisper是一個基於Transformer的編碼器-解碼器模型,也稱為序列到序列模型。它使用大規模弱監督標註的68萬小時語音數據進行訓練。
這些模型僅在英語數據或多語言數據上進行訓練。僅英語模型訓練用於語音識別任務。多語言模型同時訓練用於語音識別和語音翻譯。對於語音識別,模型預測與音頻相同語言的轉錄。對於語音翻譯,模型預測與音頻不同語言的轉錄。
Whisper檢查點有五種不同模型大小的配置。最小的四個檢查點僅在英語或多語言數據上訓練。最大的檢查點僅支持多語言。所有十個預訓練檢查點都可以在Hugging Face Hub上找到。檢查點在下表中總結,並附有Hub上的模型鏈接:
大小 | 參數 | 僅英語 | 多語言 |
---|---|---|---|
tiny | 39 M | ✓ | ✓ |
base | 74 M | ✓ | ✓ |
small | 244 M | ✓ | ✓ |
medium | 769 M | ✓ | ✓ |
large | 1550 M | x | ✓ |
large-v2 | 1550 M | x | ✓ |
使用
要轉錄音頻樣本,模型需要與WhisperProcessor
一起使用。
WhisperProcessor
用於:
- 預處理音頻輸入(將其轉換為模型的log-Mel頻譜圖)
- 後處理模型輸出(將標記轉換為文本)
模型通過傳遞適當的“上下文標記”來告知執行的任務(轉錄或翻譯)。這些上下文標記是在解碼過程開始時提供給解碼器的標記序列,順序如下:
- 轉錄始終以
<|startoftranscript|>
標記開始 - 第二個標記是語言標記(例如英語為
<|en|>
) - 第三個標記是“任務標記”。它可以取兩個值之一:
<|transcribe|>
用於語音識別或<|translate|>
用於語音翻譯 - 此外,如果模型不應包含時間戳預測,則添加
<|notimestamps|>
標記
因此,典型的上下文標記序列可能如下所示:
<|startoftranscript|> <|en|> <|transcribe|> <|notimestamps|>
這告訴模型以英語解碼,執行語音識別任務,並且不預測時間戳。
這些標記可以是強制或非強制的。如果強制,模型必須在每個位置預測每個標記。這允許控制Whisper模型的輸出語言和任務。如果非強制,Whisper模型將自動預測輸出語言和任務。
可以相應地設置上下文標記:
model.config.forced_decoder_ids = WhisperProcessor.get_decoder_prompt_ids(language="english", task="transcribe")
這強制模型在英語下執行語音識別任務。
轉錄
英語到英語
在此示例中,上下文標記是“非強制”的,意味著模型自動預測輸出語言(英語)和任務(轉錄)。
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> # 加載模型和處理器
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-medium")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium")
>>> model.config.forced_decoder_ids = None
>>> # 加載虛擬數據集並讀取音頻文件
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]
>>> input_features = processor(sample["array"], sampling_rate=sample["sampling_rate"], return_tensors="pt").input_features
>>> # 生成標記ID
>>> predicted_ids = model.generate(input_features)
>>> # 將標記ID解碼為文本
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=False)
['<|startoftranscript|><|en|><|transcribe|><|notimestamps|> Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.<|endoftext|>']
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
[' Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.']
可以通過設置skip_special_tokens=True
從轉錄的開頭刪除上下文標記。
法語到法語
以下示例通過適當設置解碼器ID,演示了法語到法語的轉錄。
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import Audio, load_dataset
>>> # 加載模型和處理器
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-medium")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium")
>>> forced_decoder_ids = processor.get_decoder_prompt_ids(language="french", task="transcribe")
>>> # 加載流式數據集並讀取第一個音頻樣本
>>> ds = load_dataset("common_voice", "fr", split="test", streaming=True)
>>> ds = ds.cast_column("audio", Audio(sampling_rate=16_000))
>>> input_speech = next(iter(ds))["audio"]
>>> input_features = processor(input_speech["array"], sampling_rate=input_speech["sampling_rate"], return_tensors="pt").input_features
>>> # 生成標記ID
>>> predicted_ids = model.generate(input_features, forced_decoder_ids=forced_decoder_ids)
>>> # 將標記ID解碼為文本
>>> transcription = processor.batch_decode(predicted_ids)
['<|startoftranscript|><|fr|><|transcribe|><|notimestamps|> Un vrai travail intéressant va enfin être mené sur ce sujet.<|endoftext|>']
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
[' Un vrai travail intéressant va enfin être mené sur ce sujet.']
翻譯
將任務設置為“translate”強制Whisper模型執行語音翻譯。
法語到英語
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import Audio, load_dataset
>>> # 加載模型和處理器
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-medium")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium")
>>> forced_decoder_ids = processor.get_decoder_prompt_ids(language="french", task="translate")
>>> # 加載流式數據集並讀取第一個音頻樣本
>>> ds = load_dataset("common_voice", "fr", split="test", streaming=True)
>>> ds = ds.cast_column("audio", Audio(sampling_rate=16_000))
>>> input_speech = next(iter(ds))["audio"]
>>> input_features = processor(input_speech["array"], sampling_rate=input_speech["sampling_rate"], return_tensors="pt").input_features
>>> # 生成標記ID
>>> predicted_ids = model.generate(input_features, forced_decoder_ids=forced_decoder_ids)
>>> # 將標記ID解碼為文本
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
[' A very interesting work, we will finally be given on this subject.']
評估
此代碼片段展示瞭如何在LibriSpeech test-clean上評估Whisper Medium:
>>> from datasets import load_dataset
>>> from transformers import WhisperForConditionalGeneration, WhisperProcessor
>>> import torch
>>> from evaluate import load
>>> librispeech_test_clean = load_dataset("librispeech_asr", "clean", split="test")
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-medium")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium").to("cuda")
>>> def map_to_pred(batch):
>>> audio = batch["audio"]
>>> input_features = processor(audio["array"], sampling_rate=audio["sampling_rate"], return_tensors="pt").input_features
>>> batch["reference"] = processor.tokenizer._normalize(batch['text'])
>>>
>>> with torch.no_grad():
>>> predicted_ids = model.generate(input_features.to("cuda"))[0]
>>> transcription = processor.decode(predicted_ids)
>>> batch["prediction"] = processor.tokenizer._normalize(transcription)
>>> return batch
>>> result = librispeech_test_clean.map(map_to_pred)
>>> wer = load("wer")
>>> print(100 * wer.compute(references=result["reference"], predictions=result["prediction"]))
2.900409225488902
長格式轉錄
Whisper模型本質上設計用於處理最長30秒的音頻樣本。但是,通過使用分塊算法,可以用於轉錄任意長度的音頻樣本。這是通過Transformers的pipeline
方法實現的。分塊通過在實例化管道時設置chunk_length_s=30
來啟用。啟用分塊後,管道可以使用批量推理運行。還可以通過傳遞return_timestamps=True
擴展以預測序列級時間戳:
>>> import torch
>>> from transformers import pipeline
>>> from datasets import load_dataset
>>> device = "cuda:0" if torch.cuda.is_available() else "cpu"
>>> pipe = pipeline(
>>> "automatic-speech-recognition",
>>> model="openai/whisper-medium",
>>> chunk_length_s=30,
>>> device=device,
>>> )
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]
>>> prediction = pipe(sample.copy(), batch_size=8)["text"]
" Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel."
>>> # 我們還可以返回預測的時間戳
>>> prediction = pipe(sample.copy(), batch_size=8, return_timestamps=True)["chunks"]
[{'text': ' Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.',
'timestamp': (0.0, 5.44)}]
有關分塊算法的更多詳細信息,請參閱博客文章ASR分塊。
微調
預訓練的Whisper模型展示了在不同數據集和領域上的強大泛化能力。然而,通過微調可以進一步提高某些語言和任務的預測能力。博客文章使用🤗 Transformers微調Whisper提供了逐步指南,使用少至5小時的標記數據微調Whisper模型。
評估使用
這些模型的主要預期用戶是研究當前模型的魯棒性、泛化能力、能力、偏見和限制的AI研究人員。然而,Whisper作為英語語音識別的ASR解決方案對開發者也很有用。我們認識到,一旦模型發佈,就不可能限制僅“預期”用途或圍繞什麼是或不是研究制定合理指南。
這些模型主要在ASR和英語語音翻譯任務上進行訓練和評估。它們在約10種語言中顯示出強大的ASR結果。它們可能表現出額外的能力,特別是在某些任務上進行微調時,如語音活動檢測、說話人分類或說話人分離,但尚未在這些領域進行穩健評估。我們強烈建議用戶在特定上下文和領域中對模型進行穩健評估後再部署。
特別是,我們警告不要使用Whisper模型轉錄未經個人同意錄製的錄音,或聲稱將這些模型用於任何類型的主觀分類。我們建議不要在高風險領域使用,如決策上下文,其中準確性的缺陷可能導致結果的明顯缺陷。模型旨在轉錄和翻譯語音,使用模型進行分類不僅未經評估,而且不合適,特別是推斷人類屬性。
訓練數據
這些模型在從互聯網收集的68萬小時音頻和相應轉錄上進行訓練。這些數據的65%(或43.8萬小時)代表英語音頻和匹配的英語轉錄,約18%(或12.6萬小時)代表非英語音頻和英語轉錄,而最後的17%(或11.7萬小時)代表非英語音頻和相應的轉錄。這些非英語數據代表98種不同的語言。
如[隨附



