Speech-to-Text è una delle tre API preaddestrate di Vertex AI su Google Distributed Cloud (GDC) con air gap. Il servizio Speech-to-Text riconosce la voce nei file audio e la trascrive in testo. Speech-to-Text soddisfa i requisiti di localizzazione e conformità dei dati.
La tabella seguente descrive le funzionalità principali di Speech-to-Text:
Funzionalità chiave | |
---|---|
Trascrizione | Applica gli avanzati algoritmi di rete neurale di deep learning per il riconoscimento vocale automatico. |
Modelli | Esegui il deployment di modelli di riconoscimento di dimensioni inferiori a 1 GB e che consumano risorse minime. |
Compatibilità con l'API | Utilizza l'API Speech-to-Text e le relative librerie client per inviare audio e ricevere una trascrizione del testo dal servizio Speech-to-Text. |
Codifiche audio supportate per Speech-to-Text
L'API Speech-to-Text supporta diversi tipi di codifica. La tabella seguente elenca i codec audio supportati:
Codec | Nome | Senza perdita | Note sull'utilizzo |
---|---|---|---|
FLAC |
Codec audio senza perdita di dati | Sì | 16 bit o 24 bit richiesti per gli stream |
LINEAR16 |
PCM lineare | Sì | Codifica Pulse-Code Modulation (PCM) lineare a 16 bit. L'intestazione deve contenere la frequenza di campionamento. |
MULAW |
μ-law | No | Codifica PCM a 8 bit |
OGG_OPUS |
Frame audio codificati con Opus in un container Ogg | No | La frequenza di campionamento deve essere 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz |
FLAC
è sia un codec audio che un formato di file audio. Per trascrivere file audio
utilizzando la codifica FLAC
, devi fornirli nel formato di file .FLAC
,
che include un'intestazione contenente i metadati.
Speech-to-Text supporta i file WAV
con audio codificato LINEAR16
o MULAW
.
Per saperne di più sui codec audio di Speech-to-Text, consulta la
AudioEncoding
documentazione di riferimento.
Se hai la possibilità di scegliere la codifica del materiale di origine, utilizza una codifica lossless
come FLAC
o LINEAR16
per un migliore riconoscimento vocale.
Funzionalità di Speech-to-Text
Speech-to-Text su Distributed Cloud prevede tre metodi per eseguire il riconoscimento vocale:
Riconoscimento sincrono: invia i dati audio all'API Speech-to-Text, esegue il riconoscimento su questi dati e restituisce i risultati dopo l'elaborazione dell'audio. Le richieste di riconoscimento sincrono sono limitate a un minuto o meno di dati audio.
Riconoscimento asincrono: invia i dati audio all'API Speech-to-Text e avvia un'operazione di lunga durata. Utilizzando questa operazione, puoi eseguire periodicamente il polling per i risultati del riconoscimento. Utilizza le richieste asincrone per i dati audio di qualsiasi durata fino a 480 minuti.
Riconoscimento streaming: esegue il riconoscimento sui dati audio forniti all'interno di uno stream bidirezionale. Le richieste di streaming sono progettate per il riconoscimento in tempo reale, ad esempio per acquisire l'audio in diretta da un microfono. Il riconoscimento in streaming fornisce risultati provvisori durante l'acquisizione dell'audio, consentendo la visualizzazione dei risultati, ad esempio, mentre un utente sta ancora parlando.
Le richieste contengono parametri di configurazione e dati audio. Le sezioni seguenti descrivono in modo più dettagliato queste richieste di riconoscimento, le risposte che generano e come gestirle.
Richieste e risposte sincrone
Una richiesta di riconoscimento sincrono Speech-to-Text è il metodo più semplice per eseguire il riconoscimento sui dati audio del parlato. Speech-to-Text può elaborare fino a un minuto di dati audio vocali inviati in una richiesta sincrona. Dopo che Speech-to-Text elabora e riconosce tutto l'audio, restituisce una risposta.
Speech-to-Text deve restituire una risposta prima di elaborare la richiesta successiva. Speech-to-Text in genere elabora l'audio più velocemente del tempo reale, in media elaborando 30 secondi di audio in 15 secondi. In caso di scarsa qualità audio, la richiesta di riconoscimento può richiedere molto più tempo.
Richieste di riconoscimento vocale
Una richiesta API Speech-to-Text sincrona comprende una configurazione del riconoscimento vocale e dati audio. L'esempio seguente mostra una richiesta:
{
"config": {
"encoding": "LINEAR16",
"sample_rate_hertz": 16000,
"language_code": "en-US",
},
"audio": {
"content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
}
}
Tutte le richieste di riconoscimento sincrono Speech-to-Text devono includere un campo di riconoscimento vocale config
di tipo RecognitionConfig
. Un oggetto RecognitionConfig
contiene i seguenti campi secondari obbligatori:
encoding
: specifica lo schema di codifica dell'audio fornito. Questo campo è di tipoAudioEncoding
. Se hai la possibilità di scegliere un codec, preferisci una codifica lossless comeFLAC
oLINEAR16
per ottenere le migliori prestazioni. Per un elenco dei formati di codifica audio supportati, consulta Codifiche audio supportate per la sintesi vocale. Il campoencoding
è facoltativo per i fileFLAC
eWAV
, che includono la codifica nell'intestazione del file.sample_rate_hertz
: specifica la frequenza di campionamento dell'audio fornito in hertz. Per ulteriori informazioni sulle frequenze di campionamento, consulta la sezione Frequenze di campionamento. Il camposample_rate_hertz
è facoltativo per i fileFLAC
eWAV
, che includono la frequenza di campionamento nell'intestazione del file.language_code
: contiene la lingua e la regione da utilizzare per il riconoscimento vocale dell'audio fornito. Il codice lingua deve essere un identificatore BCP-47. I codici lingua sono costituiti da tag di lingua principali e da tag secondari di regione per indicare i dialetti. Nell'esempio,en
indica l'inglese eUS
gli Stati Uniti. Per un elenco delle lingue supportate, consulta Lingue supportate.
Per ulteriori informazioni e una descrizione dei sottocampi facoltativi che puoi includere nel campo config
, consulta RecognitionConfig
.
Fornisci l'audio a Speech-to-Text tramite il parametro audio
di tipo
RecognitionAudio
.
Il campo audio
contiene il seguente campo secondario:
content
: contiene l'audio da valutare, incorporato nella richiesta. I byte dei dati audio vengono codificati utilizzando una rappresentazione binaria pura. Le rappresentazioni JSON utilizzano Base64. Per saperne di più, consulta la sezione Contenuti audio incorporati. L'audio trasmesso direttamente in questo campo è limitato a un minuto di durata.
Frequenze di campionamento
Specifichi la frequenza di campionamento dell'audio nel campo sample_rate_hertz
della
configurazione della richiesta e deve corrispondere alla frequenza di campionamento dei contenuti
audio associati. Speech-to-Text supporta frequenze di campionamento comprese tra 8000 Hz e 48.000 Hz. Puoi specificare la frequenza di campionamento per un file FLAC
o WAV
nell'intestazione del file anziché utilizzare il campo sample_rate_hertz
. Tuttavia, il
campo sample_rate_hertz
è obbligatorio per tutti gli altri formati audio.
Se hai la possibilità di scegliere la codifica del materiale sorgente, acquisisci l'audio utilizzando una frequenza di campionamento di 16.000 Hz. Valori inferiori potrebbero compromettere l'accuratezza del riconoscimento vocale, mentre valori superiori non hanno un effetto apprezzabile sulla qualità del riconoscimento vocale.
Tuttavia, se hai registrato i dati audio a una frequenza di campionamento diversa da 16000 Hz, non ricampionare l'audio a 16000 Hz. La maggior parte dell'audio di telefonia legacy, ad esempio, utilizza frequenze di campionamento di 8000 Hz, che potrebbero fornire risultati meno accurati. Se devi utilizzare questo tipo di audio, fornisci l'API Speech-to-Text alla frequenza di campionamento originale.
Lingue
Il motore di riconoscimento di Speech-to-Text supporta una serie di lingue e
dialetti. Specifichi la lingua dell'audio (e il dialetto nazionale o regionale)
nel campo language_code
della configurazione della richiesta utilizzando un
identificatore BCP-47.
La pagina Lingue supportate contiene un elenco completo delle lingue supportate per ogni funzionalità.
Selezione del modello
Quando invii una richiesta di trascrizione audio a Speech-to-Text, puoi elaborare i tuoi file audio utilizzando un modello di machine learning addestrato a riconoscere l'audio vocale di quel particolare tipo di origine.
Per specificare un modello per il riconoscimento vocale, includi il campo model
nell'oggetto RecognitionConfig
per la tua richiesta, specificando il modello che vuoi utilizzare.
Speech-to-Text su Distributed Cloud supporta i seguenti due modelli:
default
: trascrive l'audio che non è un modello audio specifico, ad esempio l'audio in formato lungo.chirp
: trascrivi l'audio multilingue quando è richiesta una maggiore precisione. Chirp esegue il riconoscimento vocale automatico in molte lingue, anche se si tratta di lingue con poche risorse che non dispongono di molti dati etichettati disponibili per l'addestramento.
Contenuti audio incorporati
L'audio incorporato è incluso nella richiesta di riconoscimento vocale quando viene passato un parametro content
all'interno del campo audio
della richiesta. Per l'audio incorporato
fornito come contenuto all'interno di una richiesta REST, l'audio deve essere compatibile con
la serializzazione JSON.
Puoi inviare i dati direttamente nel campo content
per il riconoscimento sincrono
solo se i dati audio durano al massimo 60 secondi e pesano 10 MB. Tutti i dati audio nel
campo content
devono essere in formato Base64.
Quando crei una richiesta utilizzando una libreria client,
scrivi questi dati binari o codificati in Base64 direttamente nel campo content
.
La maggior parte degli ambienti di sviluppo è dotata di un'utilità base64
per codificare un file binario
in dati di testo ASCII, fornendoti gli strumenti e il supporto necessari.
Inoltre, Python dispone di meccanismi integrati per la codifica Base64 dei contenuti. I
seguenti esempi mostrano come codificare un file:
Linux
Codifica il file utilizzando lo strumento a riga di comando base64
. Evita il ritorno a capo utilizzando il flag -w 0
:
base64 INPUT_FILE -w 0 > OUTPUT_FILE
Python
In Python, codifica i file audio in Base64 nel seguente modo:
# Import the base64 encoding library.
import base64
# Pass the audio data to an encoding function.
def encode_audio(audio):
audio_content = audio.read()
return base64.b64encode(audio_content)
Risposte del riconoscimento vocale
Una risposta sincrona dell'API Speech-to-Text potrebbe richiedere del tempo per restituire i risultati. Una volta elaborata, l'API restituisce una risposta come nell'esempio seguente:
{
"results": [
{
"alternatives": [
{
"transcript": "how old is the Brooklyn Bridge",
"words": [
{
"word": "how"
},
{
"word": "old"
},
{
"word": "is"
},
{
"word": "the"
},
{
"word": "Brooklyn"
},
{
"word": "Bridge"
}
]
}
]
}
]
}
Tutte le risposte di riconoscimento sincrono dell'API Speech-to-Text includono risultati di riconoscimento vocale di tipo RecognizeResponse
. Un oggetto RecognizeResponse
contiene i seguenti campi:
results
: contiene l'elenco dei risultati di tipoSpeechRecognitionResult
, dove ogni risultato corrisponde a un segmento audio. Ogni risultato è costituito da uno o più dei seguenti campi secondari:alternatives
: contiene un elenco di possibili trascrizioni di tipoSpeechRecognitionAlternative
. La prima alternativa nella risposta è sempre la più probabile. Ogni alternativa è composta dai seguenti sottocampi:transcript
: contiene il testo trascritto. Quando vengono fornite alternative sequenziali, puoi concatenare queste trascrizioni tra loro.words
: contiene un elenco di informazioni specifiche per ogni parola riconosciuta.
Per ulteriori informazioni, vedi RecognizeResponse
.
Richieste e risposte asincrone
Una richiesta asincrona dell'API Speech-to-Text è identica a una richiesta sincrona. Tuttavia, anziché restituire una risposta, la richiesta asincrona avvia un'operazione di lunga durata e la restituisce immediatamente. Puoi utilizzare il riconoscimento vocale asincrono con audio di qualsiasi durata fino a 480 minuti.
Di seguito è riportato un esempio di risposta dell'operazione:
{
"name": "OPERATION_NAME",
"metadata": {
"@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata"
"progressPercent": 34,
"startTime": "2016-08-30T23:26:29.579144Z",
"lastUpdateTime": "2016-08-30T23:26:29.826903Z"
}
}
Tieni presente che i risultati non sono ancora presenti. Speech-to-Text continua a elaborare l'audio e utilizza questa operazione per archiviare i risultati. I risultati vengono visualizzati nel campo
response
dell'operazione restituita al termine della richiesta
LongRunningRecognize
.
Di seguito è riportato un esempio di risposta completa dopo il completamento della richiesta:
{
"name": "1268386125834704889",
"metadata": {
"lastUpdateTime": "2016-08-31T00:16:32.169Z",
"@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata",
"startTime": "2016-08-31T00:16:29.539820Z",
"progressPercent": 100
}
"response": {
"@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
"results": [{
"alternatives": [{
"transcript": "how old is the Brooklyn Bridge",
"words": [
{
"word": "how"
},
{
"word": "old"
},
{
"word": "is"
},
{
"word": "the"
},
{
"word": "Brooklyn"
},
{
"word": "Bridge"
}
]
}]}]
},
"done": True
}
Tieni presente che done
è impostato su True
e che response
dell'operazione contiene un insieme di risultati di tipo SpeechRecognitionResult
, lo stesso tipo restituito da una richiesta di riconoscimento sincrono.
Flussi di dati per richieste e risposte
Una chiamata di riconoscimento dell'API Speech-to-Text in streaming è progettata per l'acquisizione e il riconoscimento in tempo reale dell'audio all'interno di un flusso bidirezionale. La tua applicazione può inviare audio nel flusso di richieste e ricevere risultati di riconoscimento provvisori e finali in tempo reale nel flusso di risposte. I risultati provvisori rappresentano il risultato del riconoscimento corrente per una sezione audio, mentre il risultato finale del riconoscimento rappresenta l'ultima e migliore ipotesi per quella sezione audio.
Richieste di riconoscimento di audio in streaming
A differenza delle chiamate sincrone e asincrone, in cui invii sia la configurazione che l'audio in un'unica richiesta, la chiamata all'API Speech-to-Text di streaming richiede l'invio di più richieste. Il primo
StreamingRecognizeRequest
deve contenere una configurazione di tipo
StreamingRecognitionConfig
.
Un StreamingRecognitionConfig
è costituito dal campo config
, che contiene
le informazioni di configurazione per l'audio di tipo
RecognitionConfig
ed è uguale a quello mostrato nelle richieste sincrone e asincrone.
Risposte di riconoscimento in streaming
I risultati del riconoscimento vocale di audio in streaming restituiscono una serie di risposte di tipo
StreamingRecognizeResponse
.
Una risposta di questo tipo è costituita dai seguenti campi:
speech_event_type
: contiene eventi di tipoSpeechEventType
. Il valore di questi eventi indica quando una singola espressione è stata completata. Gli eventi vocali fungono da indicatori all'interno della risposta dello stream.results
: contiene l'elenco dei risultati, che possono essere risultati provvisori o finali di tipoStreamingRecognitionResult
. L'elencoresults
include i seguenti sottocampi:alternatives
: contiene un elenco di trascrizioni alternative.is_final
: indica se i risultati ottenuti all'interno di questa voce dell'elenco sono provvisori o definitivi.result_end_time
: indica l'offset temporale della fine di questo risultato rispetto all'inizio dell'audio.
Chirp: modello vocale universale
Chirp è la nuova generazione di modelli Speech-to-Text su Google Distributed Cloud (GDC) con air gap. Chirp, che rappresenta una versione di un modello vocale universale, ha oltre 2 miliardi di parametri e può trascrivere molte lingue in un unico modello.
Puoi trascrivere file audio in altre lingue supportate attivando il componente Chirp.
Chirp raggiunge un tasso di errore di parola (WER) all'avanguardia in vari test set e lingue pubblici, offrendo il supporto multilingue su Distributed Cloud. Utilizza un codificatore universale che addestra i modelli con un'architettura diversa rispetto agli attuali modelli vocali, utilizzando dati in molte altre lingue. Il modello viene poi perfezionato per offrire la trascrizione per lingue specifiche. Un unico modello unifica i dati di più lingue. Tuttavia, gli utenti specificano comunque la lingua in cui il modello deve riconoscere il parlato.
Chirp elabora la voce in blocchi molto più grandi rispetto ad altri modelli. I risultati sono disponibili solo dopo che l'intera espressione è stata completata, il che significa che Chirp potrebbe non essere adatto per un utilizzo in tempo reale.
L'identificatore del modello per Chirp è chirp
. Pertanto, puoi impostare il valore
chirp
nel campo model
dell'oggetto RecognitionConfig
della richiesta.
Metodi API disponibili
Chirp supporta i metodi dell'API Speech-to-Text Recognize
e StreamingRecognize
.
I due metodi differiscono perché StreamingRecognize
restituisce
i risultati solo dopo ogni espressione. Per questo motivo, questo metodo ha una latenza dell'ordine di secondi anziché millisecondi dopo l'inizio della riproduzione vocale, rispetto al metodo Recognize
. Tuttavia, StreamingRecognize
ha una latenza molto bassa dopo
la fine di un'espressione, ad esempio in una frase seguita da una pausa.