중간 결과 및 낮은 지연 시간

WebSocket 인터페이스를 사용하는 경우, IBM Watson® Speech to Text 서비스는 최종 결과 전에 제공되는 중간 변환 가설인 중간 결과를 지원합니다. WebSocket 및 HTTP 인터페이스의 경우 대부분의 차세대 모델은 일반적인 속도보다도 더 빠르게 결과를 리턴하는 낮은 지연 시간도 제공하지만, 변환 정확도는 저하될 수 있습니다. 모든 대규모 음성 모델에 대한 중간 결과가 공개되었습니다. 정확도는 약간 낮을 수 있으며, 이러한 모델에는 아직 낮은 지연 시간이 지원되지 않습니다.

중간 결과

중간 결과 기능은 WebSocket 인터페이스에서만 사용할 수 있습니다.

중간 결과는 서비스가 최종 결과를 리턴하기 전에 변경될 수 있는 중간 변환 가설입니다. 이 서비스는 중간 결과를 생성하자마자 리턴합니다. 중간 결과는 대화식 애플리케이션과 실시간 변환, 그리고 변환하는 데 다소 시간이 걸릴 수 있는 긴 오디오 스트림에 유용합니다.

중간 결과는 서비스의 발화 처리가 진행됨에 따라 발전합니다. 이들은 최종 결과보다 더 자주, 그리고 더 빨리 제공됩니다. 사용자는 이를 사용하여 애플리케이션이 보다 빠르게 응답하도록 하거나, 변환의 진행 상태를 측정할 수 있습니다. 발화 처리가 완료되면, 서비스는 해당 발화에 대한 오디오의 가장 정확한 전사 결과를 최종 결과로 전송합니다.

중간 결과를 통해 이전 모델과 새 모델 간의 기능 동등성을 확보할 수 있습니다. 또한 중간 결과가 이전보다 더 빨리 나오기 시작하므로 사용자의 대기 시간이 줄어듭니다.

  • 중간 결과는 변환 내용에서 필드 "final": false(으)로 식별됩니다. 서비스는 오디오 처리가 진행됨에 따라 더 정확한 변환 내용으로 중간 결과를 업데이트할 수 있습니다. 서비스는 각 최종 결과에 대해 하나 이상의 중간 결과를 제공합니다.
  • 최종 결과는 필드 "final": true(으)로 식별됩니다. 이 서비스는 최종 결과를 추가로 업데이트하지 않습니다.

중간 결과를 요청하는 방법은 사용 중인 모델의 유형에 따라 달라집니다:

  • 중간 결과를 보려면 end_of_phrase_silence_time 파라미터를 None 이외의 값으로 설정합니다.
  • 이전 세대 모델의 경우에는 JSON start 메시지에서 interim_results 매개변수를 true(으)로 설정하십시오. 중간 결과는 모든 이전 세대 모델에 대해 사용할 수 있습니다.
  • 차세대 모델의 경우 JSON 시작 메시지에서 interim_results 매개 변수를 true 로 설정합니다. low_latencytrue 으로 설정하여 모델에 대해 중간 결과와 짧은 대기 시간을 함께 사용하도록 설정할 수도 있습니다.
  • 대규모 음성 모델의 경우, JSON start 메시지에서 ‘ interim_results ’을 ‘ true ’로 설정하십시오. ‘ low_latency ’은 현재 en-US 대규모 음성 모델에서만 지원됩니다.

모델에 대해 중간 결과를 사용 안함으로 설정하려면 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
    end_of_phrase_silence_time:1.3
  };
  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 매개변수는 대부분의 차세대 모델과 en-US 의 대규모 음성 모델에서 사용할 수 있습니다. 이전 세대 모델에서는 매개변수를 사용할 수 없습니다.

차세대 멀티미디어 및 전화 통신 모델의 응답 시간은 일반적으로 이전 세대 모델보다 더 빠릅니다. 하지만 어떤 상황에서는 결과를 더 빨리 받고 싶을 수도 있습니다. 낮은 지연 시간을 지원하는 차세대 모델을 사용하면 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"

중간 결과 및 낮은 지연 시간 예

다음 축약된 WebSocket 코드는 WebSocket 인터페이스를 사용하여 중간 결과, 낮은 지연 시간 결과 또는 이들 모두를 요청하는 방법을 보여줍니다. 이는 다음 매개변수를 지정합니다.

  • /v1/recognize 요청의 model 쿼리 매개변수는 낮은 지연 시간을 지원하는 차세대 en-US_Telephony 모델을 전달합니다.
  • JSON start 메시지의 inactivity_timeout 매개변수는 비활성 제한시간을, 요청이 제한시간을 초과하지 않도록 하는 -1(무한대)(으)로 설정합니다.
  • interim_results 매개변수와 low_latency 매개변수가 둘 다 요청의 JSON start 메시지와 함께 지정됩니다.

모든 가능한 매개변수 조합의 결과 예를 보여주기 위해, 다음 절의 예에서는 interim_resultslow_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 파일에는 1초 이상의 휴지가 두 개 있는 단일 문장이 포함되어 있습니다: "Thunderstorms could produce ...휴지... large hail ...휴지... and heavy rain." 이러한 휴지는 별도의 발화를 나타내기에 충분할 정도로 길어, 여러 최종 결과가 생성됩니다. 각 응답이 여러 최종 결과(발화당 하나)를 포함하므로, 사용자는 전체 변환 내용을 보려면 이러한 최종 결과를 조합해야 합니다.

예 1: 중간 결과와 낮은 지연 시간이 둘 다 false

이 예는 interim_resultslow_latency을(를) 둘 다 false(으)로 설정합니다. 서비스가 최종 결과만을 단일 JSON 오브젝트로 리턴합니다.

  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: false,
    low_latency: false,
    end_of_phrase_silence_time: 1.4
  };
{
  "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_results을(를) false, low_latency을(를) true(으)로 설정합니다. 서비스가 최종 결과만을 단일 JSON 오브젝트로 리턴합니다.

  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: false,
    low_latency: true,
    end_of_phrase_silence_time: 1.4
  };
{
  "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_latency 을 false 로 설정합니다. 지연 시간이 짧지 않은 모드를 사용하여 중간 결과를 반환합니다.

  var message = {
    action: 'start',
    content-type: 'audio/wav',
    inactivity_timeout: -1,
    interim_results: true,
    low_latency: false,
    end_of_phrase_silence_time: 1.4
  };
{
  "result_index": 0,
  "results": [
    {
      "final": false,
      "alternatives": [
        {
          "transcript": "thunderstorms "
        }
      ]
    }
  ]
}{
  "result_index": 0,
  "results": [
    {
      "final": false,
      "alternatives": [
        {
          "transcript": "thunderstorms could produce "
        }
      ]
    }
  ]
}{
  "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": 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,
    end_of_phrase_silence_time: 1.4
  };
{
  "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
        }
      ]
    }
  ]
}