Analisi audio del discorso
Il servizio IBM Watson® Speech to Text fornisce più funzioni che determinano come il servizio deve analizzare l'audio per produrre i risultati finali della trascrizione.
- Il tempo di silenzio alla fine della frase specifica la durata dell'intervallo di pausa in cui il servizio suddivide una trascrizione in più risultati finali.
- La trascrizione divisa alla fine della frase indica ai servizi di dividere una trascrizione in più risultati finali per caratteristiche semantiche come le frasi.
- La distorsione di inserimento dei caratteri indirizza il servizio a favorire sequenze di caratteri di lunghezza maggiore o minore mentre sviluppa le ipotesi di trascrizione con i modelli di prossima generazione.
Periodo di silenzio al termine della frase
Il parametro end_of_phrase_silence_time
specifica la durata dell'intervallo di pausa dopo di cui il servizio suddivide una trascrizione in più risultati finali. Se il servizio rileva delle pause o dei silenzi estesi prima di raggiungere
la fine del flusso audio, la sua risposta può includere più risultati finali. Il silenzio indica un punto in cui il parlante fa delle pause tra le frasi o le parole pronunciate. Per la maggior parte delle lingue, l'intervallo di pausa predefinito
è 0,8 secondi; per il cinese è 0,6 secondi. Per ulteriori informazioni, vedi Pause e silenzio.
Utilizzando il parametro end_of_phrase_silence_time
, puoi specificare un valore double compreso tra 0,0 e 120,0 secondi che indica un intervallo di pausa differente.
- Un valore maggiore di 0 specifica l'intervallo che il servizio deve utilizzare per il riconoscimento vocale.
- Un valore di 0 indica che il servizio deve utilizzare l'intervallo predefinito. Equivale ad omettere il parametro.
Puoi utilizzare il parametro per stabilire un equilibrio tra la frequenza con cui viene prodotto un risultato finale e l'accuratezza della trascrizione:
-
Un intervallo di pausa più lungo produce meno risultati finali ed ognuno di essi copre un segmento di audio più grande. I segmenti più grandi tendono ad essere meno accurati perché il servizio ha più contenuti con cui trascrivere l'audio.
Tuttavia, gli intervalli di pausa più grandi influenzano direttamente la latenza dei risultati finali. Dopo l'ultima parola dell'audio di input, il servizio deve attendere la scadenza dell'intervallo indicato prima di restituire la sua risposta. Il servizio attende per assicurarsi che l'audio di input non continui oltre l'intervallo più lungo. (Con l'interfaccia WebSocket, l'impostazione del parametro può influenzare la latenza e l'accuratezza dei risultati finali, indipendentemente dal fatto che richiedi dei risultati provvisori.)
-
Un intervallo di pausa più breve produce più risultati finali ma poiché ogni segmento dell'audio è più piccolo, l'accuratezza della trascrizione potrebbe non essere buona. Segmenti più piccoli sono accettabili quando la latenza è cruciale e non si prevede che l'accuratezza della trascrizione peggiori o non sono accettabili dei peggioramenti.
Inoltre, una grammatica multifrase riconosce, o soddisfa, solo le risposte all'interno di un solo risultato finale. Se utilizzi una grammatica per riconoscere più stringhe, puoi aumentare l'intervallo di pausa per evitare di ricevere più risultati finali.
Aumenta l'intervallo quando l'accuratezza è più importante della latenza. Diminuisci l'intervallo quando prevedi che il parlante pronunci frasi brevi o risposte di una sola parola.
Per i modelli di generazione precedente, il servizio genera un risultato finale per l'audio quando un'espressione raggiunge un massimo di 2 minuti. Il servizio suddivide una trascrizione in più risultati finali dopo due minuti di elaborazione continua.
Esempio di periodo di silenzio al termine della frase
Le seguenti richieste di esempio mostrano l'effetto dell'utilizzo del parametro end_of_phrase_silence_time
. L'audio pronuncia la frase "one two three four five six," con una pausa di un secondo tra le parole "three"
e "four." Ad esempio, il parlante potrebbe leggere un numero di sei cifre da una carta d'identità e interrompersi per confermare il numero.
Il primo esempio utilizza l'intervallo di pausa predefinito di 0.8 secondi:
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"
Poiché la pausa è maggiore dell'intervallo predefinito, il servizio suddivide la trascrizione alla pausa. L'attendibilità (confidence
) di entrambi i risultati è 0.99
, pertanto l'accuratezza della trascrizione è molto
buona nonostante la pausa.
{
"result_index": 0,
"results": [
{
"alternatives": [
{
"confidence": 0.99,
"transcript": "one two three "
}
],
"final": true
},
{
"alternatives": [
{
"confidence": 0.99,
"transcript": "four five six "
}
],
"final": true
}
]
}
Ma supponiamo che il riconoscimento vocale venga eseguito con una grammatica che prevede che l'utente pronunci sei cifre in una risposta di una sola frase. Poiché il servizio suddivide la trascrizione alla pausa di un secondo, i risultati sono vuoti. La grammatica viene applicata a ciascun risultato finale ma nessuno dei risultati, "one two three" o "four five six", contiene sei cifre.
Il secondo esempio utilizza lo stesso audio ma imposta l' end_of_phrase_silence_time
e su 1.5 i secondi:
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"
Poiché questo valore è maggiore della lunghezza della pausa del parlante, il servizio restituisce un solo risultato finale che contiene l'intera frase pronunciata. Una grammatica che prevede di trovare sei cifre riconosce questa trascrizione.
{
"result_index": 0,
"results": [
{
"alternatives": [
{
"confidence": 1.0,
"transcript": "one two three four five six "
}
],
"final": true
}
]
}
Suddividi la trascrizione al termine della frase
Il parametro split_transcript_at_phrase_end
indica al servizio di suddividere la trascrizione in più risultati finali in base alle funzioni semantiche dell'input. L'impostazione del parametro su true
fa in modo che
il servizio suddivida la trascrizione alla conclusione di frasi significative, quali ad esempio i periodi. Il servizio basa la sua comprensione delle funzioni semantiche sul modello di lingua di base che utilizzi con la richiesta insieme a
un modello di lingua personalizzato o a una grammatica che utilizzi. I modelli di lingua personalizzati e le grammatiche possono influenzare come e in quale punto il servizio suddivide una trascrizione.
Se applichi un modello di lingua personalizzato al riconoscimento vocale, il servizio è probabile suddivida la trascrizione in base alla natura e al contenuto dei corpora del modello. Ad esempio, un modello i cui corpora includono molte frasi brevi distorce il servizio per imitare i corpora e suddivide l'input in più risultati finali più brevi. In modo simile, una grammatica che prevede una serie di sei cifre può influenzare il servizio ad inserire delle suddivisioni per tener conto di tale serie di cifre.
Tuttavia, il grado in cui i modelli di lingua personalizzati e le grammatiche influenzano la suddivisione del servizio di una trascrizione dipende da molti fattori. Tali fattori includono la quantità di dati di addestramento con cui il modello personalizzato viene creato e la qualità dell'audio stesso. Piccole modifiche nell'audio possono influenzare i risultati.
Indipendentemente da questo, il servizio può ancora produrre più risultati finale in risposta a pause e silenzi. Se ometti il parametro split_transcript_at_phrase_end
o lo imposti su false
, il servizio suddivide le
trascrizioni in base soltanto all'intervallo di pausa. L'intervallo di pausa ha la precedenza sulla suddivisione a causa delle funzioni semantiche. E se utilizzato insieme su una singola richiesta, il parametro end_of_phrase_silence_time
ha la precedenza sul parametro split_transcript_at_phrase_end
. Per ulteriori informazioni, vedi Periodo di silenzio al termine della frase.
La trascrizione suddivisa alla fine della frase non è disponibile con modelli vocali di grandi dimensioni.
Risultati della suddivisione della trascrizione al termine della frase
Quando viene utilizzata la funzione di suddivisione della trascrizione a fine frase, ogni risultato finale nella trascrizione include un campo end_of_utterance
aggiuntivo che identifica perché il servizio ha suddiviso la trascrizione
a quel punto:
full_stop
- Un arresto semantico completo, ad esempio la conclusione di una frase grammaticale. L'inserimento delle suddivisioni viene influenzato dal modello di lingua di base e viene distorto dai modelli di lingua personalizzati e dalle grammatiche, come descritto in precedenza.silence
- Una pausa o un silenzio che è lungo almeno quanto l'intervallo di pausa. Puoi utilizzare il parametroend_of_phrase_silence_time
per controllare la lunghezza dell'intervallo di pausa.end_of_data
- La fine del flusso audio di input.reset
- La quantità di audio che viene al momento elaborata supera il valore massimo di due minuti. Il servizio suddivide la trascrizione per evitare un utilizzo di memoria eccessivo.
Esempio di suddivisione della trascrizione al termine della frase
Le seguenti richieste di esempio illustrano l'utilizzo del parametro split_transcript_at_phrase_end
. L'audio pronuncia la frase "I have an identification card. The number is one two three four five six." Il parlante
si interrompe per un secondo tra "three" e "four."
Il primo esempio mostra i risultati per una richiesta che omette il parametro:
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"
Il servizio restituisce due risultati finali, dividendo la trascrizione solo alla pausa prolungata dell'oratore:
{
"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
}
]
}
Il secondo esempio riconosce lo stesso audio ma imposta split_transcript_at_phrase_end
su true
:
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"
Il servizio restituisce tre risultati finali, aggiungendo un risultato per l'arresto semantico dopo la prima frase. Ciascun risultato include il campo end_of_utterance
per indicare il motivo della suddivisione.
{
"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"
}
]
}
Distorsione inserimento caratteri
Il parametro character_insertion_bias
è una funzione disponibile per tutti i modelli di nuova generazione. Il parametro non è disponibile per i modelli vocali di grandi dimensioni e i modelli di generazione precedente.
Il parametro character_insertion_bias
controlla la distorsione del servizio per le stringhe concorrenti di lunghezze differenti durante il riconoscimento vocale. Con modelli vocali di grandi dimensioni e modelli di nuova generazione,
il servizio analizza l'audio carattere per carattere. Come fa, stabilisce le ipotesi di stringhe di caratteri precedenti per aiutare a determinare i caratteri successivi validi. Durante questo processo, raccoglie le stringhe candidate di lunghezza
diversa.
Per impostazione predefinita, ogni modello utilizza il valore predefinito character_insertion_bias
0.0. Questo valore è ottimizzato per produrre il miglior equilibrio tra le ipotesi con numeri di caratteri differenti. Il valore
predefinito è generalmente adeguato per la maggior parte del riconoscimento vocale. Tuttavia, alcuni casi di utilizzo potrebbero trarre vantaggio dalla preferenza di ipotesi con stringhe di caratteri più brevi o più lunghe. In questi casi,
la specifica di una modifica rispetto al valore predefinito può migliorare il riconoscimento vocale.
Puoi utilizzare il parametro character_insertion_bias
per indicare che il servizio deve favorire le stringhe più corte o più lunghe poiché considera i caratteri successivi per le sue ipotesi. Il valore che fornisci dipende dalle
caratteristiche del tuo audio. L'intervallo di valori accettabili va da -1.0 a 1.0:
- Valori negativi fanno sì che il servizio preferisca le ipotesi con stringhe di caratteri più brevi.
- I valori positivi fanno sì che il servizio preferisca le ipotesi con stringhe di caratteri più lunghe.
Quando il tuo valore si avvicina a -1.0 o 1.0, l'impatto del parametro diventa più pronunciato. Per determinare il valore più efficace per il tuo scenario, inizia impostando il valore del parametro su un piccolo incremento, come -0.1, -0.05, 0.05o 0.1, e valuta il modo in cui il valore influisce sui risultati della trascrizione. Quindi, provare con valori differenti in base alle necessità, correggendo il valore con piccoli incrementi per misurare quanto deviare dal valore predefinito del modello.
Esempio di distorsione nell'inserimento di caratteri
La seguente richiesta di esempio indica al servizio di favorire marginalmente le stringhe più lunghe di ipotesi di caratteri impostando il parametro character_insertion_bias
su 0.1
. Si tratta di un piccolo incremento
iniziale per determinare l'effetto della modifica sui risultati della trascrizione.
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"