IBM Cloud Docs
中間結果および低遅延

中間結果および低遅延

WebSocket インターフェースでは、IBM Watson® Speech to Text サービスは中間結果をサポートします。それは、最終結果の前に到着する中間書き起こし仮説です。 WebSocket インターフェースと HTTP インターフェースの場合、ほとんどの次世代モデルでは、書き起こしの正確度は低下する可能性がありますが、結果を返すための待ち時間が従来よりもさらに短縮されます。

WebSocket インターフェースで低遅延をサポートする次世代モデルを使用する場合は、中間結果および低遅延の両方を有効にして、中間結果を取得する必要があります。 低遅延をサポートする次世代モデルのみが中間結果を返すことができます。 前世代モデルと次世代モデルでは、場合によっては若干異なる結果が返されることに注意してください。

中間結果

中間結果機能は、WebSocket インターフェースでのみ使用できます。 このパラメータは、大規模な音声モデルでは使用できません。

中間結果は、サービスが最終結果を返す前に変更される可能性が高い中間書き起こし仮説です。 サービスは中間結果を生成すると、すぐに返します。 中間結果は、対話式アプリケーションやリアルタイムの書き起こし、および書き起こしには時間がかかる可能性のある長い音声ストリームに役立ちます。

中間結果は、サービスによる発話の処理が進行するにつれて変化します。 それらは、最終結果よりも頻繁に、より迅速に到着します。 これらを使用して、アプリケーションがより迅速に応答できるようにしたり、書き起こしの進行状況を測定したりすることができます。 発話の処理が完了すると、サービスは、その発話の音声の最適な書き起こしを表す最終結果を送信します。

  • 中間結果は、フィールド "final": false を使用してトランスクリプト内で識別されます。 このサービスは、さらに音声を処理する際に、より正確な書き起こしを使用して中間結果を更新できます。 サービスは、最終結果ごとに 1 つ以上の中間結果を提供します。
  • 最終結果は、フィールド "final": true を使用して識別されます。 サービスは最終結果を更新しません。

中間結果を要求する方法は、使用しているモデルのタイプによって異なります。

  • *前世代モデルの場合、*JSON start メッセージで interim_results パラメーターを true に設定します。 中間結果はすべての前世代モデルで使用可能です。
  • *次世代モデルの場合、*JSON start メッセージで interim_results パラメーターと low_latency パラメーターを true に設定します。 中間結果は、低遅延をサポートする次世代モデルでのみ、および中間結果および低遅延の両方が有効になっている場合にのみ使用可能です。 詳しくは、中間結果および低遅延の要求を参照してください。

任意のモデルの中間結果を無効にするには、interim_results パラメーターを省略するか、false に設定します。 オフラインまたはバッチの書き起こしを行う場合は、中間結果を無効にします。

中間結果の例

以下の省略された WebSocket の例は、中間結果を要求します。 サービスは複数の応答オブジェクトを送信します。 最終結果の場合のみ、final 属性を true に設定します。 要求は、デフォルトの前世代 en-US_BroadbandModel を暗黙的に使用します。

var access_token = {access_token};
var wsURI = '{ws_url}/v1/recognize'
  + '?access_token=' + access_token;
var websocket = new WebSocket(wsURI);

websocket.onopen = function(evt) { onOpen(evt) };
function onOpen(evt) {
  var message = {
    action: 'start',
    content-type: 'audio/l16;rate=22050',
    interim_results: true
  };
  websocket.send(JSON.stringify(message));
  websocket.send(blob);
}

websocket.onmessage = function(evt) { onMessage(evt) };
function onMessage(evt) {
  console.log(evt.data);
}

応答には、休止のない単一の発話が含まれます。

{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "transcript": "several to "
        }
      ],
      "final": false
    }
  ]
}{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "transcript": "several tornadoes "
        }
      ],
      "final": false
    }
  ]
}{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "transcript": "several tornadoes swept through "
        }
      ],
      "final": false
    }
  ]
}{
  . . .
}{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.96,
          "transcript": "several tornadoes swept through Colorado on Sunday "
        }
      ],
      "final": true
    }
  ]
}

低遅延

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

次世代のマルチメディア・モデルとテレフォニー・モデルは、通常、前世代モデルよりも応答時間が速くなります。 しかし、もっと早く結果を受け取りたい場合もあるでしょう。 低遅延をサポートする次世代モデルでは、low_latency パラメーターを true に設定して、より迅速に結果を受け取ることができます。 低遅延をサポートする次世代モデルについて詳しくは、サポートされる次世代言語モデルを参照してください。

