Visão geral
É possível usar o recurso de adaptação de modelo para ajudar a Cloud Speech-to-Text a reconhecer palavras ou frases específicas com mais frequência do que outras opções que podem ser sugeridas. Por exemplo, imagine que seus dados de áudio geralmente incluam a palavra "assento". Quando a Cloud STT encontra a palavra "assento", você quer transcrevê-la como "assento" com mais frequência do que "acento". Nesse caso, você pode usar a adaptação de modelo para polarizar a Cloud STT de modo que ela reconheça 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 que o modelo de reconhecimento identifique comandos de voz normalmente falados pelos usuários.
Expandir o vocabulário de palavras reconhecidas pela Cloud STT. 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.
Para saber se o recurso de adaptação de modelo está disponível no seu idioma, consulte a página de suporte a idiomas.
Melhorar o reconhecimento de palavras e frases
Para aumentar a chance de a Cloud STT reconhecer a palavra "assento" ao transcrever dados de áudio, transmita a palavra única "assento" no objeto PhraseSet em um recurso SpeechAdaptation.
Quando você envia uma frase com várias palavras, a Cloud STT tem mais chances de reconhecer essas palavras em sequência. Fornecer uma frase também aumenta a probabilidade de reconhecimento de partes da frase, incluindo palavras individuais. Consulte a página Limites de conteúdo para saber os limites sobre o número e o tamanho dessas frases.
Se quiser, ajuste a força da adaptação do modelo usando o recurso de otimização da adaptação de modelo.
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 seus dados de áudio incluam 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 Rua Principal, 123, quarta casa à esquerda". Nesse caso, você quer que a Cloud STT reconheça a sequência de números ("123") como parte de um endereço, em vez de um número ordinal ("centésimo vigésimo terceiro"). No entanto, nem todas as pessoas moram na "Rua Principal, 123". Não é muito prático listar todos os endereços possíveis em um objeto PhraseSet. Em vez disso, é possível usar uma classe para indicar que um número de rua deve ser reconhecido independentemente do número. Neste exemplo, a Cloud STT pode transcrever frases com mais acurácia, como "Rua Principal, 123" e "Avenida Beira-Mar, 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 de um áudio de origem, forneça o valor $ADDRESSNUM no objeto SpeechContext.
É 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 ajudará em casos em que
o áudio contém uma frase semelhante, mas não idêntica,
como "Estou na Rua Principal, 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 Cloud STT ignora o token sem acionar um erro, mas ainda usa o resto da frase para o 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.
Gramática ABNF
Também é possível usar gramáticas no formato aumentado de Backus-Naur (ABNF, na sigla em inglês) para especificar padrões de palavras. Incluir uma gramática ABNF na adaptação do modelo da solicitação aumenta a probabilidade de a Cloud STT reconhecer todas as palavras que correspondam à gramática especificada.
Para usar esse recurso, inclua um objeto ABNF
grammar no campo SpeechAdaptation da solicitação. As gramáticas ABNF também podem incluir referências a recursos CustomClass e PhraseSet. Para saber mais sobre a sintaxe desse campo, consulte Speech
Recognition Grammar Specification e nosso code
sample na seção a seguir.
Ajustar os resultados da transcrição usando a otimização
Por padrão, a adaptação de modelo já proporciona efeito suficiente na maioria dos casos. 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 o aumento se 1) você já tiver implementado a adaptação de modelo e 2) quiser ajustar a força dos efeitos da adaptação de modelo nos resultados da transcrição.
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 informará à Cloud STT para 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 Cloud Speech-to-Text e encontrou um grande número de erros ao reconhecer a palavra correta ("sessão"). Nesse caso, o ideal é usar também as frases com otimização para atribuir um valor de otimização maior a "sessão" do que "seção". O valor ponderado mais alto atribuído à "sessão" direciona a API Cloud 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.
Conceitos básicos sobre a otimização
Ao usar a otimização, atribua um valor ponderado a phrase itens em um recurso PhraseSet. A Cloud STT consulta esse valor ponderado ao selecionar uma possível transcrição para palavras nos seus dados de áudio. Quanto maior for o valor, maior será a probabilidade de a Cloud STT escolher essa palavra ou frase entre as alternativas possíveis.
Por exemplo, você quer atribuir um
valor de aumento à 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 aumento, é mais provável que o modelo de reconhecimento reconheça
essa frase inteira em cada palavra.
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 de 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 2 palavras), como "minha favorita", "minha exposição favorita", "exposição favorita", "minha exposição favorita no Museu Americano de História Natural", "Museu de História Natural dos Estados Unidos" ou "baleia azul". O modelo de reconhecimento da Cloud STT tem mais chances de reconhecer no áudio frases relacionadas que contêm partes da frase original otimizada, mas não têm correspondência com cada palavra.
Definir os valores de otimização
Os valores de otimização precisam ser um valor flutuante maior 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 estava no áudio, mas não foi reconhecida corretamente pela Cloud STT. 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.
Receber notificações de tempo limite
As respostas da Cloud STT incluem um campo SpeechAdaptationInfo, que fornece informações sobre o comportamento da adaptação de modelo durante o reconhecimento. Se um tempo limite relacionado à adaptação do modelo for atingido, adaptationTimeout será true e timeoutMessage especificará qual configuração de adaptação causou o tempo limite. Quando um tempo limite é atingido, a adaptação
do modelo não tem efeito na transcrição retornada.
Exemplo de caso de uso usando a adaptação de modelo
O exemplo a seguir mostra o processo de uso da adaptação de modelo para transcrever uma gravação de áudio de alguém dizendo "call me fionity and oh my gosh what do we have here ionity". Nesse caso, é importante que o modelo identifique corretamente "fionity" e "ionity".
O comando a seguir 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 solicitação:
{ "config":{ "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
Melhorar a transcrição usando 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 solicitação:
{ "phraseSetId":"test-phrase-set-1" }
Gere 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 frases "fionity" e "ionity" ao
PhraseSete atribua um valorboostde 10 para cada uma delas: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
PhraseSetfoi atualizado para:{ "phrases":[ { "value":"ionity", "boost":10 }, { "value":"fionity", "boost":10 } ] }
Identifique o áudio novamente, desta vez usando a adaptação do modelo e o
PhraseSetcriado anteriormente. Os resultados transcritos agora estão 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 solicitação:
{ "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 usando 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 solicitação:
{ "customClassId": "test-custom-class-1" }
Gere 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"
Reconheça o clipe de áudio de teste. O
CustomClassestá vazio, então a transcrição retornada ainda 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": {"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 solicitação:
{ "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 frases "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"}]}'
Isso 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 agora 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": {"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 solicitação:
{ "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" } }
Referenciar um CustomClass em um PhraseSet
Atualize o recurso
PhraseSetcriado anteriormente para consultar oCustomClass: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 solicitação:
{ "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" } }
Reconheça o áudio usando o 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 solicitação:
{ "phrases":[ { "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost":10 } ] }
Exclua CustomClass e PhraseSet
Exclua 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"
Exclua 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"
Melhorar os resultados da transcrição usando um ABNF Grammar.
Reconheça o áudio usando um
abnf_grammar. Este exemplo se refere a um recursoCustomClass: projects/project_id/locations/global/customClasses/test-custom-class-1, umCustomClassinline: test-custom-class-2, token de classe: ADDRESSNUM e um recursoPhraseSet: projects/project_id/locations/global/phraseSets/test-phrase-set-1. A primeira regra nas strings (após declarações externas) será tratada como a raiz.Exemplo de solicitação:
{ "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 ;" ] } } } }
A seguir
- Saiba como usar a adaptação de modelo em uma solicitação da Cloud STT.
- Confira a lista de tokens de classe aceitos