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, suponha 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 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 utilização geral da linguagem (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.

Para ver se a funcionalidade de adaptação do modelo está disponível para o seu idioma, consulte a página de suporte de idiomas.

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, é mais provável que a conversão de voz em texto reconheça essas palavras em sequência. A indicação de uma expressão também aumenta a probabilidade de reconhecer partes da expressão, 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.

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

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 permite-lhe 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 é o número 123 da Rua Principal, a quarta casa à esquerda". Neste caso, quer que a funcionalidade de 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 na "Rua Principal, 123". 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 moradas do áudio de origem, forneça o valor $ADDRESSNUM no objeto SpeechContext.

Pode usar classes como itens autónomos na matriz phrases ou incorporar um ou mais tokens de classe em expressões mais longas com várias palavras. 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, número 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 acionar 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.

Gramáticas ABNF

Também pode usar gramáticas na forma Backus-Naur aumentada (ABNF) para especificar padrões de palavras. A inclusão de uma gramática ABNF na adaptação do modelo do pedido aumenta a probabilidade de o Speech-to-Text reconhecer todas as palavras que correspondem à gramática especificada.

Para usar esta funcionalidade, inclua um objeto ABNF grammar no campo SpeechAdaptation do seu pedido. As gramáticas ABNF também podem incluir referências a recursos CustomClass e PhraseSet. Para saber mais sobre a sintaxe deste campo, consulte o Speech Recognition Grammar Specification e o nosso code sample abaixo.

Ajuste os resultados da transcrição com o impulso

Por predefinição, a adaptação do modelo já deve ter um efeito suficiente na maioria dos casos. A funcionalidade de aumento da adaptação do modelo permite aumentar a parcialidade do modelo de reconhecimento atribuindo mais peso a algumas expressões do que a outras. Recomendamos que implemente o aumento apenas se 1) já tiver implementado a adaptação do modelo e 2) quiser ajustar ainda mais a intensidade dos efeitos da adaptação do modelo nos resultados da transcrição.

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 ao Speech-to-Text para reconhecer "fair" e "fare" com mais frequência do que, por exemplo, "hare" ou "lair".

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, pode querer usar adicionalmente as frases com 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 aumento, 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 mais elevado for o valor, maior é a probabilidade de o Speech-to-Text escolher essa palavra ou expressão entre as alternativas possíveis.

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 frase a um objeto phrase e atribuir um valor de aumento, o modelo de reconhecimento tem maior probabilidade de reconhecer essa frase na íntegra, palavra por palavra.

Se não conseguir os resultados que procura ao aumentar uma expressão com várias palavras, sugerimos que adicione todos os bigramas (2 palavras, por ordem) que compõem a expressão como itens phrase adicionais e atribua valores de aumento a cada um. Continuando com o exemplo acima, pode investigar a adição de bigramas e N-gramas adicionais (mais de 2 palavras), como "o meu favorito", "a minha exposição favorita", "exposição favorita", "a minha exposição favorita no Museu Americano de História Natural", "Museu Americano de História Natural", "baleia-azul" e assim sucessivamente. O modelo de reconhecimento de voz-para-texto tem, então, 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 os resultados da transcrição ajustando os valores de aumento 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.

Receba notificações de tempo limite

As respostas da API Speech-to-Text incluem um campo SpeechAdaptationInfo, que faculta informações sobre o comportamento de adaptação do modelo durante o reconhecimento. Se ocorrer um limite de tempo relacionado com a adaptação do modelo, adaptationTimeout é true e timeoutMessage especifica que configuração de adaptação causou o limite de tempo. Quando ocorre um limite de tempo, a adaptação do modelo não tem efeito na transcrição devolvida.

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 "call me fionity and oh my gosh what do we have here ionity" (chama-me fionity e, meu Deus, o que temos aqui, ionity). Neste caso, é importante que o modelo identifique "fionity" e "ionity" corretamente.

