Speech-to-Text es una de las tres APIs previamente entrenadas de Vertex AI en Google Distributed Cloud (GDC) con aislamiento físico. El servicio de Speech-to-Text reconoce el habla en archivos de audio y la transcribe a texto. Speech-to-Text cumple con los requisitos de residencia y cumplimiento de datos.
En la siguiente tabla, se describen las capacidades clave de Speech-to-Text:
Funciones clave | |
---|---|
Transcripción | Aplica algoritmos avanzados de red neuronal de aprendizaje profundo para el reconocimiento de voz automático. |
Modelos | Implementa modelos de reconocimiento de menos de 1 GB de tamaño que consumen recursos mínimos. |
Compatible con la API | Usa la API de Speech-to-Text y sus bibliotecas cliente para enviar audio y recibir una transcripción de texto del servicio de Speech-to-Text. |
Codificaciones de audio compatibles con Speech-to-Text
La API de Speech-to-Text admite varias codificaciones diferentes. En la siguiente tabla, se enumeran los códecs de audio compatibles:
Códec | Nombre | Sin pérdida | Notas de uso |
---|---|---|---|
FLAC |
Códec de audio sin pérdida gratuito | Sí | Se requieren 16 bits o 24 bits para transmisión continua. |
LINEAR16 |
PCM lineal | Sí | Codificación de modulación lineal por impulsos codificados (PCM) de 16 bits. El encabezado debe contener la tasa de muestreo. |
MULAW |
Ley μ | No | Codificación PCM de 8 bits |
OGG_OPUS |
Tramas de audio con codificación Opus en un contenedor Ogg | No | La tasa de muestreo debe ser una de las siguientes: 8,000 Hz, 12,000 Hz, 16,000 Hz, 24,000 Hz o 48,000 Hz. |
FLAC
es tanto un códec de audio como un formato de archivo de audio. Para transcribir archivos de audio con codificación FLAC
, debes proporcionarlos en el formato de archivo .FLAC
, que incluye un encabezado que contiene 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 puedes elegir la codificación del material fuente, usa una codificación sin pérdida, como FLAC
o LINEAR16
para un mejor reconocimiento de voz.
Funciones de Speech-to-Text
Speech-to-Text en Distributed Cloud tiene los siguientes tres métodos para realizar el reconocimiento de voz:
Reconocimiento síncrono: Envía datos de audio a la API de Speech-to-Text, realiza el reconocimiento de esos datos y muestra los resultados después del procesamiento de 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 de Speech-to-Text y, luego, inicia una operación de larga duración. Esta operación te permite sondear periódicamente los resultados del reconocimiento. Usa las solicitudes asíncronas para los datos de audio de cualquier duración hasta 480 minutos.
Reconocimiento de transmisión: Realiza el reconocimiento de los datos de audio proporcionados dentro de una transmisión bidireccional. Las solicitudes de transmisión continua están diseñadas para fines de reconocimiento en tiempo real, como la captura de audio en vivo de un micrófono. El reconocimiento de transmisión proporciona resultados provisorios mientras se captura el audio, lo que permite que los resultados aparezcan, por ejemplo, mientras un usuario aún está hablando.
Las solicitudes contienen parámetros de configuración y datos de audio. En las siguientes secciones, se describen estas solicitudes de reconocimiento, las respuestas que generan y cómo manejar esas respuestas con más detalle.
Solicitudes y respuestas síncronas
Una solicitud de reconocimiento síncrona de Speech-to-Text es el método más simple para realizar el reconocimiento en datos de audio de voz. Con Speech-to-Text, se puede procesar hasta un minuto de datos de audio de voz enviados en una solicitud síncrona. En Speech-to-Text, una vez que se procesa y reconoce todo el audio, se muestra una respuesta.
Speech-to-Text debe devolver una respuesta antes de procesar la siguiente solicitud. Speech-to-Text suele procesar el audio más rápido que en tiempo real, ya que, en promedio, procesa 30 segundos de audio en 15 segundos. En casos de audio de mala calidad, tu solicitud de reconocimiento puede tardar mucho más tiempo.
Solicitudes de reconocimiento de voz
Una solicitud síncrona de la API de Speech-to-Text comprende 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 de reconocimiento de voz config
de tipo RecognitionConfig
. Un objeto RecognitionConfig
contiene los siguientes subcampos obligatorios:
encoding
: Especifica el esquema de codificación del audio suministrado. Este campo es del tipoAudioEncoding
. Si puedes seleccionar un códec, opta por una codificación sin pérdida, comoFLAC
oLINEAR16
, para un mejor rendimiento. Para obtener una lista de los formatos de codificación de audio compatibles, consulta Codificaciones de audio compatibles con 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 tasa de muestreo del audio proporcionado en hercios. Para obtener más información sobre las tasas de muestreo, consulta Tasas de muestreo. El camposample_rate_hertz
es opcional para los archivosFLAC
yWAV
, que incluyen la tasa de muestreo en el encabezado del archivo.language_code
: Contiene el idioma y la región que se usarán para el reconocimiento de voz del audio proporcionado. El código de idioma debe ser un identificador BCP-47. Los códigos de idioma constan de etiquetas de idioma principal y subetiquetas de región secundaria para indicar dialectos. En el ejemplo,en
es para inglés yUS
es para Estados Unidos. Para obtener 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
del tipo RecognitionAudio
.
El campo audio
contiene el siguiente subcampo:
content
: Contiene el audio que se evaluará, incorporado en la solicitud. Los bytes de datos de audio se codifican con una representación binaria pura. Las representaciones JSON usan Base64. Consulta Contenido de audio incorporado para obtener más información. El audio transferido directamente en este campo tiene un límite de un minuto de duración.
Tasas de muestreo
Especifica la tasa de muestreo de tu audio en el campo sample_rate_hertz
de la configuración de la solicitud, que debe coincidir con la tasa de muestreo del contenido de audio asociado. Speech-to-Text admite tasas de muestreo entre 8,000 Hz y 48,000 Hz. Puedes especificar la tasa de muestreo para 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 puedes elegir la codificación del material fuente, captura audio con una tasa de muestreo de 16,000 Hz. Los valores más bajos pueden afectar la exactitud del reconocimiento de voz, y los niveles más altos no tienen un efecto apreciable en la calidad del reconocimiento.
Sin embargo, si grabaste tus datos de audio con una tasa de muestreo diferente de 16,000 Hz, no vuelvas a muestrear tu audio a 16,000 Hz. La mayoría del audio de telefonía heredado, por ejemplo, usa tasas de muestreo de 8,000 Hz, lo que podría dar resultados menos exactos. Si debes usar ese audio, proporciónalo a la API de Speech-to-Text con su tasa de muestreo original.
Idiomas
El motor de reconocimiento de Speech-to-Text admite una variedad de idiomas y dialectos. Especifica el idioma (y el dialecto nacional o regional) de tu audio en el campo language_code
de la configuración de la solicitud con un identificador BCP-47.
En la página Idiomas compatibles, encontrarás una lista completa de los idiomas admitidos por cada función.
Selección del modelo
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 audio de voz de ese tipo de fuente en particular.
Para especificar un modelo destinado al reconocimiento de voz, incluye el campo model
en el objeto RecognitionConfig
de tu solicitud, con la especificación del modelo que deseas usar.
Speech-to-Text en Distributed Cloud admite los siguientes dos modelos:
default
: Transcribir audio que no sea un modelo de audio específico, como audio de formato largochirp
: Transcribe audio multilingüe cuando se requiere mayor precisión. Chirp realiza el reconocimiento de voz automático en muchos idiomas, incluso si son idiomas con pocos recursos que no tienen muchos datos etiquetados disponibles para el entrenamiento.
Contenido de audio incorporado
El audio incorporado se incluye en la solicitud de reconocimiento de voz cuando se transfiere un parámetro content
en el campo audio
de la solicitud. En el caso del audio incorporado que se proporciona como contenido dentro de una solicitud de REST, ese audio debe ser compatible con la serialización JSON.
Puedes enviar datos directamente en el campo content
para el reconocimiento síncrono solo si tus datos de audio son de un máximo de 60 segundos y 10 MB. Todos los datos de audio en el campo content
deben estar en formato Base64.
Cuando construyes una solicitud con una biblioteca 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 objeto binario en datos de texto ASCII, lo que te proporciona las herramientas y la asistencia necesarias.
Además, Python tiene mecanismos integrados para el contenido con codificación 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
. Evita el ajuste de línea con la marca -w 0
:
base64 INPUT_FILE -w 0 > OUTPUT_FILE
Python
En Python, puedes codificar 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 de Speech-to-Text puede tardar un tiempo en mostrar 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 de Speech-to-Text incluyen resultados de reconocimiento de voz del tipo RecognizeResponse
. Un objeto RecognizeResponse
contiene los siguientes campos:
results
: Contiene la lista de resultados de tipoSpeechRecognitionResult
, en la que cada resultado corresponde a un segmento de audio. Cada resultado consta de uno o más de los siguientes subcampos:alternatives
: Contiene una lista de transcripciones posibles del tipoSpeechRecognitionAlternative
. La primera alternativa en la respuesta siempre es la más probable. Cada alternativa consta de los siguientes subcampos:transcript
: Contiene el texto transcrito. Cuando se 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 a la API de Speech-to-Text es idéntica en su forma a una solicitud síncrona. Sin embargo, en lugar de mostrar una respuesta, la solicitud asíncrona inicia una operación de larga duración y muestra esta operación de inmediato. 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 una 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 aún no hay resultados. Speech-to-Text continúa procesando el audio y usa esta operación para almacenar los resultados. Los resultados aparecen en el campo response
de la operación que se muestra cuando se completa la solicitud LongRunningRecognize
.
A continuación, se muestra un ejemplo de una respuesta completa una vez que finaliza 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 configuró como True
y que el elemento response
de la operación contiene un conjunto de resultados del tipo SpeechRecognitionResult
, el mismo tipo que muestra una solicitud de reconocimiento síncrona.
Solicitudes y respuestas de transmisión
Una llamada de reconocimiento a la API de Speech-to-Text de transmisión está diseñada para la captura y el reconocimiento de audio en tiempo real dentro de una transmisión bidireccional. Tu aplicación puede enviar audio en la transmisión de la solicitud y recibir resultados de reconocimiento provisionales y finales en tiempo real en la transmisión de la respuesta. Los resultados intermedios representan el resultado del reconocimiento actual correspondiente a una sección de audio, mientras que el resultado del reconocimiento final representa la última y mejor interpretación de esa sección de audio.
Solicitudes de reconocimiento de transmisión
A diferencia de las llamadas síncronas y asíncronas, en las que envías la configuración y el audio en una misma solicitud, la llamada a la API de Speech-to-Text de transmisión requiere el envío de varias solicitudes. El primer elemento
StreamingRecognizeRequest
debe contener una configuración del tipo
StreamingRecognitionConfig
.
Un StreamingRecognitionConfig
consta del campo config
, que contiene información de configuración para el audio del tipo RecognitionConfig
y es igual al que se muestra en las solicitudes síncronas y asíncronas.
Respuestas de reconocimiento de transmisión continua
Los resultados del reconocimiento de voz de transmisión continua muestran una serie de respuestas del tipo StreamingRecognizeResponse
.
Esta respuesta consta de los siguientes campos:
speech_event_type
: Contiene eventos de tipoSpeechEventType
. El valor de estos eventos indica cuándo se completó un enunciado. Los eventos de voz sirven como marcadores en la respuesta de tu transmisión.results
: Contiene la lista de resultados, que pueden ser resultados provisionales o finales del 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 lista son provisionales o finales.result_end_time
: Indica la compensación de tiempo del final de este resultado en relación con el comienzo del audio.
Chirp: Modelo de voz universal
Chirp es la próxima generación de modelos de Speech-to-Text en Google Distributed Cloud (GDC) aislado. Chirp, que representa una versión de un modelo de voz universal, tiene más de 2,000 millones de parámetros y puede transcribir muchos idiomas en un solo modelo.
Puedes transcribir archivos de audio en otros idiomas admitidos si habilitas el componente Chirp.
Chirp logra una tasa de error de palabra (WER) de vanguardia en varios conjuntos de pruebas y lenguajes 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, y usa datos en muchos otros idiomas. Luego, el modelo se ajusta para ofrecer transcripciones en idiomas específicos. Un solo modelo unifica los datos de varios idiomas. Sin embargo, los usuarios deben especificar el idioma en el que el modelo debe reconocer la voz.
Chirp procesa la voz en fragmentos mucho más grandes que los de otros modelos. Los resultados solo están disponibles después de que finaliza toda la expresión, lo que significa que Chirp podría no ser adecuado para su uso en tiempo real.
El identificador del modelo de Chirp es chirp
. Por lo tanto, puedes establecer el valor chirp
en el campo model
del objeto RecognitionConfig
de la solicitud.
Métodos de la API disponibles
Chirp admite los métodos de la API de Speech-to-Text Recognize
y StreamingRecognize
.
Ambos métodos difieren 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 iniciar el habla, en comparación con el método Recognize
. Sin embargo, StreamingRecognize
tiene una latencia muy baja después de que finaliza una expresión, por ejemplo, en una oración seguida de una pausa.