低遅延では、サービスは結果をより迅速に実現しますが、書き起こしの正確度が低下する可能性があります。 低遅延が有効になっている場合、サービスは音声をより小さいチャンクにセグメント化して、正確度を超える速度に最適化します。 このトレードオフは、アプリケーションが必要とする応答時間が、可能な限り高い正確度よりも短い場合に許容される可能性があります。 例えば、IBM® watsonx™ Assistant サービスの音声チャネルでのクローズド・キャプション、会話型アプリケーション、およびライブ・カスタマー・サービスなどのユース・ケースには、低遅延が理想的です。

low_latency パラメーターを省略すると、より正確な結果が得られる可能性があります。これは、ほとんどのユース・ケースで推奨される方法です。 low_latency パラメーターは、デフォルトでは false です。

低遅延を含む要求に対する応答の性質は、使用されるインターフェースによって異なります。

  • HTTP インターフェースでは、サービスはすべての音声の到着を待ってから応答を送信します。 その後、応答として単一のバイト・ストリームを送信します。 応答には、複数の最終結果を持つ複数の書き起こし要素を含めることができ、増分的に送信することができます。 しかし、これは単一のデータ・ストリームです。
  • WebSocket インターフェースでは、サービスは使用可能になったときに最終結果を送信します。 異なるバイト・ストリームの形式で複数の独立した応答を送信することができます。 接続は双方向および全二重であり、要求および応答は、アクティブである限り、単一の接続を介して前後に流れ続けることができます。

低遅延の制約事項

低遅延機能には、以下の使用上の制約事項があります。

  • 低遅延は、一部の次世代モデルでのみ使用可能です。 低遅延をサポートしない次世代モデルの場合、要求に low_latency パラメーターを含めると、サービスは状況コード 400 で失敗します。

    {
      "code": 400,
      "code_description": "Bad Request",
      "error": "low_latency is not a supported feature for model {model_id}"
    }
    
  • 低遅延は**前世代モデルで使用できません。 前世代モデルの場合、要求に low_latency パラメーターを含めると、サービスによって警告が生成されます。

    "warnings": [
      "Unknown arguments: low_latency."
    ]
    

低遅延の例

以下の同期 HTTP の例では、en-US_Telephony モデルを使用して低遅延を要求します。 この例では、low_latency 照会パラメーターを true に設定します。

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&low_latency=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?model=en-US_Telephony&low_latency=true"

中間結果および低遅延の要求

次世代モデルで中間結果を受け取るには、モデルが低遅延をサポートし、interim_results パラメーターと low_latency パラメーターの両方が true に設定されている必要があります。 このサービスでは、低遅延をサポートしない次世代モデルの中間結果はサポートされません。

低遅延をサポートする次世代モデルを使用する場合は、WebSocket インターフェースで中間結果および低遅延の両方を要求できます。 ただし、interim_results パラメーターは、次世代モデルで使用した場合とは異なる動作をします。

以下の表では、interim_results パラメーターと low_latency パラメーターの間の相互作用と、それらの設定に応じて受け取る結果について説明します。 interim_results パラメーターと low_latency パラメーターの両方のデフォルト値は false です。

中間結果と低レイテンシパラメータの相互作用
interim_results low_latency 結果
interim_results=false low_latency=false サービスは最終結果のみを送信します。 書き起こしが完了すると、すべての発話の結果を含む単一の JSON オブジェクトが返されます。 例 1: 中間結果および低遅延の両方が false であるを参照してください。
interim_results=false low_latency=true サービスは最終結果のみを送信します。 書き起こしが完了すると、すべての発話の結果を含む単一の JSON オブジェクトが返されます。 ただし、low_latencytrue であるため、サービスは最終結果をより迅速に返します。 例 2: 中間結果が false で、低遅延が true であるを参照してください。
interim_results=true low_latency=false サービスは最終結果のみを送信します。 書き起こしを実行すると、個々の発話に対して複数の JSON オブジェクトが返されます。 interim_resultstrue に設定する利点は、発話の完了時に結果が到着することです。 すべての発話が書き起こされるまで待つ必要はありません。 例 3: 中間結果が true で、低遅延が false であるを参照してください。
interim_results=true low_latency=true サービスは、書き起こしの仮説を作成するときに中間結果を返し、発話が完了すると最終結果を送信します。 サービスは、最終結果ごとに 1 つ以上の中間結果を提供します。 中間結果の品質は、前世代モデルで受け取られるものと同じです。 ただし、low_latencytrue であるため、サービスは中間結果と最終結果をより迅速に返します。 例 4: 中間結果および低遅延の両方が true であるを参照してください。

中間結果および低遅延の例

