Risultati provvisori e bassa latenza
Grazie all’interfaccia WebSocket, il servizio IBM Watson® Speech to Text supporta i risultati provvisori, ovvero ipotesi di trascrizione intermedie che vengono fornite prima dei risultati definitivi. Per quanto riguarda le interfacce WebSocket e HTTP, la maggior parte dei modelli di nuova generazione offre anche una bassa latenza, consentendo di ottenere i risultati ancora più rapidamente di quanto non facciano già, sebbene l’accuratezza della trascrizione possa risultare ridotta. I risultati intermedi sono disponibili per tutti i modelli vocali di grandi dimensioni. La precisione potrebbe essere leggermente inferiore e la bassa latenza non è ancora supportata per questi modelli.
Risultati provvisori
La funzione dei risultati provvisori è disponibile solo con l'interfaccia WebSocket.
I risultati provvisori sono ipotesi di trascrizione intermedie che potrebbero subire modifiche prima che il servizio restituisca i risultati definitivi. Il servizio restituisce i risultati provvisori non appena li genera. I risultati provvisori sono utili per le applicazioni interattive e la trascrizione in tempo reale e per i lunghi flussi audio, che possono richiedere un po' di tempo per la trascrizione.
I risultati provvisori si evolvono con l'avanzamento dell'elaborazione di un'espressione da parte del servizio. Arrivano più spesso e più rapidamente dei risultati definitivi. Puoi utilizzarli per consentire alla tua applicazione di rispondere più rapidamente o per monitorare lo stato di avanzamento della trascrizione. Quando l'elaborazione di un enunciato è completa, il servizio invia i risultati finali che rappresentano la migliore trascrizione dell'audio per quell'enunciato.
I risultati intermedi consentono la parità di caratteristiche tra i vecchi e i nuovi modelli. Inoltre, riduce la latenza da parte degli utenti, poiché i risultati intermedi iniziano ad arrivare prima di quelli precedenti.
- I risultati provvisori vengono identificati in una trascrizione con il campo
"final": false. Man mano che elabora ulteriori file audio, il servizio è in grado di aggiornare i risultati provvisori con trascrizioni più accurate. Il servizio fornisce uno o più risultati provvisori per ogni risultato finale. - I Risultati finali sono identificati con il campo
"final": true. Il servizio non esegue ulteriori aggiornamenti dei risultati finali.
Le modalità di richiesta dei risultati intermedi dipendono dal tipo di modello utilizzato:
- Per ottenere risultati intermedi, impostare il parametro
end_of_phrase_silence_timesu un valore diverso daNone. - Per un modello di generazione precedente, impostare il parametro
interim_resultssutruenel messaggio JSONstart. I risultati provvisori sono disponibili per tutti i modelli di generazione precedente. - Per un modello di nuova generazione, impostare il parametro
interim_resultssutruenel messaggio di avvio JSON. È anche possibile impostarelow_latencysutrueper abilitare sia i risultati intermedi che la bassa latenza per i modelli. - Per un modello vocale di grandi dimensioni, impostare il parametro "
interim_results" su "true" nel messaggio JSONstart. Il parametro "low_latency" è attualmente supportato solo dal modello vocale di grandi dimensionien-US.
Per disabilitare i risultati provvisori per qualsiasi modello, omettere il parametro interim_results o impostarlo su false. Disabilitare i risultati provvisori se si sta eseguendo la trascrizione offline o batch.
Esempio di risultati provvisori
Il seguente esempio abbreviato WebSocket richiede risultati provvisori. Il servizio invia più oggetti di risposta. Imposta l'attributo final su true solo per i risultati finali. La richiesta utilizza implicitamente
la generazione precedente predefinita 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);
}
La risposta include una singola espressione senza pause.
{
"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
}
]
}
Bassa latenza
Il parametro " low_latency " è disponibile per la maggior parte dei modelli di nuova generazione e per il modello vocale di grandi dimensioni " en-US ". Questo parametro non è disponibile sui modelli
della generazione precedente.
I modelli di telefonia e multimediali di nuova generazione hanno tempi di risposta generalmente più rapidi rispetto ai modelli di generazione precedente. In alcune situazioni, però, si potrebbe desiderare di ricevere risultati più rapidamente.
Con i modelli di nuova generazione che supportano una bassa latenza, puoi impostare il parametro low_latency su true per ricevere i risultati più rapidamente. Per ulteriori informazioni sui modelli di nuova generazione
che supportano la bassa latenza, vedi Modelli di lingua di nuova generazione supportati.
Con bassa latenza, il servizio raggiunge risultati più rapidi a discapito dell'accuratezza della trascrizione. Quando è abilitata la latenza bassa, il servizio segmenta l'audio in blocchi più piccoli per ottimizzare la velocità rispetto alla precisione. Questo compromesso potrebbe essere accettabile se l'applicazione necessita di un tempo di risposta inferiore alla massima precisione possibile. Ad esempio, la bassa latenza è ideale per casi di utilizzo come sottotitoli chiusi, applicazioni di conversazione e servizio clienti in tempo reale nel canale vocale del servizio IBM® watsonx™ Assistant.
L'omissione del parametro low_latency può produrre risultati più accurati ed è l'approccio consigliato per la maggior parte dei casi di utilizzo. Il parametro low_latency è false per impostazione predefinita.
La natura della risposta a una richiesta che include una bassa latenza dipende dall'interfaccia utilizzata:
- Con le interfacce HTTP, il servizio attende di ricevere l'intero ingresso audio e poi invia una risposta. Invia quindi un singolo flusso di byte in risposta. La risposta può includere più elementi di trascrizione con più risultati finali e può essere inviata in modo incrementale. Ma è un unico flusso di dati.
- Con l'interfaccia WebSocket, il servizio invia i risultati finali non appena diventano disponibili. Può inviare più risposte indipendenti sotto forma di diversi flussi di byte. La connessione è bidirezionale e full duplex, le richieste e le risposte possono continuare a fluire avanti e indietro su una singola connessione mentre questa rimane attiva.
Limitazioni a bassa latenza
La funzione a bassa latenza ha i seguenti limiti di utilizzo:
-
La bassa latenza è disponibile solo per alcuni modelli di nuova generazione. Per i modelli di nuova creazione che non supportano la bassa latenza, se includi il parametro
low_latencycon una richiesta, il servizio ha esito negativo con codice di stato 400:{ "code": 400, "code_description": "Bad Request", "error": "low_latency is not a supported feature for model {model_id}" } -
La bassa latenza non è disponibile per modelli di generazione precedente. Per i modelli di generazione precedente, se includi il parametro
low_latencycon una richiesta, il servizio genera un'avvertenza:"warnings": [ "Unknown arguments: low_latency." ]
Esempio di bassa latenza
Il seguente esempio di sincrono- HTTP e richiede una bassa latenza con il modello di sincrono- en-US_Telephony e. L'esempio imposta il parametro di query low_latency su 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"
Risultati provvisori ed esempi di bassa latenza
Il seguente codice abbreviato WebSocket mostra come richiedere risultati provvisori, risultati a bassa latenza o entrambi con l'interfaccia WebSocket. Specifica i parametri seguenti:
- Il parametro di query
modeldella richiesta/v1/recognizepassa il modello di nuova generazioneen-US_Telephony, che supporta la bassa latenza. - Il parametro
inactivity_timeoutdel messaggio JSONstartimposta il timeout di inattività su-1(infinito), che impedisce il timeout della richiesta. - Entrambi i parametri
interim_resultselow_latencysono specificati con il messaggio JSONstartdella richiesta.
Per visualizzare esempi di risultati con tutte le possibili combinazioni dei parametri, gli argomenti per interim_results e low_latency sono impostati su true o false negli esempi nelle seguenti
sezioni.
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);
}
Il file WAV passato al servizio include una singola frase con due pause multi - secondo integrate: "I temporali potrebbero produrre ...pause... grandine ...pause... e pioggia intensa." Le pause sono abbastanza lunghe da rappresentare espressioni separate e quindi generare più risultati finali. Poiché ogni risposta include più risultati finali, uno per ogni espressione, devi assemblare i risultati finali in una singola stringa per vedere la trascrizione completa.
Esempio 1: i risultati provvisori e la bassa latenza sono entrambi falsi
Questo esempio imposta sia interim_results che low_latency su false. Il servizio restituisce solo risultati finali come un singolo oggetto 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
}
]
}
]
}
Esempio 2: i risultati provvisori sono false e la bassa latenza è true
Questo esempio imposta interim_results su false e low_latency su true. Il servizio restituisce solo risultati finali come un singolo oggetto 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
}
]
}
]
}
Esempio 3: i risultati provvisori sono true e la bassa latenza è false
Questo esempio imposta interim_results su true e low_latency su false. Restituisce i risultati intermedi utilizzando la modalità non a bassa latenza.
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
}
]
}
]
}
Esempio 4: i risultati provvisori e la bassa latenza sono entrambi veri
Questo esempio imposta sia interim_results che low_latency su true. Il servizio restituisce sia i risultati intermedi che quelli finali e restituisce ciascun risultato come oggetto JSON separato.
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
}
]
}
]
}