?[論文]?[模型卡]?[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?沒有為您的平臺提供預構建的輪子。如果您在執行上述命令時看到安裝錯誤,請按照?入門 頁面安裝 Rust 開發環境。此外,您可能需要配置環境變量,例如 .如果安裝失敗并顯示 ,則需要安裝 ,例如通過運行:pip install
PATH
export PATH="$HOME/.cargo/bin:$PATH"
No module named 'setuptools_rust'
setuptools_rust
pip install setuptools-rust
可用的模型和語言
有六種型號尺寸,其中四種為僅英文版本,提供速度和精度的權衡。 以下是可用模型的名稱及其相對于大型模型的近似內存需求和推理速度。 以下相對速度是通過在 A100 上轉錄英語語音來測量的,實際速度可能會因許多因素(包括語言、語速和可用硬件)而有很大差異。
大小 | 參數 | 純英文模型 | 多語言模型 | 必需的 VRAM | 相對速度 |
---|---|---|---|---|---|
小 | 39 M | tiny.en | tiny | ~1 GB | ~10 倍 |
基礎 | 74 M | base.en | base | ~1 GB | ~7 倍 |
小 | 244 M | small.en | small | ~2 GB | ~4 倍 |
中等 | 769 M | medium.en | medium | ~5 吉字節 | ~2 倍 |
大 | 1550 M | 不適用 | large | ~10 GB | 1 倍 |
汽 | 809 M | 不適用 | turbo | ~6 GB | ~8 倍 |
純英語應用程序的模型往往性能更好,尤其是 和 模型。我們觀察到 和 模型的差異變得不那么顯著。 此外,該模型是其優化版本,可提供更快的轉錄速度,同時將準確性的下降降至最低。.en
tiny.en
base.en
small.en
medium.en
turbo
large-v3
Whisper 的性能因語言而異。下圖顯示了在 Common Voice 15 和 Fleurs 數據集上評估的 WER(單詞錯誤率)或 CER(字符錯誤率,以斜體顯示)按語言劃分的性能細分。與其他模型和數據集對應的其他 WER/CER 指標可在論文的附錄 D.1、D.2 和 D.4 中找到,以及附錄 D.3 中用于翻譯的 BLEU(雙語評估研究)分數。large-v3
large-v2
命令行用法
以下命令將使用模型轉錄音頻文件中的語音: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 用法
轉錄也可以在 Python 中執行:
import whispermodel = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
在內部,該方法讀取整個文件并使用 30 秒的滑動窗口處理音頻,在每個窗口上執行自回歸序列到序列預測。transcribe()
下面是 和 的示例用法,它提供對模型的較低級別訪問。whisper.detect_language()
whisper.decode()
import whispermodel = 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, n_mels=model.dims.n_mels).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)
更多示例
請使用 討論區?中的 Show and tell 類別來分享 Whisper 和第三方擴展的更多示例用法,例如 Web 演示、與其他工具的集成、不同平臺的端口等。 🙌
許可證
Whisper 的代碼和模型權重在 MIT 許可證下發布。有關更多詳細信息,請參閱?LICENSE?。