Introdução à adaptação de modelos

Vista geral

Pode usar a funcionalidade de adaptação do modelo para ajudar o Cloud Speech-to-Text a reconhecer palavras ou expressões específicas com mais frequência do que outras opções que, de outro modo, poderiam ser sugeridas. Por exemplo, suponha que os seus dados de áudio incluem frequentemente a palavra "tempo". Quando o STT na nuvem encontra a palavra "tempo", quer que transcreva a palavra como "tempo" mais frequentemente do que "se". Neste caso, pode usar a adaptação do modelo para favorecer o reconhecimento de "tempo" pelo Cloud STT.

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

  • Melhorar a precisão das palavras e expressões que ocorrem frequentemente 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 pelo STT do Google Cloud. O STT na nuvem inclui um vocabulário muito grande. 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 CSTT 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 o STT do Google Cloud 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 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 sua morada. 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 o STT na nuvem 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 STT do Google Cloud pode transcrever com maior precisão expressões como "123 Rua Principal" e "987 Avenida Grande" 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 Cloud STT ignora o token sem acionar um erro, mas continua a usar o resto da expressão para contexto.

Aulas personalizadas

Também pode criar o seu próprio 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 no formato Backus-Naur aumentado (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 Cloud STT 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 na secção seguinte.

Ajuste os resultados da transcrição com o aumento

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-lhe 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 força 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 STT na nuvem que reconheça "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 Cloud Speech-to-Text e encontrado um número elevado de erros ao reconhecer a palavra correta ("justo"). Neste caso, pode querer usar adicionalmente as expressões com aumento para atribuir um valor de aumento mais elevado a "justo" do que a "tarifa". O valor ponderado mais elevado atribuído a "justo" enviesa a Cloud Speech-to-Text API para escolher "justo" com mais frequência do que "tarifa". Sem valores de aumento, o modelo de reconhecimento vai reconhecer "fair" e "fare" com igual probabilidade.

Noções básicas sobre os impulsos

Quando usa o aumento, atribui um valor ponderado a phrase itens num recurso PhraseSet. O STT na nuvem 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 STT na nuvem 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 o exemplo anterior, 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" ou "baleia azul". O modelo de reconhecimento de STT na nuvem tem, então, maior probabilidade de reconhecer frases relacionadas no seu áudio que contenham partes da frase original com aumento, mas que não correspondem 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 ter os melhores resultados, experimente ajustar 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 Cloud STT. 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 STT na nuvem 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". Neste caso, é importante que o modelo identifique "fionity" e "ionity" corretamente.

O comando seguinte 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. Criar 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 valor 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" (chama-me fionity e, meu Deus, o que temos aqui, 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 novamente o áudio de amostra, 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"
       }
    }

Consulte 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 a 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 os ficheiros CustomClass e 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, 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?