Speech-to-Text の基本

このドキュメントでは、Speech-to-Text の基本的な使い方を説明します。取り上げる内容は、Speech-to-Text に対するリクエストの種類、それらのリクエストの作成方法、リクエストに対するレスポンスの処理方法です。Speech-to-Text を使用するすべてのユーザーに、実際に API を使用する前にこのガイドと関連チュートリアルのいずれかを参照することをおすすめします。

Speech-to-Text 認識リクエスト

Speech-to-Text には 3 つの主要な音声認識方法があります。3 つの方法は次のとおりです。

  • 同期認識(REST および gRPC)では、音声データを Speech-to-Text API に送信してデータの認識を行い、すべての音声が処理されたら結果を返します。同期認識リクエストは、時間が 1 分以内の音声データに制限されます。

  • 非同期認識(REST および gRPC)では、音声データを Speech-to-Text API に送信し、長時間実行オペレーションを開始します。このオペレーションを使用することで、認識結果を定期的にポーリングできます。非同期認識リクエストは長さ 480 分までの音声データに使用します。

  • ストリーミング認識(gRPC のみ)では gRPC 双方向ストリームで提供された音声データの認識を行います。ストリーミング リクエストは、マイクからのライブ音声のキャプチャなどのリアルタイムの認識を目的として設計されています。ストリーミング認識では、音声をキャプチャしながら暫定的な結果を生成して、結果を表示できます。たとえば、ユーザーがまだ話している間に結果を表示できます。

リクエストには、音声データに加えて構成パラメータが含まれます。認識リクエストには、必要に応じて、認識ツール(保存および再利用可能な認識構成)を追加できます。

音声メタデータ

Speech-to-Text API は、ほとんどの音声ファイルについて音声メタデータを自動的に推測できます。Speech-to-Text はファイルのヘッダーを解析し、その情報に従ってデコードします。サポートされているファイル形式については、エンコード ページをご覧ください。

ヘッダーのない音声ファイルの場合、Speech-to-Text API を使用すると、認識構成に音声メタデータを明示的に指定できます。詳しくは、エンコード ページをご覧ください。

ソース素材のエンコード時に選択できる場合は、16,000 Hz のサンプルレートを使用して音声をキャプチャします。これより低い値では、音声認識の精度が低下する可能性があり、レベルを高くしても音声認識品質に目立った効果はありません。

ただし、音声データがすでに 16,000 Hz 以外の既存のサンプルレートで録音されている場合は、音声を 16,000 Hz で再サンプリングしないでください。たとえば、以前のほとんどの電話音声では 8,000 Hz のサンプルレートが使われており、正確な結果が生成されないことがあります。そのような音声を使用する必要がある場合は、ネイティブ サンプルレートで音声を Speech-to-Text API に渡します。

言語

Speech-to-Text の認識エンジンは、多様な言語をサポートしています。リクエスト構成の languageCode フィールドで、BCP-47 識別子を使用して音声の言語(および国または地域の方言)を指定します。

各機能でサポートされている言語の一覧については、言語サポートのページをご覧ください。

認識機能

Speech-to-Text API には、句読点入力の自動化単語レベルの信頼度など、追加の認識機能があります。これらは、リクエストの認識構成で有効にします。これらの機能の可用性については、上記のリンクと言語のページに記載されているサンプルコードをご覧ください。

モデルの選択

Speech-to-Text は、ML モデルのいずれか 1 つを使用して、音声ファイルの文字変換を行います。Google では、特定の音声タイプとソースに対して音声認識モデルをトレーニングしています。使用可能なモデルとリクエストでモデルを選択する方法については、モデルの選択のドキュメントをご覧ください。

埋め込み音声コンテンツ

リクエストの audio_source フィールドに content パラメータを渡すとき、音声認識リクエストに埋め込み音声が含まれます。gRPC リクエスト内のコンテンツとして渡される埋め込み音声の場合、その音声には Proto3 のシリアル化との互換性があり、バイナリデータとして渡す必要があります。REST リクエスト内のコンテンツとして渡される埋め込み音声の場合、その音声は JSON のシリアル化との互換性があり、最初に Base64 エンコードが行われている必要があります。詳細については、[音声の Base64 エンコード][base64-encoding] をご覧ください。

Google Cloud クライアント ライブラリを使用してリクエストを作成するときには、通常、このバイナリデータ(または Base64 でエンコードされたデータ)を content フィールドに直接書き出します。

URI で参照される音声を渡す

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 サービス エージェント ロールを付与します。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
    --role=roles/speech.serviceAgent

プロジェクトの IAM ポリシーの詳細については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

サービス アカウントにさらにきめ細かくアクセス権を付与するには、特定の Cloud Storage バケットへの権限を付与します。

gsutil iam ch serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com:admin \
    gs://BUCKET_NAME

Cloud Storage へのアクセスの管理の詳細については、Cloud Storage ドキュメントのアクセス制御リストの作成と管理をご覧ください。

Speech-to-Text API レスポンス

音声が処理されると、Speech-to-Text API は、同期リクエストとバッチ リクエストの SpeechRecognitionResult メッセージおよびストリーミング リクエストの StreamingRecognitionResult メッセージで、音声文字変換の結果を返します。同期リクエストとバッチ リクエストでは、RPC レスポンスに結果のリストが含まれます。認識された音声のリストが連続して表示されます。ストリーミング レスポンスの場合、is_final とマークされた結果がすべて連続して表示されます。

変換候補を選択する

正常な同期認識レスポンス内の結果に 1 つ以上の alternatives が含まれる場合があります(max_alternatives1 より大きい場合)。Speech-to-Text で、変換候補の信頼値が十分に高いと判断された場合、その変換候補はレスポンスに含まれます。レスポンスの最初の変換候補が、通常は最適な(最も可能性が高い)変換候補です。

max_alternatives1 より大きい値に設定しても、複数の変換候補が返されるとは限りません。一般に、複数の変換候補は、ストリーミング認識リクエストによって結果を取得するユーザーにリアルタイムのオプションを提供する場合に適しています。

音声文字変換テキストの処理

レスポンスで指定された各変換候補には、認識されたテキストを格納する transcript が含まれます。このような音声文字変換テキストが連続した変換候補とともに提供される場合、それらを連結する必要があります。

信頼値

confidence 値は 0.0 と 1.0 の間の推定値です。この値は、音声の各単語に割り当てられた「尤度」を集計して計算されます。数値が大きいほど、個々の単語が正しく認識された可能性が高くなります。通常、このフィールドは最上位の候補、かつ、is_final=true の結果のみに対して表示されます。たとえば、confidence 値を使用して、ユーザーに変換候補を示すか、ユーザーからの確認を求めるかどうかを指定することができます。

ただし、このモデルでは、「最」上位の結果を confidence のスコア(文の内容など)のみからではなく、より多くの信号に基づいて決めることに注意する必要があります。このため、上位の結果が最も高い信頼スコアを持たない場合があります。複数の代替候補を求めていない場合に、返された「最良の」結果の信頼値が予想より低くなることがあります。これは、あまり使われない単語が使用されている場合などに発生することがあります。あまり使われない単語が正しく認識された場合でも、低い「尤度」が割り当てられることがあります。モデルがコンテキストに基づき、その単語を最も可能性の高い単語であると判断した場合、結果の confidence 値が代替候補より低い場合でも最良の結果として返されます。

次のステップ