Mejora los resultados de la transcripción con la adaptación de modelos

Descripción general

En Speech-to-Text, puedes usar la función de adaptación de modelos para ayudar a que se reconozcan palabras o frases específicas con más frecuencia que otras opciones que podrían sugerirse. Por ejemplo, supongamos que tus datos de audio suelen incluir la palabra “clima”. Cuando se encuentra la palabra “clima”, quieres que se transcriba la palabra como “clima” con más frecuencia que "cima" en Speech-to-Text. En este caso, puedes usar la adaptación de modelos para inclinar a que se reconozca "clima" en Speech-to-Text.

La adaptación de modelos es particularmente útil en los siguientes casos prácticos:

  • Mejora la exactitud de las palabras y frases que aparecen con frecuencia en tus datos de audio. Por ejemplo, puedes enviar una alerta al modelo de reconocimiento sobre los comandos por voz que suelen pronunciar tus usuarios.

  • Expande el vocabulario de palabras reconocidas con Speech-to-Text. El vocabulario contenido en Speech-to-Text es muy grande. Sin embargo, si tus datos de audio a menudo contienen palabras poco comunes en el lenguaje general (como nombres propios o palabras específicas del dominio), puedes agregarlas mediante la adaptación de modelos.

  • Mejora la exactitud de la transcripción de voz cuando el audio suministrado contenga ruido o no sea muy claro.

De manera opcional, puedes ajustar la inclinación del modelo de reconocimiento mediante la función de mejora de la adaptación de modelos.

Mejora el reconocimiento de palabras y frases

En Speech-to-Text, para aumentar la probabilidad de que se reconozca la palabra “clima” cuando se transcriban tus datos de audio, puedes pasar la palabra única “clima” en el objeto PhraseSet en SpeechAdaptation.

Cuando proporcionas una frase de varias palabras, es más probable que se reconozcan esas palabras en secuencia en Speech-to-Text. Cuando se proporciona una frase, también aumenta la probabilidad de reconocer partes de ella, incluidas las palabras individuales. Consulta la página Límites de contenido para conocer los límites de cantidad y tamaño de estas frases.

Mejora el reconocimiento mediante clases

Las clases representan conceptos comunes que ocurren en el lenguaje natural, como unidades monetarias y fechas del calendario. A través de una clase, puedes mejorar la exactitud de la transcripción para grupos grandes de palabras que se asignan a un concepto común, pero que no siempre incluyen palabras o frases idénticas.

Por ejemplo, supongamos que tus datos de audio incluyen grabaciones de personas que dicen su dirección. Podías tener una grabación de audio de alguien que dice: “Mi casa está en 123 Main Street, la cuarta casa a la izquierda”. En este caso, deseas que se reconozca la primera secuencia de números (“123”) como una dirección en lugar de un número ordinal (“centésimo vigésimo tercero”) en Speech-to-Text. Sin embargo, no todas las personas viven en “123 Main Street”. No es práctico enumerar todas las direcciones posibles en un recurso PhraseSet. En su lugar, puedes usar una clase para indicar que un número de calle debe reconocerse sin importar cuál sea el número. En este ejemplo, se podrían transcribir con mayor exactitud frases como “123 Main Street” y “987 Grand Boulevard” porque ambas se reconocen como números de dirección en Speech-to-Text.

Tokens de clase

Para usar una clase en la adaptación de modelos, incluye un token de clase en el campo phrases de un recurso PhraseSet. Consulta la lista en Tokens de clase admitidos a fin de ver cuáles están disponibles para tu idioma. Por ejemplo, para mejorar la transcripción de los números de dirección de tu audio de origen, proporciona el valor $ADDRESSNUM dentro de una frase en un PhraseSet..

Puedes usar clases como elementos independientes en el array phrases o incorporar uno o más tokens de clase en frases de varias palabras más largas. Por ejemplo, puedes indicar un número de dirección en una frase más larga mediante la inclusión del token de clase en una string: ["my address is $ADDRESSNUM"]. Sin embargo, esta frase no será útil en los casos en los que el audio contenga una frase similar, pero no idéntica, como: “Estoy en 123 Main Street”. Para facilitar el reconocimiento de frases similares, es importante incluir, además, el token de clase de forma independiente: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. Si usas un token de clase no válido o con errores de formato, se ignora el token sin activar un error, pero aún se utiliza el resto de la frase para el contexto en Speech-to-Text.

