[Blog] [Artigo] [Cartão modelo] [Exemplo do Colab]
Whisper é um modelo de reconhecimento de fala de uso geral. Ele é treinado em um grande conjunto de dados de áudio diversificado e também é um modelo multitarefa que pode realizar reconhecimento de fala multilíngue, tradução de fala e identificação de idioma.
Um modelo de sequência a sequência do Transformer é treinado em várias tarefas de processamento de fala, incluindo reconhecimento de fala multilíngue, tradução de fala, identificação de idioma falado e detecção de atividade de voz. Essas tarefas são representadas conjuntamente como uma sequência de tokens a serem previstos pelo decodificador, permitindo que um único modelo substitua muitos estágios de um pipeline tradicional de processamento de fala. O formato de treinamento multitarefa usa um conjunto de tokens especiais que servem como especificadores de tarefas ou alvos de classificação.
Usamos Python 3.9.9 e PyTorch 1.10.1 para treinar e testar nossos modelos, mas espera-se que a base de código seja compatível com Python 3.8-3.11 e versões recentes do PyTorch. A base de código também depende de alguns pacotes Python, principalmente o tiktoken da OpenAI para sua rápida implementação de tokenizer. Você pode baixar e instalar (ou atualizar) a versão mais recente do Whisper com o seguinte comando:
pip install -U openai-whisper
Alternativamente, o seguinte comando irá extrair e instalar o commit mais recente deste repositório, junto com suas dependências Python:
pip install git+https://github.com/openai/whisper.git
Para atualizar o pacote para a versão mais recente deste repositório, execute:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
Também requer a instalação da ferramenta de linha de comando ffmpeg
em seu sistema, que está disponível na maioria dos gerenciadores de pacotes:
# 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
Você também pode precisar da instalação rust
, caso o tiktoken não forneça uma roda pré-construída para sua plataforma. Se você encontrar erros de instalação durante o comando pip install
acima, siga a página de primeiros passos para instalar o ambiente de desenvolvimento Rust. Além disso, pode ser necessário configurar a variável de ambiente PATH
, por exemplo, export PATH="$HOME/.cargo/bin:$PATH"
. Se a instalação falhar com No module named 'setuptools_rust'
, você precisará instalar setuptools_rust
, por exemplo, executando:
pip install setuptools-rust
Existem seis tamanhos de modelo, quatro com versões somente em inglês, oferecendo vantagens em termos de velocidade e precisão. Abaixo estão os nomes dos modelos disponíveis e seus requisitos aproximados de memória e velocidade de inferência em relação ao modelo grande. As velocidades relativas abaixo são medidas pela transcrição da fala em inglês em um A100, e a velocidade no mundo real pode variar significativamente dependendo de muitos fatores, incluindo o idioma, a velocidade de fala e o hardware disponível.
Tamanho | Parâmetros | Modelo somente em inglês | Modelo multilíngue | VRAM necessária | Velocidade relativa |
---|---|---|---|---|---|
pequeno | 39 meses | tiny.en | tiny | ~1GB | ~10x |
base | 74 milhões | base.en | base | ~1GB | ~7x |
pequeno | 244 milhões | small.en | small | ~2GB | ~4x |
médio | 769 milhões | medium.en | medium | ~5GB | ~2x |
grande | 1550 milhões | N / D | large | ~10GB | 1x |
turbo | 809 milhões | N / D | turbo | ~6GB | ~8x |
Os modelos .en
para aplicativos somente em inglês tendem a ter melhor desempenho, especialmente para os modelos tiny.en
e base.en
Observamos que a diferença se torna menos significativa para os modelos small.en
e medium.en
. Além disso, o modelo turbo
é uma versão otimizada do large-v3
que oferece velocidade de transcrição mais rápida com degradação mínima na precisão.
O desempenho do Whisper varia muito dependendo do idioma. A figura abaixo mostra um detalhamento do desempenho dos modelos large-v3
e large-v2
por idioma, usando WERs (taxas de erro de palavras) ou CER (taxas de erros de caracteres, mostradas em itálico ) avaliados nos conjuntos de dados Common Voice 15 e Fleurs. Métricas WER/CER adicionais correspondentes a outros modelos e conjuntos de dados podem ser encontradas no Apêndice D.1, D.2 e D.4 do artigo, bem como as pontuações do BLEU (Bilingual Evaluation Understudy) para tradução no Apêndice D. 3.
O comando a seguir transcreverá a fala em arquivos de áudio, utilizando o modelo turbo
:
whisper audio.flac audio.mp3 audio.wav --model turbo
A configuração padrão (que seleciona o modelo turbo
) funciona bem para transcrever o inglês. Para transcrever um arquivo de áudio contendo fala diferente do inglês, você pode especificar o idioma usando a opção --language
:
whisper japanese.wav --language Japanese
Adicionar --task translate
traduzirá o discurso para o inglês:
whisper japanese.wav --language Japanese --task translate
Execute o seguinte para ver todas as opções disponíveis:
whisper --help
Consulte tokenizer.py para obter a lista de todos os idiomas disponíveis.
A transcrição também pode ser realizada em Python:
import whisper
model = whisper . load_model ( "turbo" )
result = model . transcribe ( "audio.mp3" )
print ( result [ "text" ])
Internamente, o método transcribe()
lê o arquivo inteiro e processa o áudio com uma janela deslizante de 30 segundos, realizando previsões autorregressivas sequência a sequência em cada janela.
Abaixo está um exemplo de uso de whisper.detect_language()
e whisper.decode()
que fornecem acesso de nível inferior ao 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 o ? Categoria Mostrar e contar em Discussões para compartilhar mais exemplos de uso do Whisper e extensões de terceiros, como demonstrações da web, integrações com outras ferramentas, portas para diferentes plataformas, etc.
O código e os pesos do modelo do Whisper são liberados sob a licença do MIT. Consulte LICENÇA para obter mais detalhes.