Scopri di più sulle funzionalità di riconoscimento vocale

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 16 bit o 24 bit richiesti per gli stream
LINEAR16 PCM lineare 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 tipo AudioEncoding. Se hai la possibilità di scegliere un codec, preferisci una codifica lossless come FLAC o LINEAR16 per ottenere le migliori prestazioni. Per un elenco dei formati di codifica audio supportati, consulta Codifiche audio supportate per la sintesi vocale. Il campo encoding è facoltativo per i file FLAC e WAV, 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 campo sample_rate_hertz è facoltativo per i file FLAC e WAV, 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 e US 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 tipo SpeechRecognitionResult, 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 tipo SpeechRecognitionAlternative. 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 tipo SpeechEventType. 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 tipo StreamingRecognitionResult. L'elenco results 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.