音声文字変換モデルの選択

このページでは、Speech-to-Text の音声文字変換リクエストにおいて、特定の機械学習モデルを使用する方法について説明します。

音声文字変換モデル

Speech-to-Text は、多数の機械学習モデルのいずれか 1 つと入力を比較して、音声クリップ内の単語を検出します。各モデルは、膨大な数のサンプル(この場合は人の会話に関する多数の音声録音)を分析することでトレーニングを行ってきました。

Cloud Speech-to-Text には、特定のソース(電話での通話や動画など)の音声によってトレーニングされた特殊なモデルがあります。こうしたトレーニング プロセスのため、これらの特殊モデルは同様の音声データに適用された場合により良い結果をもたらします。

たとえば、Cloud Speech-to-Text には、電話でキャプチャされた音声を認識するようにトレーニングされた音声文字変換モデルがあります。Cloud Speech-to-Text でこのモデルを使用して電話音声の音声文字変換を行うと、他のモデルよりも著しく良い結果が得られます。

次の表に、Cloud Speech-to-Text で使用可能な音声文字変換モデルを示します。

モデル名 説明
command_and_search 音声コマンドや音声検索など、短い発話や 1 つの単語からなる発話に最適です。
phone_call 電話の通話音声に最適です(通常は 8 kHz のサンプリング レートで録音されています)。
video

動画の音声や話者が複数いる音声に最適です。音声は 16 kHz 以上のサンプリング レートで録音されていることが理想的です。

これは、標準レートよりも費用の高いプレミアム モデルです。詳細については、料金ページをご覧ください。

default 長時間の録音や口述といった、他の音声モデルに適合しない音声に最適です。16 kHz 以上のサンプリング レートで録音されたハイファイ音声であることが理想的です。

音声文字変換のモデルの選択

音声文字変換で使用する特定のモデルを指定するには、リクエストの RecognitionConfig パラメータの model フィールドに許可されている値のいずれか(videophone_callcommand_and_searchdefault)を設定する必要があります。Cloud Speech-to-Text では、speech:recognizespeech:longrunningrecognizeStreaming のどの音声認識方法でもモデルを選択できます。

プロトコル

詳細については、[speech:recognize] API エンドポイントをご覧ください。

同期音声認識を実行するには、POST リクエストを作成し、適切なリクエスト本文を指定します。次は、curl を使用した POST リクエストの例です。この例では、Google Cloud の Cloud SDK を使用するプロジェクト用に設定されたサービス アカウントのアクセス トークンを使用します。Cloud SDK のインストール、サービス アカウントでのプロジェクトの設定、アクセス トークンの取得を行う手順については、クイックスタートをご覧ください。

    curl -s -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        https://speech.googleapis.com/v1/speech:recognize \
        --data '{
        "config": {
            "encoding": "LINEAR16",
            "sampleRateHertz": 16000,
            "languageCode": "en-US",
            "model": "video"
        },
        "audio": {
            "uri": "gs://cloud-samples-tests/speech/Google_Gnome.wav"
        }
    }'
    

リクエスト本文の構成の詳細については、RecognitionConfig のリファレンス ドキュメントをご覧ください。

リクエストが成功すると、サーバーは 200 OK HTTP ステータス コードと JSON 形式のレスポンスを返します。

    {
      "results": [
        {
          "alternatives": [
            {
              "transcript": "OK Google stream stranger things from
                Netflix to my TV okay stranger things from
                Netflix playing on TV from the people that brought you
                Google home comes the next evolution of the smart home
                and it's just outside your window me Google know hi
                how can I help okay no what's the weather like outside
                the weather outside is sunny and 76 degrees he's right
                okay no turn on the hose I'm holding sure okay no I'm can
                I eat this lemon tree leaf yes what about this Daisy yes
                but I wouldn't recommend it but I could eat it okay
                Nomad milk to my shopping list I'm sorry that sounds like
                an indoor request I keep doing that sorry you do keep
                doing that okay no is this compost really we're all
                compost if you think about it pretty much everything is
                made up of organic matter and will return",
              "confidence": 0.9251011
            }
          ]
        }
      ]
    }
    

Node.js

