Melhore os resultados da transcrição com a adaptação do modelo

Vista geral

Pode usar a funcionalidade de adaptação do modelo para ajudar o Speech-to-Text a reconhecer palavras ou expressões específicas com mais frequência do que outras opções que, de outra forma, poderiam ser sugeridas. Por exemplo, suponhamos que os seus dados de áudio incluem frequentemente a palavra "tempo". Quando a conversão de voz em texto encontra a palavra "tempo", quer que transcreva a palavra como "tempo" mais vezes do que "se". Neste caso, pode usar a adaptação do modelo para favorecer o reconhecimento de "tempo" no Speech-to-Text.

A adaptação do modelo é particularmente útil nos seguintes exemplos de utilização:

  • Melhorar a precisão das palavras e das expressões que ocorrem com frequência nos seus dados de áudio. Por exemplo, pode alertar o modelo de reconhecimento para comandos de voz que são normalmente falados pelos seus utilizadores.

  • Expandir o vocabulário de palavras reconhecidas pela conversão de voz em texto. A conversão de voz em texto inclui um vocabulário muito vasto. No entanto, se os seus dados de áudio contiverem frequentemente palavras raras na linguagem geral (como nomes próprios ou palavras específicas de um domínio), pode adicioná-las através da adaptação do modelo.

  • Melhorar a precisão da transcrição de voz quando o áudio fornecido contém ruído ou não é muito claro.

Opcionalmente, pode otimizar a ponderação do modelo de reconhecimento através da funcionalidade de aumento da adaptação do modelo.

Melhore o reconhecimento de palavras e expressões

Para aumentar a probabilidade de o Speech-to-Text reconhecer a palavra "tempo" quando transcreve os seus dados de áudio, pode transmitir a palavra única "tempo" no objeto PhraseSet num recurso SpeechAdaptation.

Quando fornece uma expressão com várias palavras, o Speech-to-Text tem maior probabilidade de reconhecer essas palavras em sequência. Fornecer uma frase também aumenta a probabilidade de reconhecer partes da frase, incluindo palavras individuais. Consulte a página de limites de conteúdo para ver os limites relativos ao número e ao tamanho destas expressões.

Melhore o reconhecimento através de classes

As classes representam conceitos comuns que ocorrem na linguagem natural, como unidades monetárias e datas do calendário. Uma classe ajuda a melhorar a precisão da transcrição para grandes grupos de palavras que correspondem a um conceito comum, mas que nem sempre incluem palavras ou expressões idênticas.

Por exemplo, suponhamos que os seus dados de áudio incluem gravações de pessoas a dizerem a morada da sua rua. Pode ter uma gravação de áudio de alguém a dizer "A minha casa é no número 123 da Rua Principal, a quarta casa à esquerda". Neste caso, quer que a conversão de voz em texto reconheça a primeira sequência de números ("123") como uma morada e não como um número ordinal ("centésimo vigésimo terceiro"). No entanto, nem todas as pessoas vivem em "123 Main Street". Não é prático listar todas as moradas possíveis num recurso PhraseSet. Em alternativa, pode usar uma classe para indicar que um número de rua deve ser reconhecido independentemente do número real. Neste exemplo, o Speech-to-Text pode transcrever com maior precisão expressões como "123 Main Street" e "987 Grand Boulevard" porque ambas são reconhecidas como números de morada.

Tokens de classe

Para usar uma classe na adaptação do modelo, inclua um token de classe no campo phrases de um recurso PhraseSet. Consulte a lista de tokens de classe suportados para ver que tokens estão disponíveis para o seu idioma. Por exemplo, para melhorar a transcrição dos números de morada do áudio de origem, forneça o valor $ADDRESSNUM numa expressão num PhraseSet.

Pode usar classes como itens autónomos na matriz phrases ou incorporar um ou mais tokens de classe em expressões de várias palavras mais longas. Por exemplo, pode indicar um número de morada numa expressão maior incluindo o token de classe numa string: ["my address is $ADDRESSNUM"]. No entanto, esta expressão não ajuda nos casos em que o áudio contém uma expressão semelhante, mas não idêntica, como "Estou na Rua Principal, 123". Para ajudar no reconhecimento de expressões semelhantes, é importante incluir também o token de classe por si só: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. Se usar um token de classe inválido ou com formato incorreto, o Speech-to-Text ignora o token sem desencadear um erro, mas continua a usar o resto da expressão para contexto.

Aulas personalizadas

Também pode criar a sua própria CustomClass, uma classe composta pela sua própria lista personalizada de itens ou valores relacionados. Por exemplo, quer transcrever dados de áudio que provavelmente incluem o nome de um de vários restaurantes regionais. Os nomes de restaurantes são relativamente raros na linguagem geral e, por isso, é menos provável que sejam escolhidos como a resposta "correta" pelo modelo de reconhecimento. Pode influenciar o modelo de reconhecimento para identificar corretamente estes nomes quando aparecem no seu áudio através de uma classe personalizada.

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

Ajuste os resultados da transcrição com o impulso

Por predefinição, a adaptação do modelo tem um efeito relativamente pequeno, especialmente para expressões de uma palavra. A funcionalidade de aumento da adaptação do modelo permite-lhe aumentar a parcialidade do modelo de reconhecimento atribuindo mais peso a algumas expressões do que a outras. Recomendamos que implemente o aumento se todas as seguintes condições forem verdadeiras:

  1. Já implementou a adaptação do modelo.
  2. Quiser ajustar ainda mais a força dos efeitos de adaptação do modelo nos resultados da transcrição. Para ver se a funcionalidade de otimização está disponível para o seu idioma, consulte a página de suporte de idiomas.

