IBM Cloud Docs
音声解析

音声解析

IBM Watson® Speech to Text サービスには、サービスが音声を解析して最終的な書き起こし結果を生成する方法を決定する複数の機能が用意されています。

  • 句の終わりの無音時間は、サービスが書き起こしを複数の最終結果に分割する休止間隔の期間を指定します。
  • 句の終わりで書き起こしを分割すると、文などのセマンティック機能の書き起こしを複数の最終結果に分割するようにサービスに指示します。
  • 文字挿入バイアスは、次世代モデルで書き起こしの仮説を立てる際に、より短い文字シーケンスまたはより長い文字シーケンスを優先するようにサービスに指示します。

句の終わりの無音時間

end_of_phrase_silence_time パラメーターは、サービスが書き起こしを複数の最終結果に分割することになる休止間隔の時間を指定します。 音声ストリームの終わりに到達する前に休止や長い無音をサービスが検出した場合は、応答に複数の最終結果が含まれる可能性があります。 無音とは、発話される単語や句の間で話者が休止する瞬間を表します。 ほとんどの言語では、デフォルトの休止間隔は 0.8 秒です。中国語の場合、デフォルトの間隔は 0.6 秒です。 詳しくは、休止と無音を参照してください。

end_of_phrase_silence_time パラメーターを使用して、異なる休止間隔を示す 0.0 秒から 120.0 秒までの倍精度値を指定できます。

  • 0 より大きい値は、音声認識のためにサービスで使用する間隔を示します。
  • 0 の値は、サービスでデフォルトの間隔を使用することを示します。 これは、パラメーターを省略することと同じです。

このパラメーターを使用して、最終結果の生成頻度と書き起こしの正確度のバランスを取ることができます。

  • 休止間隔を長くすると、最終結果の数が少なくなり、各結果に含まれる音声セグメントが大きくなります。 セグメントが大きくなるほど、音声を書き起こすために使用できるコンテキストが増えるので、正確度が増す傾向があります。

    しかし、休止間隔が長いことは、最終結果の待ち時間に直接影響します。 入力音声の最後の単語が発話された後、サービスは指定された間隔が経過するまで待機してから、応答を返す必要があります。 サービスは待機することで、長い間隔の後に入力音声の続きがないことを確認します (WebSocket インターフェースでは、中間結果を要求するかどうかに関係なく、このパラメーターを設定することで最終結果の待ち時間と正確度に影響を与える可能性があります)。

  • 休止間隔を短くすると最終結果の数が増えますが、各音声セグメントが小さくなるので、書き起こしの正確度はあまり良くない可能性があります。 待ち時間が非常に重要で、書き起こしの正確度が低下しないと予想される場合や低下を許容できる場合は、小さいセグメントも許容できます。

    また、複数句文法は、1 つの最終結果内でのみ、応答を認識 (応答と一致) します。 文法を使用して複数のストリングを認識する場合は、休止間隔を長くすることで、複数の最終結果を受け取ることを回避できます。

待ち時間よりも正確度が重要な場合は、間隔を長くしてください。 話者が短い句または単一語応答を発話することが予想される場合は、間隔を短くしてください。

*前世代モデルの場合、*サービスは、発話が最大 2 分に達すると、音声の最終結果を生成します。 サービスは、2 分間の継続的な処理の後、書き起こしを複数の最終結果に分割します。

句の終わりの無音時間の例

以下の要求の例で、end_of_phrase_silence_time パラメーターを使用する効果について説明します。 音声は、"one two three four five six" というフレーズを読み上げるもので、"three" と "four" の間に 1 秒の休止があります。 例えば、話者が ID カードの 6 桁の数字を読み上げ、数字を確認するために休止するというような状況です。

最初の例では、デフォルトの休止間隔である 0.8 秒を使用します。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize"

休止がデフォルトの間隔よりも長いので、休止時点で書き起こしは分割されています。 どちらの結果も confidence0.99 であるため、休止にもかかわらず書き起こしの正確度は非常に高くなりました。

