Cloud Speech-to-Text は、Google の音声認識技術をデベロッパーのアプリケーションに統合できる API です。このドキュメントでは、Cloud Speech-to-Text の基本的な使い方について説明します。取り上げる内容は、Cloud STT に対して行えるリクエストの種類、それらのリクエストの作成方法、リクエストに対するレスポンスの処理方法です。API の使用を開始する前に、このガイドと関連チュートリアルのいずれかをお読みください。
Cloud Speech-to-Text 認識リクエスト
Cloud Speech-to-Text(STT)には 3 つの主要な音声認識方法があります。次のメソッドを使用できます。
同期認識(REST および gRPC)では、音声データを Cloud Speech-to-Text API に送信してデータの認識を行い、すべての音声が処理されたら結果を返します。同期認識リクエストは、1 分以内の音声データを処理します。
非同期認識(REST および gRPC)では、音声データを Cloud Speech-to-Text API に送信し、長時間実行オペレーションを開始します。このオペレーションを使用することで、認識結果を定期的にポーリングできます。非同期認識リクエストは長さ 480 分までの音声データに使用します。
ストリーミング認識(gRPC のみ)では gRPC 双方向ストリームで提供された音声データの認識を行います。ストリーミング リクエストは、マイクからのライブ音声のキャプチャなどのリアルタイムの認識を目的として設計されています。ストリーミング認識では、音声をキャプチャしながら暫定的な結果を生成します。たとえば、ユーザーがまだ話している間に結果を表示できます。
リクエストには、音声データに加えて構成パラメータが含まれます。認識リクエストには、必要に応じて、認識ツール(保存および再利用可能な認識構成)を追加できます。
音声メタデータ
Cloud Speech-to-Text API は、ほとんどの音声ファイルについて音声メタデータを自動的に推測できます。Cloud STT はファイルのヘッダーを解析し、その情報に従ってデコードします。サポートされているファイル形式については、エンコード ページをご覧ください。
ヘッダーのない音声ファイルの場合、Cloud Speech-to-Text API を使用すると、認識構成に音声メタデータを明示的に指定できます。詳しくは、エンコード ページをご覧ください。
ソース素材のエンコード時に選択できる場合は、16,000 Hz のサンプルレートを使用して音声をキャプチャします。これより低い値では、音声認識の精度が低下する可能性があり、レベルを高くしても音声認識品質に目立った効果はありません。
ただし、音声データがすでに 16,000 Hz 以外の既存のサンプルレートで録音されている場合は、音声を 16,000 Hz で再サンプリングしないでください。たとえば、以前のほとんどの電話音声では 8,000 Hz のサンプルレートが使われており、正確な結果が生成されないことがあります。そのような音声を使用する必要がある場合は、オリジナル サンプルレートで音声を Cloud Speech-to-Text API に渡します。
言語
Cloud STT の認識エンジンは、多様な言語をサポートしています。リクエスト構成の languageCode フィールドで、BCP-47 識別子を使用して音声の言語(および国または地域の方言)を指定します。
各機能でサポートされている言語の一覧については、サポートされている言語のページをご覧ください。
認識機能
Cloud Speech-to-Text API には、句読点入力の自動化や単語レベルの信頼度など、追加の認識機能があります。これらの機能は、リクエストの認識構成で有効にします。機能の可用性については、指定されたリンクと言語のページに記載されているサンプルコードをご覧ください。
モデルの選択
Cloud STT は、ML モデルのいずれか 1 つを使用して、音声ファイルの文字変換を行います。Google では、特定の音声タイプとソースに対して音声認識モデルをトレーニングしています。使用可能なモデルとリクエストでモデルを選択する方法については、モデルの選択のドキュメントをご覧ください。
埋め込み音声コンテンツ
リクエストの audio_source フィールドに content パラメータを渡すことで、音声認識リクエストに埋め込み音声を含めることができます。gRPC リクエスト内のコンテンツとして渡される埋め込み音声の場合、その音声には Proto3 のシリアル化との互換性があり、バイナリデータとして渡す必要があります。REST リクエスト内のコンテンツとして渡される埋め込み音声の場合、その音声は JSON のシリアル化との互換性があり、最初に Base64 エンコードが行われている必要があります。詳細については、音声の Base64 エンコードをご覧ください。
Google Cloud クライアント ライブラリを使用してリクエストを作成するとき、通常はこのバイナリデータ(または Base64 でエンコードされたデータ)を content フィールドに直接書き出します。
URI で参照される音声を渡す
Cloud Speech-to-Text API リクエストの audio_source フィールド内に uri パラメータを渡し、Cloud Storage 上の音声ファイル(Base64 ではなく、バイナリ形式)を指定するのが一般的な方法です。この場合、次の形式にします。
gs://bucket-name/path/to/audio/file
Speech-to-Text は、サービス アカウントを使用して Cloud Storage 内のファイルにアクセスします。デフォルトでは、サービス アカウントは同じプロジェクト内の Cloud Storage ファイルにアクセスできます。
サービス アカウントのメールアドレスは次のとおりです。
service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com
別のプロジェクトの Cloud Storage ファイルを音声文字変換するには、このサービス アカウントにもう一方のプロジェクトの [Speech-to-Text サービス エージェント][speech-service-agent] ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
--role=roles/speech.serviceAgentプロジェクトの IAM ポリシーの詳細については、[プロジェクト、フォルダ、組織へのアクセス権の管理][manage-access] をご覧ください。
サービス アカウントにさらにきめ細かくアクセス権を付与するには、特定の Cloud Storage バケットへの権限を付与します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
--role=roles/storage.adminCloud Storage へのアクセスの管理について詳しくは、Cloud Storage ドキュメントの [アクセス制御リストの作成と管理][buckets-manage-acl] をご覧ください。
Cloud Speech-to-Text API レスポンス
Cloud Speech-to-Text API は、音声を処理すると、同期リクエストとバッチ リクエストの SpeechRecognitionResult メッセージと、ストリーミング リクエストの StreamingRecognitionResult メッセージで、音声文字変換の結果を返します。同期リクエストとバッチ リクエストでは、RPC レスポンスに結果のリストが含まれます。認識された音声のリストが連続して表示されます。ストリーミング レスポンスの場合、is_final とマークされた結果がすべて連続して表示されます。
変換候補を選択する
正常な同期認識レスポンス内の各結果には、1 つ以上の alternatives が含まれる場合があります(max_alternatives が 1 より大きい場合)。Cloud STT で、変換候補の信頼値が十分に高いと判断された場合、その変換候補はレスポンスに含まれます。レスポンスの最初の変換候補が、通常は最適な(最も可能性が高い)変換候補です。
max_alternatives を 1 より大きい値に設定しても、複数の変換候補が返されるとは限りません。一般に、複数の変換候補は、ストリーミング認識リクエストによって結果を取得するユーザーにリアルタイムのオプションを提供する場合に適しています。
音声文字変換テキストの処理
レスポンスの各変換候補には、認識されたテキストを含む transcript が含まれます。連続した変換候補を受け取った場合は、これらの文字起こしを連結します。
信頼度値
confidence 値は 0.0 と 1.0 の間の推定値です。この値は、音声の各単語に割り当てられた「尤度」を集計して計算されます。数値が大きいほど、個々の単語が正しく認識されている推定尤度が高いことが示されます。通常、このフィールドは最上位の候補、かつ、is_final=true の結果のみに対して表示されます。たとえば、confidence 値を使用して、変換候補を表示するか、確認を求めるかどうかを指定できます。
ただし、このモデルでは、「最」上位の結果を confidence のスコア(文の内容など)のみからではなく、より多くの信号に基づいて決めることに注意する必要があります。このため、上位の結果が最も高い信頼スコアを持たない場合があります。複数の代替候補を求めていない場合に、「最良の」結果の信頼値が予想より低くなることがあります。これは、あまり使われない単語が使用されている場合などに発生することがあります。あまり使われない単語が正しく認識された場合でも、低い「尤度」が割り当てられることがあります。モデルがコンテキストに基づき、その単語を最も可能性の高い単語であると判断した場合、結果の confidence 値が代替候補より低い場合でも最良の結果として返されます。
次のステップ
- クライアント ライブラリを使用して、好みのプログラミング言語で音声文字変換を行う。
- 短い音声ファイルを文字に変換する方法を学習する。
- ストリーミング音声を文字に変換する方法を学習する。
- 長い音声ファイルを文字に変換する方法を学習する。