[Blog] [Papier] [Modellkarte] [Colab-Beispiel]
Whisper ist ein Allzweck-Spracherkennungsmodell. Es wird auf einem großen Datensatz unterschiedlicher Audiodaten trainiert und ist außerdem ein Multitasking-Modell, das mehrsprachige Spracherkennung, Sprachübersetzung und Sprachidentifizierung durchführen kann.
Ein Transformer-Sequenz-zu-Sequenz-Modell wird auf verschiedene Sprachverarbeitungsaufgaben trainiert, darunter mehrsprachige Spracherkennung, Sprachübersetzung, Identifizierung gesprochener Sprache und Erkennung von Sprachaktivitäten. Diese Aufgaben werden gemeinsam als eine vom Decoder vorherzusagende Folge von Token dargestellt, sodass ein einziges Modell viele Stufen einer herkömmlichen Sprachverarbeitungspipeline ersetzen kann. Das Multitasking-Trainingsformat verwendet eine Reihe spezieller Token, die als Aufgabenspezifizierer oder Klassifizierungsziele dienen.
Wir haben Python 3.9.9 und PyTorch 1.10.1 zum Trainieren und Testen unserer Modelle verwendet, aber die Codebasis wird voraussichtlich mit Python 3.8-3.11 und neueren PyTorch-Versionen kompatibel sein. Die Codebasis hängt auch von einigen Python-Paketen ab, insbesondere von OpenAIs Tiktoken für ihre schnelle Tokenizer-Implementierung. Mit dem folgenden Befehl können Sie die neueste Version von Whisper herunterladen und installieren (oder aktualisieren):
pip install -U openai-whisper
Alternativ ruft der folgende Befehl das neueste Commit aus diesem Repository ab und installiert es zusammen mit seinen Python-Abhängigkeiten:
pip install git+https://github.com/openai/whisper.git
Um das Paket auf die neueste Version dieses Repositorys zu aktualisieren, führen Sie bitte Folgendes aus:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
Außerdem muss das Befehlszeilentool ffmpeg
auf Ihrem System installiert sein, das bei den meisten Paketmanagern verfügbar ist:
# 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
Möglicherweise müssen Sie auch rust
installieren, falls Tiktoken kein vorgefertigtes Rad für Ihre Plattform bereitstellt. Wenn während des obigen Befehls pip install
Installationsfehler auftreten, folgen Sie bitte der Seite „Erste Schritte“, um die Rust-Entwicklungsumgebung zu installieren. Darüber hinaus müssen Sie möglicherweise die Umgebungsvariable PATH
konfigurieren, z. B. export PATH="$HOME/.cargo/bin:$PATH"
. Wenn die Installation fehlschlägt und No module named 'setuptools_rust'
wird, müssen Sie setuptools_rust
installieren, z. B. indem Sie Folgendes ausführen:
pip install setuptools-rust
Es gibt sechs Modellgrößen, vier davon nur in englischer Sprache, die Kompromisse bei Geschwindigkeit und Genauigkeit bieten. Nachfolgend finden Sie die Namen der verfügbaren Modelle sowie deren ungefähre Speicheranforderungen und Inferenzgeschwindigkeit im Vergleich zum großen Modell. Die unten aufgeführten relativen Geschwindigkeiten werden anhand der Transkription englischer Sprache auf einem A100 gemessen. Die tatsächliche Geschwindigkeit kann abhängig von vielen Faktoren, einschließlich der Sprache, der Sprechgeschwindigkeit und der verfügbaren Hardware, erheblich variieren.
Größe | Parameter | Nur englischsprachiges Modell | Mehrsprachiges Modell | Erforderlicher VRAM | Relative Geschwindigkeit |
---|---|---|---|---|---|
winzig | 39 M | tiny.en | tiny | ~1 GB | ~10x |
Base | 74 Mio | base.en | base | ~1 GB | ~7x |
klein | 244 Mio | small.en | small | ~2 GB | ~4x |
Medium | 769 Mio | medium.en | medium | ~5 GB | ~2x |
groß | 1550 M | N / A | large | ~10 GB | 1x |
Turbo | 809 M | N / A | turbo | ~6 GB | ~8x |
Die .en
Modelle für rein englischsprachige Anwendungen weisen tendenziell eine bessere Leistung auf, insbesondere die Modelle tiny.en
und base.en
Wir haben beobachtet, dass der Unterschied für die Modelle small.en
und medium.en
weniger signifikant wird. Darüber hinaus ist das turbo
-Modell eine optimierte Version von large-v3
, die eine schnellere Transkriptionsgeschwindigkeit bei minimaler Verschlechterung der Genauigkeit bietet.
Die Leistung von Whisper variiert stark je nach Sprache. Die folgende Abbildung zeigt eine Leistungsaufschlüsselung der large-v3
und large-v2
Modelle nach Sprache, wobei WERs (Wortfehlerraten) oder CER (Zeichenfehlerraten, kursiv dargestellt) verwendet werden, die anhand der Common Voice 15- und Fleurs-Datensätze ausgewertet wurden. Weitere WER/CER-Metriken, die den anderen Modellen und Datensätzen entsprechen, finden Sie in Anhang D.1, D.2 und D.4 des Papiers, ebenso wie die BLEU-Ergebnisse (Bilingual Evaluation Understudy) für die Übersetzung in Anhang D. 3.
Der folgende Befehl transkribiert Sprache mithilfe des turbo
in Audiodateien:
whisper audio.flac audio.mp3 audio.wav --model turbo
Die Standardeinstellung (die das turbo
-Modell auswählt) eignet sich gut zum Transkribieren von Englisch. Um eine Audiodatei zu transkribieren, die nicht-englische Sprache enthält, können Sie die Sprache mit der Option --language
angeben:
whisper japanese.wav --language Japanese
Durch das Hinzufügen von --task translate
wird die Rede ins Englische übersetzt:
whisper japanese.wav --language Japanese --task translate
Führen Sie Folgendes aus, um alle verfügbaren Optionen anzuzeigen:
whisper --help
Die Liste aller verfügbaren Sprachen finden Sie unter tokenizer.py.
Die Transkription kann auch innerhalb von Python durchgeführt werden:
import whisper
model = whisper . load_model ( "turbo" )
result = model . transcribe ( "audio.mp3" )
print ( result [ "text" ])
Intern liest die transcribe()
Methode die gesamte Datei und verarbeitet das Audio mit einem gleitenden 30-Sekunden-Fenster, wobei sie für jedes Fenster autoregressive Sequenz-zu-Sequenz-Vorhersagen durchführt.
Nachfolgend finden Sie ein Beispiel für die Verwendung von whisper.detect_language()
und whisper.decode()
die den Zugriff auf das Modell auf niedrigerer Ebene ermöglichen.
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 )
Bitte verwenden Sie das ? Kategorie „Anzeigen und Erzählen“ in „Diskussionen“, um weitere Beispielverwendungen von Whisper und Erweiterungen von Drittanbietern wie Webdemos, Integrationen mit anderen Tools, Ports für verschiedene Plattformen usw. zu teilen.
Der Code und die Modellgewichte von Whisper werden unter der MIT-Lizenz veröffentlicht. Weitere Einzelheiten finden Sie unter LIZENZ.