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

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

音声文字変換モデル

Cloud 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:recognizeAPI エンドポイントをご覧ください。

同期音声認識を実行するには、POST リクエストを作成し、適切なリクエスト本文を指定します。以下は、curl を使用した POST リクエストの例です。この例では、Google Cloud Platform 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

def transcribe_model_selection(speech_file, model):
    """Transcribe the given audio file synchronously with
    the selected model."""
    from google.cloud import speech
    client = speech.SpeechClient()

    with open(speech_file, 'rb') as audio_file:
        content = audio_file.read()

    audio = speech.types.RecognitionAudio(content=content)

    config = speech.types.RecognitionConfig(
        encoding=speech.enums.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=16000,
        language_code='en-US',
        model=model)

    response = client.recognize(config, audio)

    for i, result in enumerate(response.results):
        alternative = result.alternatives[0]
        print('-' * 20)
        print('First alternative of result {}'.format(i))
        print(u'Transcript: {}'.format(alternative.transcript))

Java

/**
 * Performs transcription of the given audio file synchronously with the selected model.
 *
 * @param fileName the path to a audio file to transcribe
 */
public static void transcribeModelSelection(String fileName) throws Exception {
  Path path = Paths.get(fileName);
  byte[] content = Files.readAllBytes(path);

  try (SpeechClient speech = SpeechClient.create()) {
    // Configure request with video media type
    RecognitionConfig recConfig =
        RecognitionConfig.newBuilder()
            // encoding may either be omitted or must match the value in the file header
            .setEncoding(AudioEncoding.LINEAR16)
            .setLanguageCode("en-US")
            // sample rate hertz may be either be omitted or must match the value in the file
            // header
            .setSampleRateHertz(16000)
            .setModel("video")
            .build();

    RecognitionAudio recognitionAudio =
        RecognitionAudio.newBuilder().setContent(ByteString.copyFrom(content)).build();

    RecognizeResponse recognizeResponse = speech.recognize(recConfig, recognitionAudio);
    // Just print the first result here.
    SpeechRecognitionResult result = recognizeResponse.getResultsList().get(0);
    // There can be several alternative transcripts for a given chunk of speech. Just use the
    // first (most likely) one here.
    SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
    System.out.printf("Transcript : %s\n", alternative.getTranscript());
  }
}

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Speech-to-Text ドキュメント
ご不明な点がありましたら、Google のサポートページをご覧ください。