Como executar o modelo de reconhecimento automático de fala (ASR)

Neste tutorial, mostramos como treinar um modelo de reconhecimento automático de fala (ASR, na sigla em inglês) usando o conjunto de dados do corpus Librispeech ASR disponível publicamente com o Tensor2Tensor em um Cloud TPU.

Descrição do modelo

O modelo de reconhecimento automático de fala é apenas um dos modelos da biblioteca Tensor2Tensor. O Tensor2Tensor (T2T) é uma biblioteca de conjuntos de dados e modelos de aprendizado profundo. Ele também fornece um grupo de scripts para treinar os modelos, além de fazer o download dos dados e prepará-los. Com esse modelo, é feita a conversão de fala para texto.

Antes de começar

Antes de começar o tutorial, siga as etapas abaixo para verificar se o projeto do Google Cloud Platform foi configurado corretamente.

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do GCP.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado para o projeto.

    Saiba como ativar o faturamento

  4. Este tutorial inclui componentes faturáveis do Google Cloud Platform. Consulte a página de preços do Cloud TPU para fazer uma estimativa dos custos. Para evitar cobranças desnecessárias, certifique-se de limpar os recursos criados quando terminar de usá-los.

Como configurar os recursos

Nesta seção, você verá como configurar os recursos de armazenamento, a VM e o Cloud TPU do Cloud Storage para tutoriais.

Crie um intervalo do Cloud Storage

É preciso um intervalo do Cloud Storage para armazenar os dados usados para treinar o modelo e os resultados do treinamento. A ferramenta ctpu up usada neste tutorial configura permissões padrão para a conta de serviço do Cloud TPU. Caso queira permissões mais específicas, consulte as permissões de nível de acesso.

O intervalo criado precisa residir na mesma região que a máquina virtual (VM, na sigla em inglês) e o dispositivo Cloud TPU ou fração do Cloud TPU (vários dispositivos TPU).

  1. Acesse a página do Cloud Storage no Console do GCP.

    Acessar a página do Cloud Storage

  2. Crie um novo intervalo especificando as opções a seguir:

    • Um nome exclusivo à sua escolha
    • classe de armazenamento padrão: Regional
    • localização: se quiser usar um dispositivo Cloud TPU, aceite o padrão apresentado. Caso queira usar uma fatia do pod do Cloud TPU, especifique uma região em que eles estão disponíveis.

Use a ferramenta ctpu

Nesta seção, mostramos o uso da ferramenta de provisionamento do Cloud TPU (ctpu) para criar e gerenciar recursos do projeto no Cloud TPU. Os recursos são compostos por uma máquina virtual (VM, na sigla em inglês) e um recurso do Cloud TPU com o mesmo nome. Eles precisam residir na mesma região/zona que o intervalo recém-criado.

Também é possível configurar os recursos de VM e TPU usando comandos do gcloud ou o Console do Cloud. Consulte a página Como gerenciar recursos de VM e TPU para aprender todas as maneiras de configurar e gerenciar recursos de VM do Compute Engine e do Cloud TPU.

