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 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 "hola". Cuando Speech-to-Text detecta esta palabra, querrás que la transcriba como "hola" con más frecuencia que "ola". En este caso, puedes usar la adaptación de modelos para orientar a Speech-to-Text con el objetivo de que reconozca "hola".

La adaptación de modelos resulta útil en los casos de uso que se indican a continuación:

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

    • Ampliar el vocabulario de palabras que reconoce Speech-to-Text. El vocabulario de Speech-to-Text es muy amplio. Sin embargo, si tus datos de audio suelen incluir palabras poco comunes en el lenguaje general (como nombres propios o palabras específicas de un dominio), puedes agregarlas con la adaptación de modelos

    • Mejorar la exactitud de la transcripción de voz cuando el audio proporcionado contiene ruido o no es muy claro

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

Mejora el reconocimiento de palabras y frases

Para aumentar la probabilidad de que Speech-To-Text reconozca la palabra "hola" cuando transcriba tus datos de audio, puedes pasar esta palabra única por el objeto PhraseSet en un recurso de SpeechAdaptation.

Cuando proporcionas una frase de varias palabras, es más probable que Speech-to-Text las reconozca en secuencia. Con esta 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 la cantidad y el tamaño de estas frases.

Mejora el reconocimiento con clases

Las clases representan conceptos comunes que aparecen en el lenguaje natural, como unidades monetarias y fechas del calendario. Con una clase, puedes mejorar la exactitud de la transcripción de 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 mencionan su dirección. Podrías tener una grabación de audio de alguien que dice "Mi casa está en Calle Principal 123, la cuarta casa a la izquierda". En este caso, querrás que Speech-to-Text reconozca la secuencia de números ("123") como una dirección, en vez de un número ordinal ("centésimo vigésimo tercero"). Sin embargo, no todas las personas viven en "Calle Principal 123". No es práctico crear una lista de 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, Speech-to-Text podría transcribir con mayor exactitud frases como "Calle Principal 123" y "Gran Boulevard 987" porque ambas se reconocen como números de direcciones.

Tokens de clases

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 de tokens de clases admitidos para ver cuáles están disponibles para tu idioma. Por ejemplo, para mejorar la transcripción de los números de direcciones de un audio de origen, proporciona el valor $ADDRESSNUM en una frase de un PhraseSet.

Puedes usar clases como elementos independientes en el array phrases o incorporar uno o más tokens de clases en frases de varias palabras más largas. Por ejemplo, puedes indicar un número de dirección en una frase más larga incluyendo el token de clase en una cadena: ["my address is $ADDRESSNUM"]. Sin embargo, esta frase no será útil en los casos en los que el audio incluya una frase similar, pero no idéntica, como: "Estoy en Calle Principal 123". Para facilitar el reconocimiento de frases similares, es importante incluir, además, el token de clase por separado: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. En Speech-to-Text, si usas un token de clase no válido o con errores de formato, este se ignorará sin activar un error, pero aún usará el resto de la frase para el contexto.

Clases personalizadas

También puedes crear tu propia CustomClass, una clase compuesta por tu lista personalizada de elementos o valores relacionados. Por ejemplo, puedes transcribir datos de audio que es probable que incluyan el nombre de cualquiera de cientos de restaurantes regionales. Los nombres de restaurantes no aparecen con frecuencia en el lenguaje general y, por lo tanto, es menos probable que el modelo de reconocimiento los elija como respuesta "correcta". Puedes orientar al modelo de reconocimiento para que identifique correctamente estos nombres cuando aparezcan en un 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 clases precompilados. Una phrase puede incluir tokens de clases precompilados y clases personalizadas.

Ajusta los resultados de transcripción con una mejora

