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
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" }
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"\
Adicione as expressões "fionity" e "ionity" ao elemento
PhraseSet
e atribua um valor deboost
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 } ] }
Reconhecer o áudio novamente, desta vez usando a adaptação do modelo e o
PhraseSet
criado 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
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" }
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"
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" } }
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" } ] }
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
Atualize o recurso
PhraseSet
criado anteriormente para fazer referência aoCustomClass
: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" } }
Reconhecer o áudio através do recurso
PhraseSet
(que se refere aoCustomClass
). 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
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"
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
Reconhecer o áudio através de um
abnf_grammar
. Este exemplo refere-se a um recursoCustomClass
: projects/project_id/locations/global/customClasses/test-custom-class-1, umCustomClass
inline: test-custom-class-2, um token de classe: ADDRESSNUM, e um recursoPhraseSet
: 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?
- Saiba como usar a adaptação de modelos num pedido ao Speech-to-Text.
- Reveja a lista de tokens de classe suportados.