// Imports the Google Cloud client library for Beta API
    /**
     * TODO(developer): Update client library import to use new
     * version of API when desired features become available
     */
    const speech = require('@google-cloud/speech').v1p1beta1;
    const fs = require('fs');

    // Creates a client
    const client = new speech.SpeechClient();

    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const filename = 'Local path to audio file, e.g. /path/to/audio.raw';
    // const model = 'Model to use, e.g. phone_call, video, default';
    // const encoding = 'Encoding of the audio file, e.g. LINEAR16';
    // const sampleRateHertz = 16000;
    // const languageCode = 'BCP-47 language code, e.g. en-US';

    const config = {
      encoding: encoding,
      sampleRateHertz: sampleRateHertz,
      languageCode: languageCode,
      model: model,
    };
    const audio = {
      content: fs.readFileSync(filename).toString('base64'),
    };

    const request = {
      config: config,
      audio: audio,
    };

    // Detects speech in the audio file
    const [response] = await client.recognize(request);
    const transcription = response.results
      .map(result => result.alternatives[0].transcript)
      .join('\n');
    console.log(`Transcription: `, transcription);

Python

from google.cloud import speech_v1
    import io

    def sample_recognize(local_file_path, model):
        """
        Transcribe a short audio file using a specified transcription model

        Args:
          local_file_path Path to local audio file, e.g. /path/audio.wav
          model The transcription model to use, e.g. video, phone_call, default
          For a list of available transcription models, see:
          https://cloud.google.com/speech-to-text/docs/transcription-model#transcription_models
        """

        client = speech_v1.SpeechClient()

        # local_file_path = 'resources/hello.wav'
        # model = 'phone_call'

        # The language of the supplied audio
        language_code = "en-US"
        config = {"model": model, "language_code": language_code}
        with io.open(local_file_path, "rb") as f:
            content = f.read()
        audio = {"content": content}

        response = client.recognize(config, audio)
        for result in response.results:
            # First alternative is the most probable result
            alternative = result.alternatives[0]
            print(u"Transcript: {}".format(alternative.transcript))

    

Java

/*
     * Please include the following imports to run this sample.
     *
     * import com.google.cloud.speech.v1.RecognitionAudio;
     * import com.google.cloud.speech.v1.RecognitionConfig;
     * import com.google.cloud.speech.v1.RecognizeRequest;
     * import com.google.cloud.speech.v1.RecognizeResponse;
     * import com.google.cloud.speech.v1.SpeechClient;
     * import com.google.cloud.speech.v1.SpeechRecognitionAlternative;
     * import com.google.cloud.speech.v1.SpeechRecognitionResult;
     * import com.google.protobuf.ByteString;
     * import java.nio.file.Files;
     * import java.nio.file.Path;
     * import java.nio.file.Paths;
     */

    public static void sampleRecognize() {
      // TODO(developer): Replace these variables before running the sample.
      String localFilePath = "resources/hello.wav";
      String model = "phone_call";
      sampleRecognize(localFilePath, model);
    }

    /**
     * Transcribe a short audio file using a specified transcription model
     *
     * @param localFilePath Path to local audio file, e.g. /path/audio.wav
     * @param model The transcription model to use, e.g. video, phone_call, default For a list of
     *     available transcription models, see:
     *     https://cloud.google.com/speech-to-text/docs/transcription-model#transcription_models
     */
    public static void sampleRecognize(String localFilePath, String model) {
      try (SpeechClient speechClient = SpeechClient.create()) {

        // The language of the supplied audio
        String languageCode = "en-US";
        RecognitionConfig config =
            RecognitionConfig.newBuilder().setModel(model).setLanguageCode(languageCode).build();
        Path path = Paths.get(localFilePath);
        byte[] data = Files.readAllBytes(path);
        ByteString content = ByteString.copyFrom(data);
        RecognitionAudio audio = RecognitionAudio.newBuilder().setContent(content).build();
        RecognizeRequest request =
            RecognizeRequest.newBuilder().setConfig(config).setAudio(audio).build();
        RecognizeResponse response = speechClient.recognize(request);
        for (SpeechRecognitionResult result : response.getResultsList()) {
          // First alternative is the most probable result
          SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
          System.out.printf("Transcript: %s\n", alternative.getTranscript());
        }
      } catch (Exception exception) {
        System.err.println("Failed to create the client due to: " + exception);
      }
    }