[Blog] [Artículo] [Tarjeta modelo] [Ejemplo de colab]
Whisper es un modelo de reconocimiento de voz de propósito general. Está entrenado en un gran conjunto de datos de audio diverso y también es un modelo multitarea que puede realizar reconocimiento de voz multilingüe, traducción de voz e identificación de idioma.
Un modelo de secuencia a secuencia de Transformer está entrenado en diversas tareas de procesamiento del habla, incluido el reconocimiento de voz multilingüe, la traducción de voz, la identificación del lenguaje hablado y la detección de actividad de voz. Estas tareas se representan conjuntamente como una secuencia de tokens que el decodificador debe predecir, lo que permite que un solo modelo reemplace muchas etapas de un proceso de procesamiento de voz tradicional. El formato de entrenamiento multitarea utiliza un conjunto de tokens especiales que sirven como especificadores de tareas u objetivos de clasificación.
Usamos Python 3.9.9 y PyTorch 1.10.1 para entrenar y probar nuestros modelos, pero se espera que el código base sea compatible con Python 3.8-3.11 y las versiones recientes de PyTorch. El código base también depende de algunos paquetes de Python, en particular el tiktoken de OpenAI para su rápida implementación del tokenizador. Puede descargar e instalar (o actualizar) la última versión de Whisper con el siguiente comando:
pip install -U openai-whisper
Alternativamente, el siguiente comando extraerá e instalará la última confirmación de este repositorio, junto con sus dependencias de Python:
pip install git+https://github.com/openai/whisper.git
Para actualizar el paquete a la última versión de este repositorio, ejecute:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
También requiere que la herramienta de línea de comandos ffmpeg
esté instalada en su sistema, que está disponible en la mayoría de los administradores de paquetes:
# 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
Es posible que también necesites instalar rust
, en caso de que Tiktoken no proporcione una rueda prefabricada para tu plataforma. Si ve errores de instalación durante el comando pip install
anterior, siga la página de introducción para instalar el entorno de desarrollo Rust. Además, es posible que necesite configurar la variable de entorno PATH
, por ejemplo, export PATH="$HOME/.cargo/bin:$PATH"
. Si la instalación falla sin No module named 'setuptools_rust'
, debe instalar setuptools_rust
, por ejemplo, ejecutando:
pip install setuptools-rust
Hay seis tamaños de modelos, cuatro con versiones solo en inglés, que ofrecen compensaciones entre velocidad y precisión. A continuación se muestran los nombres de los modelos disponibles y sus requisitos de memoria aproximados y velocidad de inferencia en relación con el modelo grande. Las velocidades relativas a continuación se miden transcribiendo el habla en inglés en un A100, y la velocidad en el mundo real puede variar significativamente dependiendo de muchos factores, incluido el idioma, la velocidad de conversación y el hardware disponible.
Tamaño | Parámetros | Modelo solo en inglés | Modelo multilingüe | VRAM requerida | Velocidad relativa |
---|---|---|---|---|---|
diminuto | 39 millones | tiny.en | tiny | ~1GB | ~10x |
base | 74 millones | base.en | base | ~1GB | ~7x |
pequeño | 244 millones | small.en | small | ~2GB | ~4x |
medio | 769 millones | medium.en | medium | ~5GB | ~2x |
grande | 1550 millones | N / A | large | ~10GB | 1x |
turbo | 809 millones | N / A | turbo | ~6GB | ~8x |
Los modelos .en
para aplicaciones sólo en inglés tienden a funcionar mejor, especialmente para los modelos tiny.en
y base.en
Observamos que la diferencia se vuelve menos significativa para los modelos small.en
y medium.en
. Además, el modelo turbo
es una versión optimizada del large-v3
que ofrece una velocidad de transcripción más rápida con una degradación mínima de la precisión.
El rendimiento de Whisper varía mucho según el idioma. La siguiente figura muestra un desglose del rendimiento de los modelos large-v3
y large-v2
por idioma, utilizando WER (tasas de error de palabras) o CER (tasas de error de caracteres, mostrados en cursiva ) evaluados en los conjuntos de datos Common Voice 15 y Fleurs. Se pueden encontrar métricas WER/CER adicionales correspondientes a los otros modelos y conjuntos de datos en los Apéndices D.1, D.2 y D.4 del documento, así como las puntuaciones BLEU (Evaluación Suplente Bilingüe) para traducción en el Apéndice D. 3.
El siguiente comando transcribirá voz en archivos de audio, utilizando el modelo turbo
:
whisper audio.flac audio.mp3 audio.wav --model turbo
La configuración predeterminada (que selecciona el modelo turbo
) funciona bien para transcribir inglés. Para transcribir un archivo de audio que contiene voz no inglesa, puede especificar el idioma usando la opción --language
:
whisper japanese.wav --language Japanese
Agregar --task translate
traducirá el discurso al inglés:
whisper japanese.wav --language Japanese --task translate
Ejecute lo siguiente para ver todas las opciones disponibles:
whisper --help
Consulte tokenizer.py para obtener la lista de todos los idiomas disponibles.
La transcripción también se puede realizar dentro de Python:
import whisper
model = whisper . load_model ( "turbo" )
result = model . transcribe ( "audio.mp3" )
print ( result [ "text" ])
Internamente, el método transcribe()
lee el archivo completo y procesa el audio con una ventana deslizante de 30 segundos, realizando predicciones autorregresivas de secuencia a secuencia en cada ventana.
A continuación se muestra un ejemplo de uso de whisper.detect_language()
y whisper.decode()
que proporcionan acceso de nivel inferior al modelo.
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 )
Por favor use el ? Mostrar y contar la categoría en Discusiones para compartir más usos de ejemplo de Whisper y extensiones de terceros, como demostraciones web, integraciones con otras herramientas, puertos para diferentes plataformas, etc.
El código y los pesos del modelo de Whisper se publican bajo la licencia MIT. Consulte LICENCIA para obtener más detalles.