Melhorar os resultados da transcrição usando a adaptação do modelo

Visão geral

É possível usar o recurso de adaptação de modelo para ajudar a Speech-to-Text a reconhecer palavras ou frases específicas com mais frequência do que outras opções sugeridas. Por exemplo, imagine que os dados de áudio geralmente incluem a palavra "assento". Quando a Speech-to-Text encontra a palavra "assento", você quer transcrevê-la como "assento" com mais frequência do que "acento". Nesse caso, você pode usar a adequação de modelo para criar um viés que faça a Speech-to-Text reconhecer o termo como "assento".

A adaptação de modelo é particularmente útil nos seguintes casos de uso:

  • Melhorar a acurácia de palavras e frases que ocorrem com frequência nos dados de áudio. Por exemplo, é possível criar um alerta para o modelo de reconhecimento para que ele identifique comandos de voz normalmente falados pelos usuários.

  • Expandir o vocabulário das palavras reconhecidas pela Speech-to-Text. A Speech-to-Text inclui um vocabulário muito extenso. No entanto, se os dados de áudio costumam conter palavras raras no uso geral do idioma, como nomes próprios ou palavras específicas de uma área, é possível adicioná-las usando a adaptação de modelo.

  • Melhorar a acurácia da transcrição de fala quando o áudio fornecido tem ruídos ou não é muito claro.

Também é possível ajustar a polarização do modelo de reconhecimento usando o recurso de otimização de adaptação de modelo.

Melhorar o reconhecimento de palavras e frases

Para aumentar a chance da Speech-to-Text reconhecer a palavra "assento" ao transcrever dados de áudio, transmita a palavra única "assento" no objeto PhraseSet em um recurso SpeechAdaptation.

Quando você fornece uma frase com várias palavras, a Speech-to-Text tem mais chances de reconhecer essas palavras na sequência. Fornecer uma frase também aumenta a probabilidade de reconhecimento de partes da frase, como palavras individuais. Consulte a página de limites de conteúdo para saber mais sobre os limites de número e tamanho dessas frases.

Melhorar o reconhecimento usando classes

As classes representam conceitos comuns que ocorrem naturalmente no idioma, como moedas e datas. Uma classe permite melhorar a acurácia da transcrição para grandes grupos de palavras que mapeiam um conceito comum, mas que nem sempre incluem palavras ou frases idênticas.

Por exemplo, imagine que os dados de áudio incluem gravações de pessoas dizendo o próprio endereço. Você pode ter uma gravação de áudio de alguém dizendo: "minha casa fica na Avenida Central, n° 123, quarta casa à esquerda". Nesse caso, você quer que a Speech-to-Text reconheça a primeira sequência de números ("123") como um endereço, em vez de um número ordinal ("cento e vinte e três"). No entanto, nem todas as pessoas moram na Avenida Central, n° 123. Não é muito prático listar todos os endereços possíveis em um recurso PhraseSet. Em vez disso, é possível usar uma classe para indicar que um número de rua deve ser reconhecido independentemente de qual for. Neste exemplo, a Speech-to-Text pode transcrever frases com mais acurácia, como "Avenida Central, n° 123" e "Avenida Beira-Mar, n° 987", já que ambos são reconhecidos como números de endereço.

Tokens de classe

Para usar uma classe na adaptação de modelo, inclua um token de classe no campo phrases de um recurso PhraseSet. Consulte a lista de tokens de classe aceitos para saber quais estão disponíveis no seu idioma. Por exemplo, para melhorar a transcrição de números de endereço do áudio de origem, forneça o valor $ADDRESSNUM em uma frase em um PhraseSet..

É possível usar classes como itens independentes na matriz phrases ou incorporar um ou mais tokens de classe em frases mais longas com várias palavras. Por exemplo, é possível indicar um número de endereço em uma frase maior incluindo o token de classe em uma string: ["my address is $ADDRESSNUM"]. No entanto, essa frase não ajuda em casos em que o áudio contém uma frase semelhante, mas não idêntica, como "Estou na Avenida Principal, n° 123". Para ajudar no reconhecimento de frases semelhantes, é importante incluir o token de classe sozinho: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. Se você usar um token de classe inválido ou malformado, a Speech-to-Text vai ignorar o token sem mostrar um erro e ainda usar o restante da frase como contexto.

