Transcripción de voz es una de las tres APIs preentrenadas de Vertex AI en Google Distributed Cloud (GDC) con air gap. El servicio Speech-to-Text reconoce la voz en archivos de audio y transcribe el audio en texto. Speech-to-Text cumple los requisitos de residencia y cumplimiento de los datos.
En la siguiente tabla se describen las funciones clave de Speech-to-Text:
Funciones clave | |
---|---|
Transcripción | Aplica algoritmos avanzados de aprendizaje profundo y redes neuronales para reconocer la voz automáticamente. |
Modelos | Despliega modelos de reconocimiento de menos de 1 GB y que consumen poquísimos recursos. |
Compatible con APIs | Usa la API Speech-to-Text y sus bibliotecas de cliente para enviar audio y recibir una transcripción de texto del servicio Speech-to-Text. |
Codificaciones de audio admitidas en Speech-to-Text
La API Speech-to-Text admite varios tipos de codificación. En la siguiente tabla se indican los códecs de audio admitidos:
Códec | Nombre | Sin pérdida | Notas de uso |
---|---|---|---|
FLAC |
Códec de audio sin pérdida | Sí | Se requieren 16 bits o 24 bits para las transmisiones |
LINEAR16 |
PCM lineal | Sí | Codificación PCM lineal de 16 bits. El encabezado debe contener la frecuencia de muestreo. |
MULAW |
μ-ley | No | Codificación PCM de 8 bits |
OGG_OPUS |
Marcos de audio codificados Opus en un contenedor Ogg | No | La frecuencia de muestreo debe ser de 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz |
FLAC
es tanto un códec de audio como un formato de archivo de audio. Para transcribir archivos de audio con la codificación FLAC
, debes proporcionarlos en formato .FLAC
, que incluye un encabezado con metadatos.
Speech-to-Text admite archivos WAV
con audio codificado en LINEAR16
o MULAW
.
Para obtener más información sobre los códecs de audio de Speech-to-Text, consulta la documentación de referencia de AudioEncoding
.
Si tienes una opción al codificar el material de origen, usa una codificación sin pérdida como FLAC
o LINEAR16
para obtener un mejor reconocimiento de voz.
Funciones de Speech-to-Text
Speech-to-Text en Distributed Cloud cuenta con los tres métodos siguientes para realizar el reconocimiento de voz:
Reconocimiento síncrono: envía datos de audio a la API Speech-to-Text, realiza el reconocimiento de esos datos y devuelve los resultados después de procesar el audio. Las solicitudes de reconocimiento síncronas se limitan a un minuto o menos de datos de audio.
Reconocimiento asíncrono: envía datos de audio a la API Speech-to-Text e inicia una operación de larga duración. Con esta operación, puedes sondear periódicamente los resultados del reconocimiento. Usa solicitudes asíncronas para obtener datos de audio de cualquier duración (hasta 480 minutos).
Reconocimiento en streaming: realiza el reconocimiento de los datos de audio proporcionados en un flujo bidireccional. Las solicitudes de streaming se han diseñado para el reconocimiento en tiempo real, como la captura de audio en directo de un micrófono. El reconocimiento de streaming proporciona resultados provisionales mientras se captura el audio, lo que permite que los resultados aparezcan, por ejemplo, mientras el usuario sigue hablando.
Las solicitudes contienen parámetros de configuración y datos de audio. En las secciones siguientes se describen estas solicitudes de reconocimiento, las respuestas que generan y cómo gestionar esas respuestas con más detalle.
Solicitudes y respuestas síncronas
Una solicitud de reconocimiento síncrono de Speech-to-Text es el método más sencillo para reconocer datos de audio de voz. Speech-to-Text puede procesar hasta un minuto de datos de audio de voz enviados en una solicitud síncrona. Una vez que Speech-to-Text procesa y reconoce todo el audio, devuelve una respuesta.
Speech-to-Text debe devolver una respuesta antes de procesar la siguiente solicitud. Por lo general, Speech-to-Text procesa el audio más rápido que en tiempo real. De media, tarda 15 segundos en procesar 30 segundos de audio. En caso de que la calidad del audio sea mala, tu solicitud de reconocimiento puede tardar mucho más.
Solicitudes de reconocimiento de voz
Una solicitud síncrona de la API Speech-to-Text consta de una configuración de reconocimiento de voz y datos de audio. En el siguiente ejemplo se muestra una solicitud:
{
"config": {
"encoding": "LINEAR16",
"sample_rate_hertz": 16000,
"language_code": "en-US",
},
"audio": {
"content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
}
}
Todas las solicitudes de reconocimiento síncronas de Speech-to-Text deben incluir un campo config
de reconocimiento de voz de tipo RecognitionConfig
. Un objeto RecognitionConfig
contiene los siguientes subcampos obligatorios:
encoding
: especifica el esquema de codificación del audio proporcionado. Este campo es de tipoAudioEncoding
. Si puedes elegir un códec, te recomendamos que uses una codificación sin pérdidas, comoFLAC
oLINEAR16
, para obtener el mejor rendimiento. Para ver una lista de los formatos de codificación de audio admitidos, consulta Codificaciones de audio admitidas para Speech-to-Text. El campoencoding
es opcional para los archivosFLAC
yWAV
, que incluyen la codificación en el encabezado del archivo.sample_rate_hertz
: especifica la frecuencia de muestreo del audio proporcionado en hercios. Para obtener más información sobre las frecuencias de muestreo, consulta Frecuencias de muestreo. El camposample_rate_hertz
es opcional para los archivosFLAC
yWAV
, que incluyen la frecuencia de muestreo en el encabezado del archivo.language_code
: contiene el idioma y la región que se van a usar para el reconocimiento de voz del audio proporcionado. El código de idioma debe ser un identificador BCP-47. Los códigos de idioma se componen de etiquetas de idioma principales y subetiquetas de región secundarias para indicar dialectos. En el ejemplo,en
es el código del inglés yUS
es el de Estados Unidos. Para ver una lista de los idiomas admitidos, consulta Idiomas admitidos.
Para obtener más información y una descripción de los subcampos opcionales que puedes incluir en el campo config
, consulta RecognitionConfig
.
Proporciona audio a Speech-to-Text a través del parámetro audio
de tipo
RecognitionAudio
.
El campo audio
contiene el siguiente subcampo:
content
: contiene el audio que se va a evaluar, insertado en la solicitud. Los bytes de datos de audio se codifican mediante una representación binaria pura. Las representaciones JSON usan Base64. Consulta más información sobre el contenido de audio insertado. El audio que se transmite directamente en este campo tiene una duración máxima de un minuto.
Frecuencias de muestreo
La frecuencia de muestreo del audio se especifica en el campo sample_rate_hertz
de la configuración de la solicitud y debe coincidir con la frecuencia de muestreo del contenido de audio asociado. Speech-to-Text admite frecuencias de muestreo entre 8000 y 48.000 Hz. Puedes especificar la frecuencia de muestreo de un archivo FLAC
o WAV
en el encabezado del archivo en lugar de usar el campo sample_rate_hertz
. Sin embargo, el campo sample_rate_hertz
es obligatorio para todos los demás formatos de audio.
Si tienes la opción de elegir al codificar el material de origen, captura el audio con una frecuencia de muestreo de 16.000 Hz. Los valores más bajos pueden afectar a la precisión del reconocimiento de voz, y los más altos no tienen ningún efecto apreciable en la calidad del reconocimiento de voz.
Sin embargo, si has grabado tus datos de audio con una frecuencia de muestreo distinta a 16.000 Hz, no cambies la frecuencia de muestreo a 16.000 Hz. Por ejemplo, la mayoría del audio de telefonía antiguo usa frecuencias de muestreo de 8000 Hz, lo que puede dar resultados menos precisos. Si debes usar este tipo de audio, proporciónalo a la API Speech-to-Text con su frecuencia de muestreo original.
Idiomas
El motor de reconocimiento de Speech-to-Text admite varios idiomas y dialectos. Puedes especificar el idioma (y el dialecto nacional o regional) del audio en el campo language_code
de la configuración de la solicitud mediante un identificador BCP-47.
En la página Idiomas admitidos se incluye una lista completa de los idiomas admitidos para cada función.
Selección de modelos
Cuando envías una solicitud de transcripción de audio a Speech-to-Text, puedes procesar tus archivos de audio con un modelo de aprendizaje automático entrenado para reconocer el audio de voz de ese tipo de fuente concreto.
Para especificar un modelo de reconocimiento de voz, incluye el campo model
en el objeto RecognitionConfig
de tu solicitud y especifica el modelo que quieras usar.
Speech-to-Text en Distributed Cloud admite los dos modelos siguientes:
default
: transcribe audio que no sea un modelo de audio específico, como audio de larga duración.chirp
: transcribe audio en varios idiomas cuando se requiera una mayor precisión. Chirp realiza el reconocimiento automático del habla en muchos idiomas, incluso si se trata de idiomas con pocos recursos que no tienen muchos datos etiquetados disponibles para el entrenamiento.
Contenido de audio insertado
El audio insertado se incluye en la solicitud de reconocimiento de voz cuando se pasa un parámetro content
en el campo audio
de la solicitud. En el caso del audio insertado que se proporciona como contenido en una solicitud REST, este debe ser compatible con la serialización JSON.
Solo puedes enviar datos directamente en el campo content
para el reconocimiento síncrono si tus datos de audio tienen una duración máxima de 60 segundos y un tamaño máximo de 10 MB. Los datos de audio del campo content
deben estar en formato Base64.
Cuando creas una solicitud con una biblioteca de cliente, escribes estos datos binarios o codificados en Base64 directamente en el campo content
.
La mayoría de los entornos de desarrollo incluyen una utilidad base64
para codificar un archivo binario en datos de texto ASCII, lo que te proporciona las herramientas y la asistencia necesarias.
Además, Python tiene mecanismos integrados para codificar contenido en Base64. En los siguientes ejemplos se muestra cómo codificar un archivo:
Linux
Codifica el archivo con la herramienta de línea de comandos base64
. Para evitar que el texto se ajuste a la línea, usa la marca -w 0
:
base64 INPUT_FILE -w 0 > OUTPUT_FILE
Python
En Python, codifica los archivos de audio en Base64 de la siguiente manera:
# 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)
Respuestas de reconocimiento de voz
Una respuesta síncrona de la API Speech-to-Text puede tardar en devolver los resultados. Una vez procesada, la API devuelve una respuesta como en el siguiente ejemplo:
{
"results": [
{
"alternatives": [
{
"transcript": "how old is the Brooklyn Bridge",
"words": [
{
"word": "how"
},
{
"word": "old"
},
{
"word": "is"
},
{
"word": "the"
},
{
"word": "Brooklyn"
},
{
"word": "Bridge"
}
]
}
]
}
]
}
Todas las respuestas de reconocimiento síncrono de la API Speech-to-Text incluyen resultados de reconocimiento de voz de tipo RecognizeResponse
. Un objeto RecognizeResponse
contiene los siguientes campos:
results
: contiene la lista de resultados de tipoSpeechRecognitionResult
, donde cada resultado corresponde a un segmento de audio. Cada resultado consta de uno o varios de los siguientes subcampos:alternatives
: contiene una lista de posibles transcripciones de tipoSpeechRecognitionAlternative
. La primera alternativa de la respuesta siempre es la más probable. Cada alternativa consta de los siguientes subcampos:transcript
: contiene el texto transcrito. Cuando se te proporcionen alternativas secuenciales, puedes concatenar estas transcripciones.words
: contiene una lista de información específica de cada palabra reconocida.
Para obtener más información, consulta RecognizeResponse
.
Solicitudes y respuestas asíncronas
Una solicitud asíncrona de la API Speech-to-Text tiene la misma forma que una solicitud síncrona. Sin embargo, en lugar de devolver una respuesta, la solicitud asíncrona inicia una operación de larga duración y devuelve esta operación inmediatamente. Puedes usar el reconocimiento de voz asíncrono con audio de cualquier duración, hasta 480 minutos.
A continuación, se muestra un ejemplo de respuesta de operación:
{
"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"
}
}
Ten en cuenta que los resultados aún no están disponibles. Speech-to-Text sigue procesando el audio y usa esta operación para almacenar los resultados. Los resultados aparecen en el campo response
de la operación devuelta cuando se completa la solicitud LongRunningRecognize
.
A continuación se muestra un ejemplo de respuesta completa una vez completada la solicitud:
{
"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
}
Ten en cuenta que done
se ha definido como True
y que response
de la operación contiene un conjunto de resultados de tipo SpeechRecognitionResult
, el mismo tipo que devuelve una solicitud de reconocimiento síncrona.
Solicitudes y respuestas de streaming
Una llamada de reconocimiento de la API Streaming Speech-to-Text se ha diseñado para capturar y reconocer audio en tiempo real en un flujo bidireccional. Tu aplicación puede enviar audio en el flujo de solicitudes y recibir resultados de reconocimiento provisionales y finales en tiempo real en el flujo de respuestas. Los resultados provisionales representan el resultado de reconocimiento actual de una sección de audio, mientras que el resultado de reconocimiento final representa la última y mejor estimación de esa sección de audio.
Solicitudes de reconocimiento en streaming
A diferencia de las llamadas síncronas y asíncronas, en las que se envían tanto la configuración como el audio en una sola solicitud, para llamar a la API Streaming Speech-to-Text es necesario enviar varias solicitudes. El primer
StreamingRecognizeRequest
debe contener una configuración de tipo
StreamingRecognitionConfig
.
Un StreamingRecognitionConfig
consta del campo config
, que contiene información de configuración del audio de tipo RecognitionConfig
y es el mismo que se muestra en las solicitudes síncronas y asíncronas.
Respuestas de reconocimiento en streaming
Los resultados del reconocimiento de voz en streaming devuelven una serie de respuestas de tipo
StreamingRecognizeResponse
.
Esta respuesta consta de los campos siguientes:
speech_event_type
: contiene eventos de tipoSpeechEventType
. El valor de estos eventos indica cuándo se ha completado una sola expresión. Los eventos de voz sirven como marcadores en la respuesta de tu flujo.results
: contiene la lista de resultados, que pueden ser provisionales o finales, de tipoStreamingRecognitionResult
. La listaresults
incluye los siguientes subcampos:alternatives
: contiene una lista de transcripciones alternativas.is_final
: indica si los resultados obtenidos en esta entrada de la lista son provisionales o definitivos.result_end_time
: indica el desfase temporal del final de este resultado en relación con el inicio del audio.
Pitido: modelo universal de voz
de GDC.Chirp es la nueva generación de modelos de Speech-to-Text en Google Distributed Cloud (GDC) con air gap. Chirp es una versión de un modelo universal de voz que tiene más de 2000 millones de parámetros y puede transcribir muchos idiomas en un solo modelo.
Puedes transcribir archivos de audio en otros idiomas admitidos habilitando el componente Chirp.
Chirp consigue una tasa de error de palabras (WER) de vanguardia en varios conjuntos de pruebas e idiomas públicos, y ofrece compatibilidad con varios idiomas en Distributed Cloud. Utiliza un codificador universal que entrena modelos con una arquitectura diferente a la de los modelos de voz actuales, usando datos en muchos otros idiomas. Después, el modelo se ajusta para ofrecer transcripciones en idiomas específicos. Un único modelo unifica los datos de varios idiomas. Sin embargo, los usuarios siguen especificando el idioma en el que el modelo debe reconocer el habla.
Chirp procesa el habla en fragmentos mucho más grandes que otros modelos. Los resultados solo están disponibles cuando se ha completado toda la frase, lo que significa que Chirp podría no ser adecuado para un uso en tiempo real.
El identificador de modelo de Chirp es chirp
. Por lo tanto, puedes asignar el valor chirp
al campo model
del objeto RecognitionConfig
de la solicitud.
Métodos de API disponibles
Chirp admite los métodos de la API Speech-to-Text Recognize
y StreamingRecognize
.
Ambos métodos son diferentes porque StreamingRecognize
solo devuelve resultados después de cada expresión. Por este motivo, este método tiene una latencia del orden de segundos en lugar de milisegundos después de empezar a hablar, en comparación con el método Recognize
. Sin embargo, StreamingRecognize
tiene una latencia muy baja después de que se termine una frase (por ejemplo, en una frase seguida de una pausa).