Más información sobre las funciones de reconocimiento de voz

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 Se requieren 16 bits o 24 bits para transmisión continua.
LINEAR16 PCM lineal 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 tipo AudioEncoding. Si puedes seleccionar un códec, opta por una codificación sin pérdida, como FLAC o LINEAR16, 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 campo encoding es opcional para los archivos FLAC y WAV, 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 campo sample_rate_hertz es opcional para los archivos FLAC y WAV, 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 y US 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 largo
  • chirp: 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 tipo SpeechRecognitionResult, 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 tipo SpeechRecognitionAlternative. 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 tipo SpeechEventType. 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 tipo StreamingRecognitionResult. La lista results 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.