Clases personalizadas

También puedes crear tu propia CustomClass, una clase compuesta por tu propia lista personalizada de elementos o valores relacionados. Por ejemplo, puedes transcribir datos de audio que probablemente incluyan el nombre de cualquiera de los cientos de restaurantes regionales. Los nombres de los restaurantes son relativamente poco frecuentes en el lenguaje general y, por lo tanto, es menos probable que el modelo de reconocimiento los elija como respuesta “correcta”. Puedes sesgar el modelo de reconocimiento hacia la identificación correcta de estos nombres cuando aparecen en tu audio con una clase personalizada.

Para usar una clase personalizada, crea un recurso CustomClass que incluya cada nombre de restaurante como ClassItem. Las clases personalizadas funcionan de la misma manera que los tokens de clase precompilados. Una phrase puede incluir tokens de clase precompilados y clases personalizadas.

Optimiza los resultados de la transcripción con una mejora

De forma predeterminada, la adaptación de modelos proporciona un efecto relativamente pequeño, en especial para las frases de una palabra. La función de mejora de la adaptación de modelos te permite aumentar la inclinación del modelo de reconocimiento a través de la asignación de más peso a algunas frases. Te recomendamos que implementes la mejora si se cumplen todas las siguientes condiciones:

  1. Ya implementaste la adaptación de modelos.
  2. Deseas ajustar aún más la intensidad de los efectos de la adaptación de modelos en los resultados de la transcripción. Para ver si la función de mejora está disponible en tu idioma, consulta la página de idiomas admitidos.

Por ejemplo, tienes muchas grabaciones de personas que preguntan si “se normalizaron los vuelos hacia Asia”, en las que la palabra “Asia” aparece con más frecuencia que “hacia”. En este caso, puedes usar la adaptación de modelos para aumentar la probabilidad de que el modelo reconozca “Asia” y “hacia” si las agregas como frases en phrases en un recurso PhraseSet. Esta acción le indicará a Speech-to-Text que reconozca “Asia” y “hacia” con más frecuencia que, por ejemplo, “lacia” o “fascia”.

Sin embargo, “Asia” debe reconocerse con más frecuencia que “hacia” debido a sus apariciones más frecuentes en el audio. Es posible que ya hayas transcrito el audio con la API de Speech-to-Text y hayas encontrado una gran cantidad de errores que reconozcan la palabra correcta (“Asia”). En este caso, te recomendamos usar la función de mejora para asignar un valor de impulso más alto a “Asia” que “hacia”. El valor ponderada más alto asignado a “Asia” admite la API de Speech-to-Text para seleccionar “Asia” con más frecuencia que “hacia”. Sin los valores de mejora, el modelo de reconocimiento reconocerá “Asia” y “hacia” con la misma probabilidad.

Conceptos básicos de la mejora

Cuando usas la mejora, asignas un valor ponderado a los elementos phrase de un recurso PhraseSet. En Speech-to-Text, se hace referencia a este valor ponderado cuando se selecciona una posible transcripción de palabras en tus datos de audio. Cuanto más alto sea el valor, mayor será la probabilidad de que se elija esa palabra o frase entre las posibles alternativas en Speech-to-Text.

Si asignas un valor de mejora a una frase de varias palabras, la mejora se aplica a toda y solo a la frase completa. Por ejemplo, deseas asignar un valor de mejora a la frase “Mi exposición favorita en el Museo Americano de Historia Natural es la ballena azul”. Si agregas esa frase a un objeto phrase y asigna un valor de mejora, es más probable que el modelo de reconocimiento reconozca esa frase en su totalidad.

Si no obtienes los resultados que buscas mediante la mejora de una frase de varias palabras, te sugerimos que agregues todos los bigramas (2 palabras, en orden) que compongan la frase como elementos phrase adicionales y asigna los valores de mejora a cada uno. Siguiendo con el ejemplo anterior, podrías investigar cómo agregar bigramas y n-gramas adicionales (más de dos palabras), como "mi favorito", "mi exposición favorita", "exposición favorita", "mi exposición favorita en el Museo Americano de Historia Natural", "Museo Americano de Historia Natural" y "ballena azul". El modelo de reconocimiento STT es más probable que reconozca frases relacionadas en tu audio que contengan partes de la frase mejorada, pero no coincidan palabra por palabra.

