[部落格] [論文] [模型卡] [Colab 範例]
Whisper 是一種通用語音辨識模型。它是在大量不同音訊資料集上進行訓練的,也是一個多任務模型,可以執行多語言語音識別、語音翻譯和語言識別。
Transformer 序列到序列模型針對各種語音處理任務進行訓練,包括多語言語音辨識、語音翻譯、口語辨識和語音活動偵測。這些任務聯合表示為由解碼器預測的標記序列,允許單一模型取代傳統語音處理管道的許多階段。多工訓練格式使用一組特殊標記作為任務說明符或分類目標。
我們使用 Python 3.9.9 和 PyTorch 1.10.1 來訓練和測試我們的模型,但程式碼庫預計與 Python 3.8-3.11 和最新的 PyTorch 版本相容。這個程式碼庫也依賴一些 Python 套件,最引人注目的是 OpenAI 的 tiktoken 的快速標記器實作。您可以使用以下命令下載並安裝(或更新至)最新版本的 Whisper:
pip install -U openai-whisper
或者,以下命令將從該儲存庫中提取並安裝最新的提交及其 Python 依賴項:
pip install git+https://github.com/openai/whisper.git
若要將軟體包更新至此儲存庫的最新版本,請執行:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
它還需要在您的系統上安裝命令列工具ffmpeg
,大多數套件管理器都可以提供該工具:
# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg
# on Arch Linux
sudo pacman -S ffmpeg
# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg
# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg
# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg
您可能還需要安裝rust
,以防 tiktoken 沒有為您的平台提供預先建造的輪子。如果您在上面的pip install
指令中看到安裝錯誤,請依照入門頁面安裝 Rust 開發環境。此外,您可能需要配置PATH
環境變量,例如export PATH="$HOME/.cargo/bin:$PATH"
。如果安裝失敗並顯示No module named 'setuptools_rust'
,則需要安裝setuptools_rust
,例如透過執行:
pip install setuptools-rust
有六種模型尺寸,其中四種只有英文版本,提供速度和準確性的權衡。以下是可用模型的名稱以及它們相對於大型模型的近似記憶體要求和推理速度。以下的相對速度是透過在 A100 上轉錄英語語音來測量的,實際速度可能會因語言、說話速度和可用硬體等許多因素而有很大差異。
尺寸 | 參數 | 純英文型號 | 多語言模型 | 所需顯存 | 相對速度 |
---|---|---|---|---|---|
微小的 | 39米 | tiny.en | tiny | 〜1GB | 〜10倍 |
根據 | 74米 | base.en | base | 〜1GB | 〜7x |
小的 | 244米 | small.en | small | 〜2GB | 〜4x |
中等的 | 769米 | medium.en | medium | 〜5GB | 〜2x |
大的 | 1550米 | 不適用 | large | 〜10GB | 1x |
渦輪 | 809米 | 不適用 | turbo | 〜6 GB | 〜8x |
僅英語應用程式的.en
模型往往表現更好,尤其是tiny.en
和base.en
模型。我們觀察到,對於small.en
和medium.en
模型,差異變得不那麼顯著。此外, turbo
模型是large-v3
的最佳化版本,可提供更快的轉錄速度,同時將準確性降低最小化。
Whisper 的表現因語言而異。下圖顯示了large-v3
和large-v2
模型按語言的表現細分,使用在 Common Voice 15 和 Fleurs 資料集上評估的 WER(單字錯誤率)或 CER(字元錯誤率,以斜體顯示)。與其他模型和資料集相對應的其他 WER/CER 指標可以在本文的附錄 D.1、D.2 和 D.4 中找到,以及附錄 D 中的 BLEU(雙語評估研究)翻譯分數。
以下命令將使用turbo
模型轉錄音訊檔案中的語音:
whisper audio.flac audio.mp3 audio.wav --model turbo
預設設定(選擇turbo
模式)非常適合轉錄英文。若要轉錄包含非英語語音的音訊文件,您可以使用--language
選項指定語言:
whisper japanese.wav --language Japanese
新增--task translate
會將演講翻譯成英文:
whisper japanese.wav --language Japanese --task translate
執行以下命令查看所有可用選項:
whisper --help
有關所有可用語言的列表,請參閱 tokenizer.py。
也可以在 Python 中執行轉錄:
import whisper
model = whisper . load_model ( "turbo" )
result = model . transcribe ( "audio.mp3" )
print ( result [ "text" ])
在內部, transcribe()
方法讀取整個檔案並使用滑動的 30 秒視窗處理音頻,對每個視窗執行自回歸序列到序列預測。
下面是一個使用whisper.detect_language()
和whisper.decode()
的範例,它們提供了對模型的較低層級的存取。
import whisper
model = whisper . load_model ( "turbo" )
# load audio and pad/trim it to fit 30 seconds
audio = whisper . load_audio ( "audio.mp3" )
audio = whisper . pad_or_trim ( audio )
# make log-Mel spectrogram and move to the same device as the model
mel = whisper . log_mel_spectrogram ( audio ). to ( model . device )
# detect the spoken language
_ , probs = model . detect_language ( mel )
print ( f"Detected language: { max ( probs , key = probs . get ) } " )
# decode the audio
options = whisper . DecodingOptions ()
result = whisper . decode ( model , mel , options )
# print the recognized text
print ( result . text )
請使用?討論中的「展示和講述」類別,用於分享 Whisper 和第三方擴充功能的更多範例用法,例如 Web 演示、與其他工具的整合、不同平台的連接埠等。
Whisper 的程式碼和模型權重是根據 MIT 許可證發布的。請參閱許可證以了解更多詳細資訊。