Execute o ctpu up para criar recursos

  1. Abra uma janela do Cloud Shell.

    Abrir o Cloud Shell

  2. Execute gcloud config set project <Your-Project> para usar o projeto em que você quer criar o Cloud TPU.

  3. Execute ctpu up especificando as sinalizações mostradas para um dispositivo Cloud TPU ou para uma fração de pod. Para opções e descrições de sinalização, consulte Referência do CTPU.

  4. Configure um dispositivo do Cloud TPU:

    $ ctpu up 

    A seguinte mensagem de configuração será exibida:

    ctpu will use the following configuration:
    
    Name: [your TPU's name]
    Zone: [your project's zone]
    GCP Project: [your project's name]
    TensorFlow Version: 1.14
    VM:
     Machine Type: [your machine type]
     Disk Size: [your disk size]
     Preemptible: [true or false]
    Cloud TPU:
     Size: [your TPU size]
     Preemptible: [true or false]
    
    OK to create your Cloud TPU resources with the above configuration? [Yn]:
    

    Pressione y para criar os recursos do Cloud TPU.

O comando ctpu up cria uma máquina virtual (VM) e serviços do Cloud TPU.

Daqui em diante, o prefixo (vm)$ significa que você precisa executar o comando na instância de VM do Compute Engine.

Verificar a VM do Compute Engine

Quando a execução for concluída pelo comando ctpu up, verifique se o prompt do seu shell mudou de username@project para username@tpuname. Essa alteração mostra que você fez login na VM do Compute Engine.

Adicionar espaço em disco à VM

Por questões práticas, o T2T empacota a geração de dados de muitos conjuntos comuns de código aberto no script t2t-datagen. Ele faz o download e o pré-processamento dos dados, além de prepará-los para o treinamento. Para isso, é necessário espaço no disco local.

Pule esta etapa se você executar o t2t-datagen na máquina local (execute pip install tensor2tensor e depois consulte o comando t2t-datagen abaixo).

  • Siga o guia do Compute Engine para adicionar um disco à VM do Compute Engine.
  • Defina o tamanho do disco como 200 GB (mínimo recomendado).
  • Defina Ao excluir uma instância como Excluir disco para garantir que o disco seja removido quando você excluir a VM.

Anote o caminho do novo disco. Por exemplo: /mnt/disks/mnt-dir.

Gerar os conjuntos de dados de treinamento e avaliação

Na VM do Compute Engine:

  1. Crie as seguintes variáveis de ambiente para diretórios:

    (vm)$ STORAGE_BUCKET=gs://YOUR-BUCKET-NAME
    (vm)$ DATA_DIR=$STORAGE_BUCKET/data/
    (vm)$ OUT_DIR=$STORAGE_BUCKET/out/
    (vm)$ TMP_DIR=/mnt/disks/mnt-dir/t2t_tmp

    em que:

    • YOUR-BUCKET-NAME é o nome do intervalo do Cloud Storage;
    • DATA_DIR e OUT_DIR são locais no Cloud Storage;
    • TMP_DIR é um local no disco que você adicionou à VM do Compute Engine no início do tutorial.
  2. Crie um diretório temporário no disco que você adicionou à VM do Compute Engine no início do tutorial:

    (vm)$ mkdir $TMP_DIR
  3. Use o script t2t-datagen para gerar o conjunto de dados completo e a versão reduzida limpa que você usará para avaliação.

    Como a importação de áudio em t2t-datagen usa sox para gerar formas de onda normalizadas, primeiro instale-a na estação de trabalho (por exemplo, apt-get install sox) e execute os seguintes comandos.

    (vm)$  t2t-datagen --problem=librispeech --data_dir=$DATA_DIR --tmp_dir=$TMP_DIR
    (vm)$  t2t-datagen --problem=librispeech_clean --data_dir=$DATA_DIR --tmp_dir=$TMP_DIR

O problema librispeech_train_full_test_clean é treinado no conjunto de dados completo, mas é avaliado no conjunto de dados limpo.

Também é possível usar librispeech_clean_small que é uma versão pequena do conjunto de dados limpo.

Para ver os dados no Cloud Storage, acesse o console do Google Cloud Platform e selecione Armazenamento no menu à esquerda. Clique no nome do intervalo que você criou para este tutorial.

Como treinar o modelo

Para treinar um modelo no Cloud TPU, execute o treinador com lotes grandes e sequências truncadas:

(vm)$ t2t-trainer \
  --model=transformer \
  --hparams_set=transformer_librispeech_tpu \
  --problem=librispeech_train_full_test_clean \
  --train_steps=210000 \
  --eval_steps=3 \
  --local_eval_frequency=100 \
  --data_dir=$DATA_DIR \
  --output_dir=$OUT_DIR \
  --use_tpu \
  --cloud_tpu_name=$TPU_NAME

Após essa etapa, execute o treinamento novamente para conseguir mais etapas com tamanho de lote menor e sequências completas: O treinamento leva aproximadamente 11 horas em um nó de TPU v3-8.

(vm)$ t2t-trainer \
  --model=transformer \
  --hparams_set=transformer_librispeech_tpu \
  --hparams=max_length=295650,max_input_seq_length=3650,max_target_seq_length=650,batch_size=6 \
  --problem=librispeech_train_full_test_clean \
  --train_steps=230000 \
  --eval_steps=3 \
  --local_eval_frequency=100 \
  --data_dir=$DATA_DIR \
  --output_dir=$OUT_DIR \
  --use_tpu \
  --cloud_tpu_name=$TPU_NAME

Limpeza

As etapas abaixo mostram como evitar cobranças na sua conta do GCP pelo uso de recursos.

  1. Encerre a conexão com a VM do Compute Engine:

    (vm)$ exit
    

    Agora, o prompt precisa ser user@projectname, mostrando que você está no Cloud Shell.

  2. No Cloud Shell, execute ctpu delete com a sinalização --zone, usada ao configurar o Cloud TPU, para excluir a VM do Compute Engine e o Cloud TPU:

    $ ctpu delete [optional: --zone]
    
  3. Execute ctpu status para verificar se não há instâncias alocadas e evitar cobranças desnecessárias pelo uso da TPU. A exclusão pode levar vários minutos. Uma resposta como esta indica que não há mais instâncias alocadas:

    2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-b"
    No instances currently exist.
            Compute Engine VM:     --
            Cloud TPU:             --
    
  4. Execute gsutil conforme mostrado, substituindo YOUR-BUCKET-NAME pelo nome do intervalo do Cloud Storage criado para este tutorial:

    $ gsutil rm -r gs://YOUR-BUCKET-NAME
    

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…