O seguinte comando executa o reconhecimento no áudio sem adaptação do modelo. A transcrição resultante está incorreta: "call me Fiona tea and oh my gosh what do we have here I own a day".

   curl -H "Authorization: Bearer $(gcloud auth
   --impersonate-service-account=$SA_EMAIL print-access-token)" -H
   "Content-Type: application/json; charset=utf-8"
   "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
   {"languageCode": "en-US"}, "audio":
   {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
   

Exemplo de pedido:

     {
       "config":{
       "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
     }
   

Melhore a transcrição com um PhraseSet

  1. Crie um PhraseSet:

    curl -X POST -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets"
    -d '{"phraseSetId": "test-phrase-set-1"}'

    Exemplo de pedido:

    {
       "phraseSetId":"test-phrase-set-1"
    }
  2. Obtenha o PhraseSet:

    curl -X GET -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id>/locations/global/phraseSets/test-phrase-set-1"\
  3. Adicione as expressões "fionity" e "ionity" ao elemento PhraseSet e atribua um valor de boost de 10 a cada uma:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases"\
    -d '{"phrases": [{"value": "ionity", "boost": 10}, {"value": "fionity", "boost": 10}]}'

    O PhraseSet foi atualizado para:

    {
      "phrases":[
         {
              "value":"ionity",
              "boost":10
           },
           {
              "value":"fionity",
              "boost":10
           }
        ]
     }
  4. Reconhecer o áudio novamente, desta vez usando a adaptação do modelo e o PhraseSetcriado anteriormente. Os resultados transcritos estão agora corretos: "call me fionity and oh my gosh what do we have here ionity".

    curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)"
    -H "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phrase_set_references": ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]},
    "languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'

    Exemplo de pedido:

    {
       "config":{
          "adaptation":{
             "phrase_set_references":[
                "projects/project_id/locations/global/phraseSets/test-phrase-set-1"
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }

Melhore os resultados da transcrição com um CustomClass

  1. Crie um CustomClass:

    curl -X POST -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses"
    -d '{"customClassId": "test-custom-class-1"}'

    Exemplo de pedido:

    {
       "customClassId": "test-custom-class-1"
    }
  2. Obtenha o CustomClass:

     curl -X GET -H "Authorization: Bearer $(gcloud auth
     --impersonate-service-account=$SA_EMAIL print-access-token)" -H
     "Content-Type: application/json; charset=utf-8"
     "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"
     

  3. Reconhecer o clipe de áudio de teste. O elemento CustomClass está vazio, pelo que a transcrição devolvida continua incorreta: "call me Fiona tea and oh my gosh what do we have here I own a day":

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phraseSets": [{"phrases": [{"value":
    "${projects/project_idlocations/global/customClasses/test-custom-class-1}",
    "boost": "10"}]}]}, "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'

    Exemplo de pedido:

      {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
                         "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
     }
  4. Adicione as expressões "fionity" e "ionity" à classe personalizada:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1?updateMask=items"
    -d '{"items": [{"value": "ionity"}, {"value": "fionity"}]}'

    Esta ação atualiza a classe personalizada para o seguinte:

    {
       "items":[
          {
             "value":"ionity"
          },
          {
             "value":"fionity"
          }
       ]
    }
  5. Reconheça o áudio de amostra novamente, desta vez com "fionity" e "ionity" no CustomClass. A transcrição está agora correta: "call me fionity and oh my gosh what do we have here ionity".

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phraseSets": [{"phrases": [{"value":
    "${projects/project_id/locations/global/customClasses/test-custom-class-1}",
    "boost": "10"}]}]}, "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'

    Exemplo de pedido:

    {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
    "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }

Referir-se a um CustomClass num PhraseSet

  1. Atualize o recurso PhraseSet criado anteriormente para fazer referência ao CustomClass:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases"
    -d '{"phrases": [{"value": "${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost": 10}]}'

    Exemplo de pedido:

    {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
                         "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }
  2. Reconhecer o áudio através do recurso PhraseSet (que se refere ao CustomClass). A transcrição está correta: "call me fionity and oh my gosh what do we have here ionity".

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phrase_set_references":
    ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]},
    "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'

    Exemplo de pedido:

    {
       "phrases":[
          {
             "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
             "boost":10
          }
       ]
    }

Elimine o CustomClass e o PhraseSet

  1. Elimine o PhraseSet:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1"
  2. Elimine o CustomClass:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"

Melhore os resultados da transcrição com um ABNF Grammar

  1. Reconhecer o áudio através de um abnf_grammar. Este exemplo refere-se a um recurso CustomClass: projects/project_id/locations/global/customClasses/test-custom-class-1, um CustomClass inline: test-custom-class-2, um token de classe: ADDRESSNUM, e um recurso PhraseSet: projects/project_id/locations/global/phraseSets/test-phrase-set-1. A primeira regra nas strings (após as declarações externas) é tratada como a raiz.

    Exemplo de pedido:

    {
       "config":{
          "adaptation":{
             "abnf_grammar":{
                "abnf_strings": [ 
                  "external ${projects/project_id/locations/global/phraseSets/test-phrase-set-1}" ,
                  "external ${projects/project_id/locations/global/customClasses/test-custom-class-1}" ,
                  "external ${test-custom-class-2}" ,
                  "external $ADDRESSNUM" ,
                  "$root = $test-phrase-set-1 $name lives in $ADDRESSNUM;" ,
                  "$name = $title $test-custom-class-1 $test-custom-class-2" ,
                  "$title = Mr | Mrs | Miss | Dr | Prof ;" 
                ]
             }
          }
       }
    }

O que se segue?