Por exemplo, tem muitas gravações de pessoas a perguntar sobre o "preço para entrar na feira do concelho", com a palavra "feira" a ocorrer com mais frequência do que "preço". Neste caso, pode usar a adaptação do modelo para aumentar a probabilidade de o modelo reconhecer "fair" e "fare" adicionando-os como phrases num recurso PhraseSet. Isto indica à funcionalidade de conversão de voz em texto que deve reconhecer "justo" e "tarifa" com mais frequência do que, por exemplo, "lebre" ou "covil".

No entanto, "justo" deve ser reconhecido com mais frequência do que "tarifa" devido às suas aparições mais frequentes no áudio. Pode já ter transcrito o seu áudio usando a API Speech-to-Text e encontrado um número elevado de erros ao reconhecer a palavra correta ("justo"). Neste caso, é recomendável usar a funcionalidade de aumento para atribuir um valor de aumento mais elevado a "justo" do que a "tarifa". O valor ponderado mais elevado atribuído a "fair" enviesa a API Speech-to-Text para escolher "fair" com mais frequência do que "fare". Sem valores de reforço, o modelo de reconhecimento reconhece "justo" e "tarifa" com igual probabilidade.

Noções básicas sobre os impulsos

Quando usa o aumento, atribui um valor ponderado a phrase itens num recurso PhraseSet. A conversão de voz em texto refere-se a este valor ponderado quando seleciona uma possível transcrição para palavras nos seus dados de áudio. Quanto maior for o valor, maior é a probabilidade de o Speech-to-Text escolher essa palavra ou expressão entre as alternativas possíveis.

Se atribuir um valor de aumento a uma expressão com várias palavras, o aumento é aplicado à expressão completa e apenas à expressão completa. Por exemplo, quer atribuir um valor de aumento à expressão "A minha exposição favorita no Museu Americano de História Natural é a baleia azul". Se adicionar essa expressão a um objeto phrase e atribuir um valor de aumento, o modelo de reconhecimento tem maior probabilidade de reconhecer essa expressão na íntegra, palavra por palavra.

Se não conseguir os resultados que procura ao aumentar uma expressão de várias palavras, sugerimos que adicione todos os bigramas (2 palavras, por ordem) que compõem a expressão como phrase itens adicionais e atribua valores de aumento a cada um. Continuando o exemplo anterior, pode investigar a adição de bigramas e endgramas adicionais (mais de duas palavras), como "o meu favorito", "a minha exposição favorita", "exposição favorita", "a minha exposição favorita no American Museum of Natural History", "American Museum of Natural History" e "baleia-azul". Em seguida, o modelo de reconhecimento de STT tem maior probabilidade de reconhecer expressões relacionadas no seu áudio que contenham partes da expressão original com aumento, mas que não correspondam palavra a palavra.

Defina valores de aumento

Os valores de aumento têm de ser um valor flutuante superior a 0. O limite máximo prático para valores de aumento é 20. Para obter os melhores resultados, experimente ajustar os valores de aumento dos resultados da transcrição para cima ou para baixo até obter resultados de transcrição precisos.

Os valores de aumento mais elevados podem resultar em menos falsos negativos, que são casos em que a palavra ou a expressão ocorreu no áudio, mas não foi corretamente reconhecida pelo Speech-to-Text. No entanto, o aumento também pode aumentar a probabilidade de falsos positivos, ou seja, casos em que a palavra ou a expressão aparece na transcrição, mesmo que não tenha ocorrido no áudio.

Exemplo de utilização com adaptação do modelo

O exemplo seguinte explica o processo de utilização da adaptação de modelos para transcrever uma gravação de áudio de alguém a dizer "The word is fare" (A palavra é tarifa). Neste caso, sem a adaptação da voz, o Speech-to-Text identifica a palavra "fair" (justo). Com a adaptação de voz, o Speech-to-Text pode identificar a palavra "tarifa".

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.

      Aceder ao IAM
    2. Selecione o projeto.
    3. Clique em Conceder acesso.
    4. No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email de uma Conta Google.

    5. Na lista Selecionar uma função, selecione uma função.
    6. Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
    7. Clique em Guardar.
  6. Install the Google Cloud CLI.

  7. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  8. Para inicializar a CLI gcloud, 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.

      Aceder ao IAM
    2. Selecione o projeto.
    3. Clique em Conceder acesso.
    4. No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email de uma Conta Google.

    5. Na lista Selecionar uma função, selecione uma função.
    6. Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
    7. Clique em Guardar.
  13. Install the Google Cloud CLI.

  14. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

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

    gcloud init
  16. As bibliotecas cliente podem usar as Credenciais padrão da aplicação para fazer a autenticação facilmente com as APIs Google e enviar pedidos para essas APIs. Com as credenciais predefinidas da aplicação, pode testar a sua aplicação localmente e implementá-la sem alterar o código subjacente. Para mais informações, consulte o artigo Autentique-se 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. Certifique-se também de que instalou a biblioteca de cliente.

    Melhore a transcrição com um PhraseSet

    1. O exemplo seguinte cria um PhraseSet com a expressão "tarifa" e adiciona-o como um inline_phrase_set num pedido 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 expressão e, em seguida, faz referência ao mesmo numa 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
    
    

    Melhore os resultados da transcrição com um CustomClass

    1. O exemplo seguinte cria um CustomClass com um artigo "tarifa" e o nome "tarifa". Em seguida, faz referência ao CustomClass num inline_phrase_set num pedido 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, cria um recurso PhraseSet com uma expressão que faz referência ao nome do recurso CustomClass. Em seguida, faz referência ao recurso PhraseSetnum pedido 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
    
    

    Limpar

    Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.

    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. O que se segue?