Classes personalizadas

Você também pode criar seu próprio CustomClass, uma classe composta pela sua própria lista personalizada de itens ou valores relacionados. Por exemplo, você quer transcrever dados de áudio que provavelmente incluem o nome de qualquer um dos vários restaurantes da região. Como os nomes dos restaurantes são relativamente raros na fala geral, a chance é menor de que eles sejam escolhidos como a resposta correta pelo modelo de reconhecimento. Você pode polarizar o modelo de reconhecimento para identificar corretamente esses nomes quando eles aparecerem no áudio usando uma classe personalizada.

Para usar uma classe personalizada, crie um recurso CustomClass que inclua cada nome de restaurante como um ClassItem. As classes personalizadas funcionam da mesma forma que os tokens de classe predefinidos. Um phrase pode incluir tokens de classe predefinidos e classes personalizadas.

Ajustar os resultados da transcrição usando otimização

Por padrão, a adaptação de modelo surte um efeito relativamente pequeno, em especial para frases com uma palavra. O recurso de otimização da adaptação de modelo permite aumentar a polarização do modelo de reconhecimento atribuindo mais peso a algumas frases do que a outras. Recomendamos que você implemente a otimização quando todas estas condições forem verdadeiras:

  1. Você já implementou a adaptação de modelo.
  2. Você quer ajustar ainda mais a intensidade dos efeitos da adaptação de modelo nos resultados da transcrição. Para saber se o recurso de otimização está disponível no seu idioma, consulte a página de suporte a idiomas.

Por exemplo, você tem muitas gravações de pessoas perguntando sobre "a seção de espera para participar da sessão", com a palavra" "sessão" ocorrendo com mais frequência do que "seção". Nesse caso, você pode usar a adaptação de modelo para aumentar a probabilidade do modelo reconhecer "sessão" e "seção" adicionando-as como phrases em um recurso PhraseSet. Isso vai informar à Speech-to-Text que ela deve reconhecer "sessão" e "seção" com mais frequência do que, por exemplo, "secção".

No entanto, "sessão" deve ser reconhecida com mais frequência do que "seção" devido ao fato de aparecer com mais frequência no áudio. Talvez você já tenha transcrito o áudio usando a API Speech-to-Text e encontrou um grande número de erros ao reconhecer a palavra correta ("sessão"). Nesse caso, convém usar o recurso de otimização para atribuir um valor maior para "sessão" em relação à palavra "seção". O valor ponderado mais alto atribuído à "sessão" direciona a API Speech-to-Text para escolher "sessão" com mais frequência do que "seção". Sem os valores de otimização, o modelo de reconhecimento vai reconhecer "sessão" e "seção" com a mesma probabilidade.

Noções básicas sobre otimização

Ao usar a otimização, atribua um valor ponderado a itens phrase em um recurso PhraseSet. A Speech-to-Text consulta esse valor ponderado ao selecionar uma transcrição possível para palavras nos dados de áudio. Quanto maior o valor, maior será a probabilidade da Speech-to-Text escolher essa palavra ou frase entre as alternativas possíveis.

Se você atribuir um valor de otimização a uma frase com várias palavras, a otimização será aplicada apenas à frase inteira. Por exemplo, você quer atribuir um valor de otimização à frase "Minha exposição favorita no Museu de História Natural dos Estados Unidos é a baleia-azul". Se você adicionar essa frase a um objeto phrase e atribuir um valor de otimização, o modelo de reconhecimento terá mais chances de reconhecer essa frase inteira.