以下の省略形の WebSocket コードは、WebSocket インターフェースを使用して中間結果、低遅延結果、またはその両方を要求する方法を示しています。 以下のパラメーターを指定します。

  • /v1/recognize 要求の model 照会パラメーターは、低遅延をサポートする次世代 en-US_Telephony モデルを渡します。
  • JSON start メッセージの inactivity_timeout パラメーターは、非アクティブ・タイムアウトを -1 (無限) に設定します。これにより、要求がタイムアウトするのを防ぎます。
  • interim_results パラメーターと low_latency パラメーターの両方が、要求の JSON start メッセージで指定されます。

パラメーターの可能なすべての組み合わせを使用した結果の例を示すために、以下のセクションの例では、interim_results および low_latency の引数が true または false に設定されています。

var access_token = {access_token};
var wsURI = '{ws_url}/v1/recognize'
  + '?access_token=' + access_token
  + '&model=en-US_Telephony';
var websocket = new WebSocket(wsURI);

websocket.onopen = function(evt) { onOpen(evt) };
function onOpen(evt) {
  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: {true | false},
    low_latency: {true | false}
  };
  websocket.send(JSON.stringify(message));
  websocket.send(blob);
}

websocket.onmessage = function(evt) { onMessage(evt) };
function onMessage(evt) {
  console.log(evt.data);
}

サービスに渡される WAV ファイルには「Thunderstorms could produce ...休止... large hail ...休止... and large rain.」のような、2 つの数秒の休止が組み込まれた 1 つの文が含まれています。 休止は、別個の発話を表すのに十分な長さであるため、複数の最終結果が生成されます。 各応答には複数の最終結果 (発話ごとに 1 つ) が含まれるため、最終結果を単一のストリングにまとめて、書き起こし全体を表示する必要があります。

例 1: 中間結果および低遅延の両方が false である

この例では、interim_resultslow_latency の両方を false に設定します。 サービスは、単一の JSON オブジェクトとして最終結果のみを返します。

  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: false,
    low_latency: false
  };
{
  "result_index": 0,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "thunderstorms could produce ",
          "confidence": 0.94
        }
      ]
    },
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "large hail ",
          "confidence": 0.91
        }
      ]
    },
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "and heavy rain ",
          "confidence": 0.86
        }
      ]
    }
  ]
}

例 2: 中間結果が false で、低遅延が true である

この例では、interim_resultsfalse に設定し、low_latencytrue に設定します。 サービスは、単一の JSON オブジェクトとして最終結果のみを返します。

  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: false,
    low_latency: true
  };
{
  "result_index": 0,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "thunderstorms could produce ",
          "confidence": 0.94
        }
      ]
    },
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "large hail ",
          "confidence": 0.91
        }
      ]
    },
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "and heavy rain ",
          "confidence": 0.86
        }
      ]
    }
  ]
}

例 3: 中間結果が true で、低遅延が false である

この例では、interim_resultstrue に設定し、low_latencyfalse に設定します。 サービスは最終結果のみを返しますが、各結果を個別の JSON オブジェクトとして返します。

  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: true,
    low_latency: false
  };
{
  "result_index": 0,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "thunderstorms could produce ",
          "confidence": 0.94
        }
      ]
    }
  ]
}{
  "result_index": 1,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "large hail ",
          "confidence": 0.91
        }
      ]
    }
  ]
}{
  "result_index": 2,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "and heavy rain ",
          "confidence": 0.86
        }
      ]
    }
  ]
}

例 4: 中間結果および低遅延の両方が true である

この例では、interim_resultslow_latency の両方を true に設定します。 サービスは中間結果と最終結果の両方を返し、各結果を個別の JSON オブジェクトとして返します。

  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: true,
    low_latency: true
  };
{
  "result_index": 0,
  "results": [
    {
      "final": false,
      "alternatives": [
        {
          "transcript": "th "
        }
      ]
    }
  ]
}{
  "result_index": 0,
  "results": [
    {
      "final": false,
      "alternatives": [
        {
          "transcript": "thunderstorms "
        }
      ]
    }
  ]
}{
  "result_index": 0,
  "results": [
    {
      "final": false,
      "alternatives": [
        {
          "transcript": "thunderstorms could produc "
        }
      ]
    }
  ]
}{
  "result_index": 0,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "thunderstorms could produce ",
          "confidence": 0.94
        }
      ]
    }
  ]
}{
  "result_index": 1,
  "results": [
    {
      "final": false,
      "alternatives": [
        {
          "transcript": "large "
        }
      ]
    }
  ]
}{
  "result_index": 1,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "large hail ",
          "confidence": 0.91
        }
      ]
    }
  ]
}{
  "result_index": 2,
  "results": [
    {
      "final": false,
      "alternatives": [
        {
          "transcript": "and hea "
        }
      ]
    }
  ]
}{
  "result_index": 2,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "and heavy rain ",
          "confidence": 0.86
        }
      ]
    }
  ]
}