Establece valores de impulso

Los valores de impulso deben ser un número de punto flotante mayor que 0. El límite máximo práctico para los valores de mejora es de 20. Si deseas obtener mejores resultados, experimenta con los resultados de la transcripción mediante el aumento o la disminución de tus valores de mejora hasta que obtengas resultados de transcripción precisos.

Los valores de mejora más altos pueden dar como resultado menos falsos negativos, que son casos en los que la palabra o frase ocurrió en el audio, pero no se reconoció correctamente en Speech-to-Text. Sin embargo, la mejora también puede aumentar la probabilidad de falsos positivos; es decir, casos en los que la palabra o la frase aparecen en la transcripción aunque esto no haya ocurrido en el audio.

Ejemplo de caso de uso mediante la adaptación de modelos

En el siguiente ejemplo, se explica el proceso de adaptación de modelos para transcribir una grabación de audio de alguien que dice "The word is fare". En este caso, en la adaptación de voz, Speech-to-Text identifica la palabra “fair". En cambio, mediante la adaptación de voz a Speech-to-Text, se puede identificar la palabra “fare”.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Speech-to-Text APIs.

    Enable the APIs

  5. Make sure that you have the following role or roles on the project: Cloud Speech Administrator

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Ir a IAM
    2. Selecciona el proyecto.
    3. Haz clic en Grant access.
    4. En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.

    5. En la lista Seleccionar un rol, elige un rol.
    6. Para otorgar funciones adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.
    7. Haz clic en Guardar.
    8. Install the Google Cloud CLI.
    9. To initialize the gcloud CLI, run the following command:

      gcloud init
    10. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    11. Make sure that billing is enabled for your Google Cloud project.

    12. Enable the Speech-to-Text APIs.

      Enable the APIs

    13. Make sure that you have the following role or roles on the project: Cloud Speech Administrator

      Check for the roles

      1. In the Google Cloud console, go to the IAM page.

        Go to IAM
      2. Select the project.
      3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

      4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

      Grant the roles

      1. In the Google Cloud console, go to the IAM page.

        Ir a IAM
      2. Selecciona el proyecto.
      3. Haz clic en Grant access.
      4. En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.

      5. En la lista Seleccionar un rol, elige un rol.
      6. Para otorgar funciones adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.
      7. Haz clic en Guardar.
      8. Install the Google Cloud CLI.
      9. To initialize the gcloud CLI, run the following command:

        gcloud init
      10. Las bibliotecas cliente pueden usar las credenciales predeterminadas de la aplicación para autenticarse fácilmente con las APIs de Google y enviar solicitudes a esas API. Con las credenciales predeterminadas de la aplicación, puedes probar tu aplicación de forma local y, luego, implementarla sin cambiar el código subyacente. Si deseas obtener más información, consulta Autentícate para usar las bibliotecas cliente.

      11. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      También asegúrate de haber instalado la biblioteca cliente.

      Mejora la transcripción con un PhraseSet

      1. En el siguiente ejemplo, se compila un PhraseSet con la frase “fare” y se agrega como un inline_phrase_set en una solicitud de reconocimiento:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_inline_phrase_set(audio_file: str) -> cloud_speech.RecognizeResponse:
          """Enhances speech recognition accuracy using an inline phrase set.
          The inline custom phrase set helps the recognizer produce more accurate transcriptions for specific terms.
          Phrases are given a boost to increase their chances of being recognized correctly.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
          Returns:
              cloud_speech.RecognizeResponse: The full response object which includes the transcription results.
          """
      
          # Instantiates a client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Build inline phrase set to produce a more accurate transcript
          phrase_set = cloud_speech.PhraseSet(
              phrases=[{"value": "fare", "boost": 10}, {"value": "word", "boost": 20}]
          )
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      inline_phrase_set=phrase_set
                  )
              ]
          )
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
      
          # Prepare the request which includes specifying the recognizer, configuration, and the audio content
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
      
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      
      1. En esta muestra, se crea un recurso PhraseSet con la misma frase y, luego, se hace referencia a él en una solicitud de reconocimiento:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_phrase_set_reference(
          audio_file: str,
          phrase_set_id: str,
      ) -> cloud_speech.RecognizeResponse:
          """Transcribe audio files using a PhraseSet.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
              phrase_set_id (str): The unique ID of the PhraseSet to use.
          Returns:
              cloud_speech.RecognizeResponse: The full response object which includes the transcription results.
          """
      
          # Instantiates a client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Creating operation of creating the PhraseSet on the cloud.
          operation = client.create_phrase_set(
              parent=f"projects/{PROJECT_ID}/locations/global",
              phrase_set_id=phrase_set_id,
              phrase_set=cloud_speech.PhraseSet(phrases=[{"value": "fare", "boost": 10}]),
          )
          phrase_set = operation.result()
      
          # Add a reference of the PhraseSet into the recognition request
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      phrase_set=phrase_set.name
                  )
              ]
          )
      
          # Automatically detect audio encoding. Use "short" model for short utterances.
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
          #  Prepare the request which includes specifying the recognizer, configuration, and the audio content
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      

      Mejora los resultados de la transcripción con una CustomClass

      1. En el siguiente ejemplo, se compila una CustomClass con un elemento “fare” y un nombre “fare”. Luego, hace referencia a CustomClass dentro de una inline_phrase_set en una solicitud de reconocimiento:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_inline_custom_class(
          audio_file: str,
      ) -> cloud_speech.RecognizeResponse:
          """Transcribe audio file using inline custom class.
          The inline custom class helps the recognizer produce more accurate transcriptions for specific terms.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
          Returns:
              cloud_speech.RecognizeResponse: The response object which includes the transcription results.
          """
          # Instantiates a client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Define an inline custom class to enhance recognition accuracy with specific items like "fare" etc.
          custom_class_name = "your-class-name"
          custom_class = cloud_speech.CustomClass(
              name=custom_class_name,
              items=[{"value": "fare"}],
          )
      
          # Build inline phrase set to produce a more accurate transcript
          phrase_set = cloud_speech.PhraseSet(
              phrases=[{"value": custom_class_name, "boost": 20}]
          )
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      inline_phrase_set=phrase_set
                  )
              ],
              custom_classes=[custom_class],
          )
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
      
          # Prepare the request which includes specifying the recognizer, configuration, and the audio content
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
      
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      
      1. En este ejemplo, se crea un recurso CustomClass con el mismo elemento. Luego, crea un recurso PhraseSet con una frase que hace referencia al nombre del recurso CustomClass. Luego, hace referencia al recurso PhraseSet en una solicitud de reconocimiento:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_custom_class_reference(
          audio_file: str, phrase_set_id: str, custom_class_id: str
      ) -> cloud_speech.RecognizeResponse:
          """Transcribe audio file using a custom class.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
              phrase_set_id (str): The unique ID of the phrase set to use.
              custom_class_id (str): The unique ID of the custom class to use.
          Returns:
              cloud_speech.RecognizeResponse: The full response object which includes the transcription results.
          """
          # Instantiates a speech client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Create a custom class to improve recognition accuracy for specific terms
          custom_class = cloud_speech.CustomClass(items=[{"value": "fare"}])
          operation = client.create_custom_class(
              parent=f"projects/{PROJECT_ID}/locations/global",
              custom_class_id=custom_class_id,
              custom_class=custom_class,
          )
          custom_class = operation.result()
      
          # Create a persistent PhraseSet to reference in a recognition request
          created_phrase_set = cloud_speech.PhraseSet(
              phrases=[
                  {
                      "value": f"${{{custom_class.name}}}",
                      "boost": 20,
                  },  # Using custom class reference
              ]
          )
          operation = client.create_phrase_set(
              parent=f"projects/{PROJECT_ID}/locations/global",
              phrase_set_id=phrase_set_id,
              phrase_set=created_phrase_set,
          )
          phrase_set = operation.result()
      
          # Add a reference of the PhraseSet into the recognition request
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      phrase_set=phrase_set.name
                  )
              ]
          )
          # Automatically detect the audio's encoding with short audio model
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
      
          # Create a custom class to reference in a PhraseSet
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
      
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      

      Realiza una limpieza

      Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.

      1. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

        gcloud auth application-default revoke
      2. Optional: Revoke credentials from the gcloud CLI.

        gcloud auth revoke

      Console

    14. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    15. In the project list, select the project that you want to delete, and then click Delete.
    16. In the dialog, type the project ID, and then click Shut down to delete the project.
    17. gcloud

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

      ¿Qué sigue?