{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.99,
          "transcript": "one two three "
        }
      ],
      "final": true
    },
    {
      "alternatives": [
        {
          "confidence": 0.99,
          "transcript": "four five six "
        }
      ],
      "final": true
    }
  ]
}

一方、6 桁の数字をユーザーが単一句応答で話すことを予期する文法を使用して、音声認識を実行することを想定してください。 1 秒の休止時点でサービスによって書き起こしが分割されるので、結果は空になります。 どちらの最終結果にも文法が適用されますが、「one two three」にも「four five six」にも 6 桁の数字は含まれていません。

2 番目の例では、同じ音声を使用しますが、end_of_phrase_silence_time を 1.5 秒に設定します。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize?end_of_phrase_silence_time=1.5"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize?end_of_phrase_silence_time=1.5"

この値は話者の休止よりも長いので、発話句全体が含まれた単一の最終結果が返されています。 6 桁の数字が見つかることを予期する文法は、この書き起こしを認識します。

{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "confidence": 1.0,
          "transcript": "one two three four five six "
        }
      ],
      "final": true
    }
  ]
}

句の終わりでの書き起こしの分割

split_transcript_at_phrase_end パラメーターは、入力の意味素性に基づいて、書き起こしを複数の最終結果に分割するようにサービスに指示します。 このパラメーターを true に設定すると、サービスは、意味のある句 (文など) の終わりで書き起こしを分割します。 サービスの意味素性の理解性能は、要求に使用する基本言語モデルと、使用するカスタム言語モデルまたは文法がベースになります。 カスタム言語モデルおよび文法は、サービスが書き起こしを分割する方法と場所に影響を与えることがあります。

カスタム言語モデルを音声認識に適用すると、モデルのコーパスの内容と性質に基づいて、サービスが書き起こしを分割する可能性が高くなります。 例えば、コーパスに短い文が多く含まれているモデルを適用すると、コーパスを模倣して入力を複数の短い最終結果に分割するようにサービスにバイアスがかかります。 同様に、6 桁の一続きの数字を予期する文法では、その桁の数字に対応するように、サービスが分割を挿入するようになります。

ただし、カスタム言語モデルおよび文法でサービスの書き起こしの分割にどの程度の影響を与えられるかは、多くの要因に依存します。 例えば、カスタム・モデルの構築に使用するトレーニング・データの量や、音声自体の品質などの要因があります。 音声の小さな変化が結果に影響を与えることもあります。

いずれにせよ、依然としてサービスが休止と無音に応じて複数の最終結果を生成する可能性はあります。 split_transcript_at_phrase_end パラメーターを省略するか、false に設定すると、サービスは休止間隔だけに基づいて書き起こしを分割します。 休止間隔が、意味素性に基づく分割よりも優先されます。 また、単一の要求で一緒に使用すると、end_of_phrase_silence_time パラメーターが split_transcript_at_phrase_end パラメーターよりも優先されます。 詳しくは、句の終わりの無音時間を参照してください。

句の終わりでの書き起こしの分割は、大規模な音声モデルでは使用できません。

句の終わりでの書き起こしの分割の結果

句の終わりでの書き起こしの分割機能を有効にした場合は、書き起こしの最終結果ごとに、サービスがその時点で書き起こしを分割した理由を示す end_of_utterance フィールドが追加で含まれています。

  • full_stop - 完全な意味的終わり (文法的に正しい文の終わりなど)。 前述のように、分割の挿入は基本言語モデルの影響を受け、カスタム言語モデルと文法によってバイアスをかけられます。
  • silence - 休止間隔以上の長さの休止または無音。 休止間隔の長さは、end_of_phrase_silence_time パラメーターを使用して制御できます。
  • end_of_data - 入力音声ストリームの終わり。
  • reset - 現在処理中の音声の長さが最大値の 2 分を超えました。 サービスは、メモリーの過剰使用を回避するために書き起こしを分割します。

句の終わりでの書き起こしの分割の例

