音声適応により音声文字変換の出力を改善する

概要

音声適応機能を使用すると、Speech-to-Text では、特定の単語やフレーズが、他に示された候補よりも高い頻度で認識されます。たとえば、音声データに「weather」という単語が含まれているとします。Speech-to-Text が「weather」という単語を検出した場合、「whether」よりも多く「weather」と文字変換されることが理想的です。この例では、音声適応で Speech-to-Text が「weather」と認識するようにバイアスをかけます。

音声適応は、特に次のような場合に役立ちます。

  • 音声データで頻繁に使用される単語やフレーズの精度を改善する。たとえば、一般ユーザーがよく発する音声コマンドを、認識モデルに知らせることが可能です。

  • Speech-to-Text によって認識される語彙を増加させる。Speech-to-Text には大量の語彙が含まれています。ただし、音声データに一般的な言語ではほとんど使用されない単語(ドメイン固有の単語など)が含まれている場合は、音声適応を使用して追加できます。

  • 音声にノイズが含まれている場合や、鮮明でない場合に音声文字変換の精度を改善する。

必要に応じて、音声適応ブースト機能(ベータ版)を使用して、認識モデルのバイアスを微調整できます。

指定した単語の認識精度を向上させる

Speech-to-Text が音声データを文字変換するときに「weather」を認識する確率を高めるには、SpeechContext オブジェクトの phrases フィールドに「weather」を渡します。Speech-to-Text API に対するリクエストで SpeechContext オブジェクトを RecognitionConfig オブジェクトの speechContexts フィールドに割り当てます。

次のスニペットは、Speech-to-Text API に送信される JSON ペイロードの一部を表しています。JSON スニペットにより、単語「weather」が音声適応に与えられます。

"config": {
    "encoding":"LINEAR16",
    "sampleRateHertz": 8000,
    "languageCode":"en-US",
    "speechContexts": [{
      "phrases": ["weather"]
    }]
}

複数単語のフレーズの認識精度を向上させる

フレーズを指定することで、Speech-to-Text がその単語の並びを認識しやすくなります。フレーズを提供することで、個々の単語を含むフレーズの一部を認識する確率も高まります。これらのフレーズの数とサイズの制限については、コンテンツの制限ページをご覧ください。

次のスニペットは、Speech-to-Text API に送信される JSON ペイロードの一部を表しています。JSON スニペットには、SpeechContext オブジェクトの phrases フィールドに割り当てられた複数単語のフレーズの配列が含まれています。

"config": {
    "encoding":"LINEAR16",
    "sampleRateHertz": 8000,
    "languageCode":"en-US",
    "speechContexts": [{
      "phrases": ["weather is hot", "weather is cold"]
    }]
}

クラスを使用して認識精度を向上させる

クラスとは、通貨単位やカレンダー日付など、自然言語で発生する一般的なコンセプトを表します。クラスにより、共通のコンセプトに対応する大規模な単語グループの音声文字変換の精度を向上できますが、必ずしも同一の単語やフレーズを含むとは限りません。

たとえば、お住まいの地域の住所を音声で録音したとします。「My house is 123 Main Street, the fourth house on the left.」という音声が録音されていたとしましょう。この場合、Speech-to-Text により「123」という数の並びは、「百二十三」という数値としてではなく、番地として認識されることが望ましいと思われます。しかし、すべての人が同じ住所「123 Main Street」に住んでいるわけではありません。可能なすべての番地を SpeechContext オブジェクトに一覧表示することは実用的ではありません。代わりに、クラスを使用して、実際の番号に関わりなく、番地を認識させることができます。この例では、Speech-to-Text では「123 メイン ストリート」や「987 大通り」などの語句は番地として認識されるため、より正確に文字変換されます。

クラストークン

音声適応でクラスを使用するには、SpeechContext オブジェクトの phrases フィールドにクラストークンを含めます。ご利用の言語で使用できるトークンを確認するには、サポートされているクラストークンの一覧をご覧ください。たとえば、ソース音声からの住所番号の音声文字変換を改善するには、SpeechContext オブジェクトに値 $ADDRESSNUM を指定します。

クラスは、phrases 配列のスタンドアロン アイテムとして使用することも、1 つ以上のクラストークンを複数の単語からなるフレーズに埋め込むこともできます。たとえば、文字列にクラストークン ["my address is $ADDRESSNUM"] を含めることで、より多くのフレーズで住所番号を指定できます。ただし、「I am at 123 Main Street」など、類似しているが同一ではないフレーズが含まれている場合には役立ちません。類似のフレーズを認識しやすくするためには、クラストークン ["my address is $ADDRESSNUM", "$ADDRESSNUM"] を単独で追加することが重要です。無効または異常なクラストークンを使用した場合、Speech-to-Text はエラーを発生させずトークンを無視しますが、それ以外のフレーズはコンテキストで使用されます。