De forma predeterminada, la adaptación de modelos genera un efecto bastante menor, en especial para las frases de una palabra. La función de mejora de la adaptación de modelos permite orientar mejor al modelo de reconocimiento asignando más ponderaciones a algunas frases que a otras. Te recomendamos que implementes la mejora si se cumplen todas las condiciones que se indican a continuación:

  1. Ya implementaste la adaptación de modelos.
  2. Quieres 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 para tu idioma, consulta la página de idiomas compatibles.

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” agregándolas como phrases a un recurso PhraseSet. Esto 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 más a menudo que "hacia", ya que aparece con más frecuencia 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 relacionados con el reconocimiento de la palabra correcta ("Asia"). En este caso, te recomendamos usar la función de mejora para asignar un valor de mejora más alto a "Asia" que a "hacia". El valor ponderado asignado a “Asia”, que es más alto, orienta a la API de Speech-to-Text para que elija “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 se usa la mejora, se asigna un valor ponderado a los elementos de una phrase de un recurso PhraseSet. Speech-to-Text hace referencia a este valor ponderado cuando elige una transcripción posible de palabras incluidas en los datos de audio. Cuanto más alto sea el valor, mayor será la probabilidad de que elija esa palabra o frase entre las alternativas posibles.

Si asignas un valor de mejora a una frase de varias palabras, la mejora se aplica solo a la frase completa. Por ejemplo, supongamos que quieres asignar un valor de mejora a la frase "Mi exposición favorita del Museo Estadounidense de Historia Natural es la ballena azul". Si agregas esa frase a un objeto phrase y asignas un valor de mejora, es más probable que el modelo de reconocimiento reconozca esa frase en su totalidad palabra por palabra.

Si no obtienes los resultados que buscas mejorando 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 asignes 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 favorita", "mi exposición favorita", "exposición favorita", "mi exposición favorita del Museo Estadounidense de Historia Natural", "Museo Estadounidense de Historia Natural" y "ballena azul". Es más probable que el modelo de reconocimiento STT reconozca frases relacionadas en el audio que incluyan partes de la frase original mejorada, pero no coincidan palabra por palabra.

Establece valores de mejora

Los valores de mejora 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. Para mejorar la calidad, experimenta con los resultados de la transcripción aumentando o disminuyendo los valores de mejora hasta que obtengas resultados precisos.

Los valores de mejora más altos pueden generar menos falsos negativos, que son casos en los que la palabra o la frase apareció en el audio, pero Speech-to-Text no la reconoció correctamente. Sin embargo, la mejora también puede aumentar la probabilidad de falsos positivos. Es decir, casos en los que la palabra o la frase aparece en la transcripción aunque no se haya mencionado en el audio.

Caso de uso de ejemplo sobre la adaptación de modelos

En el ejemplo siguiente, se explica el proceso de adaptación de modelos para transcribir una grabación de audio de una persona que dice "La palabra es hacia". En este caso, sin la adaptación de voz, Speech-to-Text identifica la palabra "Asia". En cambio, con la adaptación de voz, Speech-to-Text puede identificar la palabra "hacia".

Antes de empezar

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Speech-to-Text APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    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 column 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 Otorgar acceso.
    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 uno.
    6. Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
    7. Haz clic en Guardar.
  6. Install the Google Cloud CLI.

  7. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  8. Para inicializar gcloud CLI, ejecuta el siguiente comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that billing is enabled for your Google Cloud project.

  11. Enable the Speech-to-Text APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  12. 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 column 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 Otorgar acceso.
    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 uno.
    6. Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
    7. Haz clic en Guardar.
  13. Install the Google Cloud CLI.

  14. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  15. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  16. Las bibliotecas cliente pueden usar credenciales predeterminadas de la aplicación para autenticarse de manera sencilla con las APIs de Google y enviarles solicitudes. 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. Para obtener más información, consulta Autentícate para usar las bibliotecas cliente.

  17. 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.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  18. También, asegúrate de tener instalada la biblioteca cliente.

    Mejora la transcripción con un PhraseSet

    1. En el ejemplo siguiente, se crea un PhraseSet con la frase "hacia" 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 ejemplo siguiente, se crea una CustomClass con un elemento "hacia" y un nombre "hacia". Luego, hace referencia a CustomClass en un inline_phrase_set de 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 de 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

    Consola

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

    Go to Manage resources

  20. In the project list, select the project that you want to delete, and then click Delete.
  21. In the dialog, type the project ID, and then click Shut down to delete the project.
  22. gcloud

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

    Go to Manage resources

  24. In the project list, select the project that you want to delete, and then click Delete.
  25. In the dialog, type the project ID, and then click Shut down to delete the project.
  26. ¿Qué sigue?