以下の要求例で、split_transcript_at_phrase_end パラメーターの使用法について説明します。 音声は、「I have an identification card. The number is one two three four five six.」という句を話します。 話者は、単語「three」と「four」の間で 1 秒間停止します。

最初の例では、パラメーターを省略した要求の結果を示しています。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize"

サービスは 2 つの最終結果を返し、話者の延長された休止時にのみ書き起こしを分割します。

{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.93,
          "transcript": "I have a valid identification card the number is one two three "
        }
      ],
      "final": true
    },
    {
      "alternatives": [
        {
          "confidence": 0.99,
          "transcript": "four five six "
        }
      ],
      "final": true
    }
  ]
}

2 番目の例では、同じ音声を認識しますが、split_transcript_at_phrase_endtrue に設定します。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize?split_transcript_at_phrase_end=true"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize?split_transcript_at_phrase_end=true"

サービスは、3 つの最終結果を返します。最初の文の後の意味的な終わりに応じて、結果が 1 つ追加されています。 結果ごとに、分割の理由を示す end_of_utterance フィールドが含まれています。

{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.92,
          "transcript": "I have a valid identification card "
        }
      ],
      "final": true,
      "end_of_utterance": "full_stop"
    },
    {
      "alternatives": [
        {
          "confidence": 0.97,
          "transcript": "the number is one two three "
        }
      ],
      "final": true,
      "end_of_utterance": "silence"
    },
    {
      "alternatives": [
        {
          "confidence": 0.99,
          "transcript": "four five six "
        }
      ],
      "final": true,
      "end_of_utterance": "end_of_data"
    }
  ]
}

文字挿入バイアス

character_insertion_bias パラメータは、すべての次世代モデルで利用可能な機能です。 このパラメーターは、大規模な音声モデルおよび以前の生成モデルでは使用できません。

character_insertion_biasパラメーターは、音声認識中の異なる長さの競合ストリングに対するサービスのバイアスを制御します。 このサービスは、大規模な音声モデルと次世代モデルを使用して、音声文字を文字ごとに解析します。 それと同様に、実行可能な次の文字を判別するのに役立つように、前の文字ストリングの仮説を確立します。 このプロセス中に、異なる長さの候補ストリングを収集します。

デフォルトでは、各モデルはデフォルトの character_insertion_bias 0.0を使用します。 この値は、文字数が異なる仮説間で最良のバランスを取るように最適化されています。 通常、デフォルトは、ほとんどの音声認識に適しています。 ただし、一部のユース・ケースでは、より短い文字列またはより長い文字列を持つ仮説を優先することによって利点が得られる場合があります。 このような場合、デフォルトからの変更を指定することで、音声認識を向上させることができます。

character_insertion_biasパラメーターを使用して、サービスが仮説の後続の文字を考慮する際に、より短い文字列またはより長い文字列を優先することを示すことができます。 指定する値は、音声の特性によって異なります。 許容値の範囲は -1.0 から 1.0 です。

  • 負の値を指定すると、文字列が短い仮説がサービスによって優先されます。
  • 正の値を指定すると、より長い文字ストリングを持つ仮説がサービスで優先されます。

値が -1.0 または 1.0 に近づくと、パラメーターの影響がさらに顕著になります。 シナリオの最も有効な値を判別するには、まずパラメーターの値を小さい増分 (-0.1、-0.05、0.05、0.1 など) に設定し、値が書き起こし結果にどのように影響するかを評価します。 次に、必要に応じてさまざまな値を試し、値を少しずつ増分して、モデルのデフォルトからどの程度逸脱するかを測定します。

文字挿入バイアスの例

以下の要求例では、character_insertion_biasパラメーターを0.1に設定することで、より長い文字列の仮説をわずかに優先するようにサービスに指示します。 これは、書き起こし結果に対する変更の影響を判別するための小さな初期増分です。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize?model=en-US_Telephony&character_insertion_bias=0.1"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognize?model=en-US_Telephony&character_insertion_bias=0.1"