次のスニペットは、Speech-to-Text API に送信される JSON ペイロードの例を示しています。JSON スニペットには、クラストークンを使用する SpeechContext オブジェクトが含まれます。

  "config": {
    "encoding":"LINEAR16",
    "sampleRateHertz": 8000,
    "languageCode":"en-US",
    "speechContexts": [{
      "phrases": ["$ADDRESSNUM"]
     }]
  }

ブースト(ベータ版)を使用して音声文字変換結果を微調整する

デフォルトでは、音声適応から得られる効果は、特に 1 語句の場合は比較的小さなものです。音声適応ブースト機能では、一部のフレーズに対して、他のフレーズよりも高い重み付けを割り当てることで、認識モデルのバイアスを増やすことができます。1)音声適応をすでに実装していて、2)音声文字変換の結果に対して音声適応効果の強度をさらに調整する必要がある場合は、ブーストを実装することをおすすめします。ブーストの機能がお使いの言語で利用可能かどうかを確認するには、言語サポートのページをご覧ください。

たとえば、「fare」よりも「fair」という単語が頻繁に出現する状況で、「fare to get into the county fair」と尋ねる録音が多くあるとします。この場合は、音声適応を使用して「fair」と「fare」を SpeechContext オブジェクトに追加すると、モデルがこの両方を認識する確率を向上させることができます。これにより、「hare」や「lair」などよりも高い頻度で「fair」と「fare」と認識するよう Speech-to-Text に指示されます。

ただし、「fair」は音声においてより頻繁に出現するため、「fare」よりも高い頻度で認識されなければなりません。すでに、Speech-to-Text API を使用して音声を文字変換し、正しい単語(「fair」)を認識し損ねるエラーを多数見つけているかもしれません。この場合、ブースト機能を使用して、「fare」よりも「fair」により高いブーストを割り当てることをおすすめします。「fair」に割り当てる重み付け値を高くすると、Speech-to-Text API が「fare」よりも「fair」を頻繁に選択するようにバイアスが適用されます。ブースト値を割り当てていない場合、認識モデルは「fare」と「fare」を同じ確率で認識します。

ブーストの基礎

ブーストを使用する場合は、SpeechContext オブジェクトの phrases 項目に重み付け値を割り当てます。Speech-to-Text は、音声データ内の単語の文字変換候補を選択するときに、この重み付け値を参照します。この値が大きいほど、Speech-to-Text が文字変換候補からその単語や語句を選択する可能性が高くなります。

複数単語のフレーズにブースト値を適用すると、ブーストはフレーズ全体に(フレーズ全体にのみ)適用されます。たとえば、「My favorite extract in American Museum of Natural History is the blue wheat」というフレーズにブースト値を割り当てます。このフレーズを SpeechContext オブジェクトに追加し、ブースト値を割り当てると、認識モデルはそのフレーズを全体として逐語的に認識する可能性が高くなります。

複数単語のフレーズにブーストを適用しても、期待する結果が得られない場合は、そのフレーズ内のすべてのバイグラム(順序のある 2 単語)を phrases 項目に追加し、それぞれにブースト値を割り当てます。上記の例の場合、バイグラムとエンドグラム(3 つ以上の単語)をさらに追加して、確認してください(たとえば、「my favorite」、「my favorite exhibit」、「favorite exhibit」、「my favorite exhibit at the American Museum of Natural History」、「American Museum of Natural History」、「blue whale」など)。これにより、STT 認識モデルは、元のブーストされたフレーズの一部を含むものの、逐語的には一致しない音声内の関連フレーズを認識する可能性が高くなります。

強調数値の設定

強調数値には 0 より大きい浮動小数点数値を指定してください。ブースト値の実質的な上限値は 20 です。最適な結果を得るには、ブースト値を調整して音声文字変換結果を確認して、正しい音声文字変換結果が得られるようにします。

ブースト値を大きくすると、認識漏れ(音声に出現する単語や語句が Speech-to-Text で正しく認識されない)が少なくなります。ただし、ブーストを使用すると過剰検出(音声に出現していない単語や語句が音声文字変換に出力される)の可能性は高くなります。

音声適応ブーストの例

音声文字変換リクエストで「fair」と「fare」に異なるブースト値を設定するには、2 つの SpeechContext オブジェクトを RecognitionConfig オブジェクトの speechContexts 配列に設定します。一つは「fair」、もう一つは「fare」を含む各 SpeechContext オブジェクトに対して、boost 値に正の浮動小数点値を設定します。

次のスニペットは、Speech-to-Text API に送信される JSON ペイロードの例を示しています。JSON スニペットには、ブースト値を使用して「fair」と「fare」の語句に異なる重み付けをした RecognitionConfig オブジェクトが含まれています。

"config": {
    "encoding":"LINEAR16",
    "sampleRateHertz": 8000,
    "languageCode":"en-US",
    "speechContexts": [{
      "phrases": ["fair"],
      "boost": 15
     }, {
      "phrases": ["fare"],
      "boost": 2
     }]
  }

次のステップ