运行自动语音识别 (ASR) 模型

本教程介绍如何使用 Librispeech ASR 语料公开数据集和 Tensor2Tensor 在 Cloud TPU 上训练自动语音识别 (ASR) 模型。

语音识别模型只是 Tensor2Tensor 库中的模型之一。Tensor2Tensor (T2T) 是一个库,其中包含深度学习模型和数据集,还包含一组用于训练这些模型以及下载和准备数据的脚本。此模型用于将语音转换为文字。

目标

  • 创建 Cloud Storage 存储分区以保存数据集和模型输出。
  • 下载并准备 Tensor2Tensor 库数据集。
  • 运行训练作业。
  • 验证输出结果。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

请使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

在开始学习本教程之前,请检查您的 Google Cloud 项目是否已正确设置。

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

  4. 本演示使用 Google Cloud 的收费组件。请查看 Cloud TPU 价格页面估算您的费用。请务必在使用完您创建的资源以后清理这些资源,以免产生不必要的费用。

设置资源

本部分介绍如何为教程设置 Cloud Storage 存储空间、虚拟机和 Cloud TPU 资源。

  1. 打开一个 Cloud Shell 窗口。

    打开 Cloud Shell

  2. 为项目 ID 创建一个变量。

    export PROJECT_ID=project-id
    
  3. 配置 gcloud 命令行工具,以使用要在其中创建 Cloud TPU 的项目。

    gcloud config set project ${PROJECT_ID}
    
  4. 使用以下命令创建 Cloud Storage 存储分区:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
    

    此 Cloud Storage 存储分区存储您用于训练模型的数据和训练结果。本教程中使用的 ctpu up 工具会为 Cloud TPU 服务帐号设置默认权限。如果您需要更精细的权限,请查看访问级层权限

    存储分区位置必须与虚拟机 (VM) 和 TPU 节点位于同一区域。虚拟机和 TPU 节点位于特定地区,即区域内的细分。

  5. 使用 ctpu up 命令启动本教程所需的 Compute Engine 和 Cloud TPU 资源。

    ctpu up --zone=europe-west4-a \
     --vm-only \
     --disk-size-gb=300 \
     --machine-type=n1-standard-8 \
     --tf-version=1.15.3 \
     --name=auto-speech-recog-tutorial

    如需详细了解 CTPU 实用程序,请参阅 CTPU 参考

  6. 在出现提示时,按 y 创建 Cloud TPU 资源。

ctpu up 命令执行完毕后,验证 shell 提示符已从 username@projectname 更改为 username@vm-name。此变化表明您现已登录 Compute Engine 虚拟机。如果您未连接到 Compute Engine 实例,则可通过运行以下命令进行连接:

gcloud compute ssh auto-speech-recog-tutorial --zone=europe-west4-a

从现在开始,前缀 (vm)$ 表示您应该在 Compute Engine 虚拟机实例上运行该命令。

  1. 为目录创建以下环境变量:

    (vm)$ STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ TPU_NAME=auto-speech-recog-tutorial
    (vm)$ DATA_DIR=$STORAGE_BUCKET/data/
    (vm)$ OUT_DIR=$STORAGE_BUCKET/output
    (vm)$ export TMP_DIR=~/tmp
    

生成训练和评估数据集

T2T 将适用于许多常用开源数据集的数据生成功能打包在其 t2t-datagen 脚本中,使您可以非常方便地应用。该脚本会下载数据,对其进行预处理,并针对训练对其进行准备。

在您的 Compute Engine 虚拟机上:

  1. 使用 t2t-datagen 脚本生成完整数据集和用于评估的较小纯净数据集。

    t2t-datagen 中的音频导入使用 sox 生成标准化波形。将其安装在 Compute Engine 虚拟机上,然后运行以下 t2t-datagen 命令。

    (vm)$  sudo apt-get install sox
    (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

librispeech_train_full_test_clean 问题虽然使用完整数据集进行训练,但使用纯净数据集进行评估。

您还可以使用 librispeech_clean_small,这是纯净数据集的较小版本。

您可以访问 Google Cloud Console 并从左侧菜单中选择存储,来查看 Cloud Storage 上的数据。点击您为本教程创建的存储分区的名称。

训练模型

如需在 Cloud TPU 上训练模型,请使用大批量和截断序列运行训练程序。

(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

完成此步骤后,使用较小批量和完整序列通过更多步骤再次运行训练。此训练在 v3-8 TPU 节点上大约需要 11 个小时。

(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

清理

为避免因本教程中使用的资源导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

  1. 断开与 Compute Engine 实例的连接(如果您尚未这样做):

    (vm)$ exit
    

    您的提示符现在应为 username@projectname,表明您位于 Cloud Shell 中。

  2. 在您的 Cloud Shell 中,使用您在设置 Cloud TPU 时所用的 --zone 标志运行 ctpu delete,以删除 Compute Engine 虚拟机和 Cloud TPU:

    $ ctpu delete --zone=europe-west4-a \
      --name=auto-speech-recog-tutorial
    
  3. 运行 ctpu status 以确保未分配任何实例,避免产生不必要的 TPU 使用费。删除操作可能需要几分钟时间才能完成。 如下所示的响应表明不再有已分配的实例:

    2018/04/28 16:16:23 WARNING: Setting zone to "europe-west4-a"
    No instances currently exist.
            Compute Engine VM:     --
            Cloud TPU:             --
    
  4. 如下所示运行 gsutil,将 bucket-name 替换为您为本教程创建的 Cloud Storage 存储分区的名称:

    $ gsutil rm -r gs://bucket-name
    

后续步骤

在本教程中,您已使用示例数据集训练了自动语音识别模型。此训练的结果(在大多数情况下)不能用于推断。要使用模型进行推断,您可以在公开提供的数据集或您自己的数据集上训练数据。在 Cloud TPU 上训练的模型要求数据集采用 TFRecord 格式。

您可以使用数据集转换工具示例将图片分类数据集转换为 TFRecord 格式。如果您未使用图片分类模型,则必须自行将数据集转换为 TFRecord 格式。如需了解详情,请参阅 TFRecord 和 tf.Example

超参数调节

如需使用数据集提升模型的性能,您可以调节模型的超参数。您可以在 GitHub 上寻找所有 TPU 支持模型通用的超参数的相关信息。您可以在每个模型的源代码中寻找模型专用超参数的相关信息。如需详细了解超参数调节,请参阅超参数调节概览使用超参数调节服务调节超参数

推理

训练模型后,您可以使用该模型进行推断(也称为预测)。AI Platform 是一款基于云的解决方案,用于开发、训练部署机器学习模型。部署模型后,您可以使用 AI Platform Prediction 服务