自動音声認識(ASR)モデルの実行

このチュートリアルでは、一般公開されている Librispeech ASR コーパスのデータセットを Tensor2Tensor とともに使用して、Cloud TPU 上で自動音声認識(ASR)モデルのトレーニングを行う方法を説明します。

音声認識モデルは、Tensor2Tensor ライブラリのモデルの 1 つです。Tensor2Tensor(T2T)は、ディープ ラーニング モデルとデータセットのライブラリであり、また、モデルのトレーニングとデータのダウンロードや準備に使用できるスクリプトのセットです。このモデルでは、音声からテキストへの変換が行われます。

目標

  • データセットとモデルの出力を格納する Cloud Storage バケットを作成します。
  • Tensor2Tensor ライブラリ データセットをダウンロードして準備します。
  • トレーニング ジョブを実行します。
  • 出力結果を確認します。

費用

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

このチュートリアルを開始する前に、Google Cloud プロジェクトが正しく設定されていることを確認します。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  6. このチュートリアルでは、Google Cloud の課金対象となるコンポーネントを使用します。費用を見積もるには、Cloud TPU の料金ページを確認してください。不要な課金を回避するために、このチュートリアルを完了したら、作成したリソースを必ずクリーンアップしてください。

リソースを設定する

このセクションでは、チュートリアルで使用する Cloud Storage のバケット、VM、Cloud TPU の各リソースを設定する方法を説明します。

  1. Cloud Shell ウィンドウを開きます。

    Cloud Shell を開く

  2. プロジェクト ID の変数を作成します。

    export PROJECT_ID=project-id
    
  3. Cloud TPU を作成するプロジェクトを使用するように gcloud コマンドライン ツールを構成します。

    gcloud config set project ${PROJECT_ID}
    

    このコマンドを新しい Cloud Shell VM で初めて実行すると、Authorize Cloud Shell ページが表示されます。ページの下部にある [Authorize] をクリックして、gcloud に認証情報を使用した GCP API の呼び出しを許可します。

  4. Cloud TPU プロジェクトのサービス アカウントを作成します。

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    このコマンドでは、Cloud TPU サービス アカウントを次の形式で返します。

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. 次のコマンドを使用して Cloud Storage バケットを作成します。

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

    この Cloud Storage バケットには、モデルのトレーニングに使用するデータとトレーニング結果が格納されます。このチュートリアルで使用する gcloud ツールは、Cloud TPU サービス アカウントのデフォルトの権限を設定します。権限の詳細な設定が必要な場合は、アクセスレベル権限をご覧ください。

    バケットのロケーションは、仮想マシン(VM)および TPU ノードと同じリージョンにする必要があります。VM と TPU ノードは、リージョン内のサブディビジョンである特定のゾーンに配置されます。

  6. gcloud compute tpus execution-groups コマンドを使用して、このチュートリアルに必要な Compute Engine リソースと Cloud TPU リソースを起動します。

    $ gcloud compute tpus execution-groups create \
     --name=auto-speech-recog-tutorial \
     --zone=europe-west4-a \
     --tf-version=1.15.5 \
     --machine-type=n1-standard-8 \
     --disk-size=600 \
     --accelerator-type=v3-8
    

    コマンドフラグの説明

    name
    作成する Cloud TPU の名前。
    zone
    Cloud TPU を作成するゾーン
    tf-version
    Tensorflow gcloud のバージョンが VM にインストールされます。
    machine-type
    作成する Compute Engine VM のマシンタイプ
    disk-size-gb
    gcloud コマンドで作成された VM のハードディスクのサイズ(GB)。
    accelerator-type
    作成する Cloud TPU のタイプ

    gcloud コマンドの詳細については、gcloud リファレンスをご覧ください。

  7. 指定した構成が表示されます。承認する場合は y、キャンセルする場合は n を入力してください。

    gcloud コマンドの実行が終了したら、shell プロンプトが username@project から username@vm-name に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。

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

これ以降、接頭辞 (vm)$ は Compute Engine VM インスタンスでコマンドを実行する必要があることを意味します。

  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 VM の場合:

  1. t2t-datagen スクリプトを使用して、完全版のデータセットと、サイズがより小さいクリーン バージョンの両方を生成します。サイズが小さいほうは、評価に使用します。

    t2t-datagen でのオーディオ インポートでは、sox を使用して、正規化された波形が生成されます。それを Compute Engine VM にインストールしてから、後続の 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 これはクリーンなデータセットの小さい方のバージョンです。

Cloud Storage のデータを表示するには、Google Cloud Console に移動し、左側のメニューから [ストレージ] を選択します。このチュートリアルで作成したバケットの名前をクリックします。

モデルのトレーニング

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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

  1. Compute Engine VM との接続を解除します。

    (vm)$ exit
    

    プロンプトが user@projectname に変わります。これは、現在、Cloud Shell 内にいることを示しています。

  2. Cloud Shell で、次の gcloud compute tpus execution-groups コマンドを使用して Compute Engine VM と Cloud TPU を削除します。

    $ gcloud compute tpus execution-groups delete auto-speech-recog-tutorial \
      --zone=europe-west4-a
    
  3. gcloud compute tpus execution-groups list を実行して、リソースが削除されたことを確認します。削除には数分かかることがあります。以下のようなレスポンスは、インスタンスが正常に削除されたことを示します。

    $ gcloud compute tpus execution-groups list \
      --zone=europe-west4-a
    
       NAME             STATUS
    
  4. 次に示すように、gsutil を使用して Cloud Storage バケットを削除します。bucket-name を Cloud Storage バケットの名前に置き換えます。

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

次のステップ

TensorFlow Cloud TPU のチュートリアルでは通常、サンプル データセットを使用してモデルをトレーニングします。このトレーニングの結果は(ほとんどの場合)推論には使用できません。モデルを推論に使用するには、一般公開されているデータセットまたは独自のデータセットでデータをトレーニングします。Cloud TPU でトレーニングされた TensorFlow モデルは通常、データセットを TFRecord 形式にする必要があります。

データセット変換ツールのサンプルを使用して、画像分類データセットを TFRecord 形式に変換できます。画像分類モデルを使用しない場合は、自分でデータセットを TFRecord 形式に変換する必要があります。詳細については、TFRecord と tf.Example をご覧ください。

ハイパーパラメータ調整

データセットでモデルのパフォーマンスを向上させるには、モデルのハイパーパラメータを調整します。すべての TPU でサポートされているモデルに共通のハイパーパラメータに関する情報については、GitHub をご覧ください。モデルに固有のハイパーパラメータに関する情報については、各モデルのソースコードで確認できます。ハイパーパラメータ調整の詳細については、ハイパーパラメータ調整の概要ハイパーパラメータ調整サービスの使用ハイパーパラメータを調整するをご覧ください。

推論

モデルをトレーニングしたら、そのモデルを推論(予測)に使用できます。AI Platform は、機械学習モデルを開発、トレーニングデプロイするためのクラウドベースのソリューションです。モデルをデプロイすれば、AI Platform Prediction サービスを使用できるようになります。