模型概述
模型特點
模型能力
使用案例
🚀 Whisper IPA
Whisper是一個用於自動語音識別(ASR)和語音翻譯的預訓練模型。該模型在15000個標註的合成國際音標(IPA)數據的音頻文件(使用goruut 0.6.2音素化器生成)上進行了微調,展示出了強大的泛化能力,無需進一步微調即可適用於多種語言、數據集和領域。
Whisper由OpenAI的Alec Radford等人在論文Robust Speech Recognition via Large-Scale Weak Supervision中提出。原始代碼倉庫可在此處找到。
免責聲明:此模型卡片的部分內容由Hugging Face團隊撰寫,部分內容從原始模型卡片複製粘貼而來。
✨ 主要特性
- 預訓練模型,可用於自動語音識別和語音翻譯。
- 經過微調,能在多種語言、數據集和領域中表現出強大的泛化能力。
- 提供多種不同大小配置的檢查點,可根據需求選擇。
📦 安裝指南
文檔未提供安裝步驟,跳過此章節。
💻 使用示例
基礎用法
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> # 加載模型和處理器
>>> processor = WhisperProcessor.from_pretrained("neurlang/ipa-whisper-base")
>>> model = WhisperForConditionalGeneration.from_pretrained("neurlang/ipa-whisper-base")
>>> model.config.forced_decoder_ids = None
>>> model.config.suppress_tokens = []
>>> model.generation_config.forced_decoder_ids = None
>>> model.generation_config._from_model_config = True
>>> # 加載虛擬數據集並讀取音頻文件
>>> 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)
['mˈɪstɚ kwˈɪltɚ ˈɪz ðə ˈeɪ pˈɑsəl ˈʌv ðə ˈmɪdəl klˈæsɪz ˈænd wˈɪɹ glæd tˈu ˈælkəm ˈhɪz gˈʌsbəl']
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
['mˈɪstɚ kwˈɪltɚ ˈɪz ðə ˈeɪ pˈɑsəl ˈʌv ðə ˈmɪdəl klˈæsɪz ˈænd wˈɪɹ glæd tˈu ˈælkəm ˈhɪz gˈʌsbəl']
高級用法
>>> 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="neurlang/ipa-whisper-base",
>>> 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"]
"mˈɪstɚ kwˈɪltɚ ˈɪz ðə ˈeɪ pˈɑsəl ˈʌv ðə ˈmɪdəl klˈæsɪz ˈænd wˈɪɹ glæd tˈu ˈælkəm ˈhɪz gˈʌsbəl"
>>> # 我們還可以返回預測的時間戳
>>> prediction = pipe(sample.copy(), batch_size=8, return_timestamps=True)["chunks"]
Whisper沒有預測結束時間戳,如果音頻在單詞中間被截斷,就可能會出現這種情況。另外,請確保在生成過程中使用了WhisperTimeStampLogitsProcessor。
📚 詳細文檔
微調細節
- 微調耗時20:44:16。
- 在15000個音頻文件上進行訓練。
- 使用的GPU是NVIDIA 3090ti,顯存為24GB。
- 在來自Common Voice 21的70多種語言的15000個隨機音頻文件上進行微調。
模型細節
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
用於:
- 預處理音頻輸入(將其轉換為模型所需的對數梅爾頻譜圖)。
- 後處理模型輸出(將其從令牌轉換為文本)。
通過傳遞適當的“上下文令牌”,模型可以知道要執行的任務(轉錄或翻譯)。這些上下文令牌是在解碼過程開始時提供給解碼器的一系列令牌,順序如下:
- 轉錄始終以
<|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")
這強制模型在語音識別任務中以英語進行預測。
轉錄
語音轉國際音標
在此示例中,上下文令牌是“非強制的”,這意味著模型自動預測輸出語言(英語)和任務(轉錄)。
長格式轉錄
Whisper模型本質上設計用於處理最長30秒的音頻樣本。但是,通過使用分塊算法,它可以用於轉錄任意長度的音頻樣本。這可以通過Transformers的pipeline
方法實現。在實例化管道時,通過設置chunk_length_s = 30
啟用分塊。啟用分塊後,管道可以進行批量推理。還可以通過傳遞return_timestamps = True
來擴展以預測序列級時間戳。
有關分塊算法的更多詳細信息,請參考博客文章ASR Chunking。
微調
預訓練的Whisper模型在不同數據集和領域中表現出強大的泛化能力。但是,通過微調,可以進一步提高其在某些語言和任務上的預測能力。博客文章Fine-Tune Whisper with 🤗 Transformers提供了一個逐步指南,介紹如何使用僅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}
}
📄 許可證
本項目採用Apache 2.0許可證。



