模型概述
模型特點
模型能力
使用案例
語言:
- 英語 標籤:
- 音頻
- 自動語音識別
- hf-asr排行榜 小部件:
- 示例標題: Librispeech樣本1 來源: https://cdn-media.huggingface.co/speech_samples/sample1.flac
- 示例標題: Librispeech樣本2 來源: https://cdn-media.huggingface.co/speech_samples/sample2.flac 模型索引:
- 名稱: whisper-medium.en
結果:
- 任務:
名稱: 自動語音識別
類型: automatic-speech-recognition
數據集:
名稱: LibriSpeech (乾淨)
類型: librispeech_asr
配置: clean
分割: test
參數:
語言: en
指標:
- 名稱: 測試WER 類型: wer 值: 4.120542365210176
- 任務:
名稱: 自動語音識別
類型: automatic-speech-recognition
數據集:
名稱: LibriSpeech (其他)
類型: librispeech_asr
配置: other
分割: test
參數:
語言: en
指標:
- 名稱: 測試WER 類型: wer 值: 7.431640255663553 管道標籤: automatic-speech-recognition 許可證: apache-2.0
- 任務:
名稱: 自動語音識別
類型: automatic-speech-recognition
數據集:
名稱: LibriSpeech (乾淨)
類型: librispeech_asr
配置: clean
分割: test
參數:
語言: en
指標:
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頻譜圖)
- 後處理模型輸出(將標記轉換為文本)
轉錄
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> # 加載模型和處理器
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-medium.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium.en")
>>> # 加載虛擬數據集並讀取音頻文件
>>> 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|><|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
從轉錄文本開頭移除上下文標記。
評估
此代碼片段展示瞭如何在LibriSpeech test-clean上評估Whisper medium.en:
>>> 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.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium.en").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"]))
3.0154449620004904
長文本轉錄
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.en",
>>> 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種不同語言。
如隨附論文所述,我們發現特定語言的轉錄性能與我們在該語言中使用的訓練數據量直接相關。
性能與限制
我們的研究表明,與許多現有ASR系統相比,這些模型在口音、背景噪音、技術語言以及從多種語言到英語的零樣本翻譯方面表現出更強的魯棒性;並且語音識別和翻譯的準確性接近最先進水平。
然而,由於這些模型是在大規模噪聲數據上進行弱監督訓練的,預測可能包含音頻輸入中未實際說出的文本(即幻覺)。我們假設這是因為模型結合了預測音頻中下一個單詞和轉錄音頻本身的任務,基於其對語言的一般知識。
我們的模型在不同語言上表現不均,在低資源和/或低可發現性語言或訓練數據較少的語言上準確性較低。模型在特定語言的不同口音和方言上也表現出不同的性能,可能在不同性別、種族、年齡或其他人口統計標準的說話者中具有更高的詞錯誤率。完整的評估結果見隨本版本發佈的論文。
此外,模型的序列到序列架構使其容易生成重複文本,這可以通過束搜索和溫度調度在一定程度上緩解,但無法完全避免。更多關於這些限制的分析見論文。在低資源和/或低可發現性語言上,這種行為與幻覺可能更嚴重。
更廣泛的影響
我們預計Whisper模型的轉錄能力可用於改進輔助工具。雖然Whisper模型不能直接用於即時轉錄——其速度和規模表明其他人可以在其上構建允許近乎即時語音識別和翻譯的應用程序。基於Whisper模型構建的有益應用程序的實際價值表明,這些模型的性能差異可能具有實際的經濟影響。
發佈Whisper也存在潛在的雙重用途問題。雖然我們希望該技術主要用於有益目的,但使ASR技術更易獲取可能使更多行為者能夠構建強大的監控技術或擴大現有監控工作,因為速度和準確性允許經濟高效地自動轉錄和翻譯大量音頻通信。此外,這些模型可能具有識別特定個體的能力,這反過來又帶來了與雙重用途和性能差異相關的安全問題。實際上,我們預計轉錄成本不是擴大監控項目的限制因素。
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}
}



