[Blog] [Papier] [Carte modèle] [Exemple Colab]
Whisper est un modèle de reconnaissance vocale à usage général. Il est formé sur un vaste ensemble de données audio diverses et constitue également un modèle multitâche capable d'effectuer une reconnaissance vocale multilingue, une traduction vocale et une identification de la langue.
Un modèle séquence à séquence Transformer est formé sur diverses tâches de traitement de la parole, notamment la reconnaissance vocale multilingue, la traduction vocale, l'identification de la langue parlée et la détection de l'activité vocale. Ces tâches sont représentées conjointement sous la forme d'une séquence de jetons devant être prédits par le décodeur, permettant à un modèle unique de remplacer de nombreuses étapes d'un pipeline de traitement vocal traditionnel. Le format de formation multitâche utilise un ensemble de jetons spéciaux qui servent de spécificateurs de tâches ou de cibles de classification.
Nous avons utilisé Python 3.9.9 et PyTorch 1.10.1 pour entraîner et tester nos modèles, mais la base de code devrait être compatible avec Python 3.8-3.11 et les versions récentes de PyTorch. La base de code dépend également de quelques packages Python, notamment du tiktoken d'OpenAI pour leur implémentation rapide du tokenizer. Vous pouvez télécharger et installer (ou mettre à jour) la dernière version de Whisper avec la commande suivante :
pip install -U openai-whisper
Alternativement, la commande suivante extraira et installera le dernier commit de ce référentiel, ainsi que ses dépendances Python :
pip install git+https://github.com/openai/whisper.git
Pour mettre à jour le package vers la dernière version de ce référentiel, veuillez exécuter :
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
Cela nécessite également que l'outil de ligne de commande ffmpeg
soit installé sur votre système, disponible auprès de la plupart des gestionnaires de packages :
# 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
Vous aurez peut-être également besoin d'installer rust
, au cas où tiktoken ne fournirait pas de roue pré-construite pour votre plate-forme. Si vous voyez des erreurs d'installation lors de la commande pip install
ci-dessus, veuillez suivre la page Mise en route pour installer l'environnement de développement Rust. De plus, vous devrez peut-être configurer la variable d'environnement PATH
, par exemple export PATH="$HOME/.cargo/bin:$PATH"
. Si l'installation échoue avec No module named 'setuptools_rust'
, vous devez installer setuptools_rust
, par exemple en exécutant :
pip install setuptools-rust
Il existe six tailles de modèles, dont quatre avec des versions uniquement en anglais, offrant des compromis en termes de vitesse et de précision. Vous trouverez ci-dessous les noms des modèles disponibles, ainsi que leurs besoins approximatifs en mémoire et leur vitesse d'inférence par rapport au grand modèle. Les vitesses relatives ci-dessous sont mesurées en transcrivant la parole anglaise sur un A100, et la vitesse réelle peut varier considérablement en fonction de nombreux facteurs, notamment la langue, la vitesse de parole et le matériel disponible.
Taille | Paramètres | Modèle en anglais uniquement | Modèle multilingue | VRAM requise | Vitesse relative |
---|---|---|---|---|---|
minuscule | 39 M | tiny.en | tiny | ~1 Go | ~10x |
base | 74 M | base.en | base | ~1 Go | ~7x |
petit | 244 M | small.en | small | ~2 Go | ~4x |
moyen | 769 M | medium.en | medium | ~5 Go | ~2x |
grand | 1550 M | N / A | large | ~10 Go | 1x |
turbo | 809 M | N / A | turbo | ~6 Go | ~8x |
Les modèles .en
pour les applications uniquement en anglais ont tendance à être plus performants, en particulier pour les modèles tiny.en
et base.en
Nous avons observé que la différence devient moins significative pour les modèles small.en
et medium.en
. De plus, le modèle turbo
est une version optimisée de large-v3
qui offre une vitesse de transcription plus rapide avec une dégradation minimale de la précision.
Les performances de Whisper varient considérablement selon la langue. La figure ci-dessous montre une répartition des performances des modèles large-v3
et large-v2
par langue, en utilisant les WER (taux d'erreur de mots) ou CER (taux d'erreur de caractères, affichés en italique ) évalués sur les ensembles de données Common Voice 15 et Fleurs. Des mesures WER/CER supplémentaires correspondant aux autres modèles et ensembles de données peuvent être trouvées dans les annexes D.1, D.2 et D.4 du document, ainsi que les scores BLEU (Bilingual Evaluation Understudy) pour la traduction dans l'annexe D. 3.
La commande suivante transcrira la parole dans des fichiers audio, en utilisant le modèle turbo
:
whisper audio.flac audio.mp3 audio.wav --model turbo
Le paramètre par défaut (qui sélectionne le modèle turbo
) fonctionne bien pour transcrire l'anglais. Pour transcrire un fichier audio contenant des paroles non anglaises, vous pouvez spécifier la langue à l'aide de l'option --language
:
whisper japanese.wav --language Japanese
L'ajout de --task translate
traduira le discours en anglais :
whisper japanese.wav --language Japanese --task translate
Exécutez la commande suivante pour afficher toutes les options disponibles :
whisper --help
Voir tokenizer.py pour la liste de toutes les langues disponibles.
La transcription peut également être effectuée dans Python :
import whisper
model = whisper . load_model ( "turbo" )
result = model . transcribe ( "audio.mp3" )
print ( result [ "text" ])
En interne, la méthode transcribe()
lit l'intégralité du fichier et traite l'audio avec une fenêtre glissante de 30 secondes, effectuant des prédictions autorégressives séquence à séquence sur chaque fenêtre.
Vous trouverez ci-dessous un exemple d'utilisation de whisper.detect_language()
et whisper.decode()
qui fournissent un accès de niveau inférieur au modèle.
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 )
Veuillez utiliser le ? Afficher et indiquer la catégorie dans Discussions pour partager davantage d'exemples d'utilisation de Whisper et d'extensions tierces telles que des démos Web, des intégrations avec d'autres outils, des ports pour différentes plates-formes, etc.
Le code et les poids des modèles de Whisper sont publiés sous la licence MIT. Voir LICENCE pour plus de détails.