Se fazer a otimização para uma frase com várias palavras não produzir os resultados esperados, tente adicionar todos os bigramas (sequências de duas palavras) da frase como itens phrase adicionais e aplicar um valor de otimização a cada um. Continuando com o exemplo anterior, você pode tentar adicionar outros bigramas e sequências de palavras mais longas (com mais de duas palavras), como "meu favorito", "minha exposição favorita", "exposição favorita", "minha exibição favorita no Museu Americano de História Natural", "Museu de História Natural dos Estados Unidos" e "baleia azul". O modelo de reconhecimento da STT tem mais chances de reconhecer frases relacionadas no áudio que contêm partes da frase original otimizada, mas não têm correspondência entre palavras.

Definir valores de otimização

Os valores de otimização precisam ser flutuantes e maiores que 0. O limite máximo prático para valores de otimização é 20. Você pode testar ajustes dos valores de otimização até atingir resultados com a acurácia pretendida.

Valores de otimização maiores podem resultar em menos falsos negativos, que são casos em que a palavra ou frase ocorreu no áudio, mas não foi reconhecida corretamente pela Speech-to-Text. No entanto, a otimização também pode aumentar a probabilidade de falsos positivos, que são casos em que a palavra ou frase aparece na transcrição, mesmo que não tenha ocorrido no áudio.

Exemplo de caso de uso usando a adaptação de modelo

O exemplo a seguir mostra o processo de uso da adaptação do modelo para transcrever uma gravação de áudio de alguém dizendo "Esta é a sessão". Nesse caso, sem a adaptação da fala, a Speech-to-Text identifica a palavra "seção". Usando a adaptação de fala, a Speech-to-Text pode identificar a palavra "sessão".

Antes de começar

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

      Acessar o IAM
    2. Selecione o projeto.
    3. Clique em Conceder acesso.
    4. No campo Novos principais, insira seu identificador de usuário. Normalmente, é o endereço de e-mail de uma Conta do Google.

    5. Na lista Selecionar um papel, escolha um.
    6. Para conceder outros papéis, adicione-os clicando em Adicionar outro papel.
    7. Clique em Salvar.
  6. Install the Google Cloud CLI.

  7. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  8. Para inicializar a gcloud CLI, execute o seguinte comando:

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

    Go to project selector

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

  11. Enable the Speech-to-Text APIs.

    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.

      Acessar o IAM
    2. Selecione o projeto.
    3. Clique em Conceder acesso.
    4. No campo Novos principais, insira seu identificador de usuário. Normalmente, é o endereço de e-mail de uma Conta do Google.

    5. Na lista Selecionar um papel, escolha um.
    6. Para conceder outros papéis, adicione-os clicando em Adicionar outro papel.
    7. Clique em Salvar.
  13. Install the Google Cloud CLI.

  14. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  15. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  16. As bibliotecas de cliente podem usar o Application Default Credentials para se autenticar com facilidade nas APIs do Google e enviar solicitações a elas. Com esse serviço, é possível testar o aplicativo localmente e implantá-lo sem alterar o código. Para saber mais, consulte Autenticação para usar bibliotecas de 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. Verifique também se você instalou a biblioteca de cliente.

    Melhorar a transcrição usando um PhraseSet

    1. O exemplo a seguir cria um PhraseSet com a frase "sessão" e a adiciona como um inline_phrase_set em uma solicitação de reconhecimento:

    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. Este exemplo cria um recurso PhraseSet com a mesma frase e se refere a ele em uma solicitação de reconhecimento:

    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
    
    

    Melhorar os resultados da transcrição usando um CustomClass

    1. O exemplo a seguir cria um CustomClass com um item "sessão" e o nome "sessão". Em seguida, faz referência ao CustomClass em um inline_phrase_set em uma solicitação de reconhecimento:

    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. Este exemplo cria um recurso CustomClass com o mesmo item. Em seguida, um recurso PhraseSet é criado com uma frase que faz referência ao nome do recurso CustomClass. Depois disso, ele faz referência ao recurso PhraseSet em uma solicitação de reconhecimento:

    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
    
    

    Limpeza

    Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga as etapas abaixo.

    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

  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. A seguir