Visão geral
É possível usar o recurso adaptação da fala para ajudar o Speech-to-Text a reconhecer palavras ou frases específicas com mais frequência do que outras opções sugeridas. Por exemplo, suponha que seus dados de áudio geralmente incluem a palavra "assento". Quando o Speech-to-Text encontra a palavra "assento", você quer transcrevê-la como "assento" com mais frequência do que "acento". Nesse caso, você pode usar a adequação de fala para criar um viés e pedir para o Speech-to-Text reconhecer o termo como "assento".
A adaptação do 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 o modelo de reconhecimento para que identifique comandos de voz normalmente falados pelos usuários.
Como expandir o vocabulário das palavras reconhecidas pela Speech-to-Text. O 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 da fala.
Como melhorar a acurácia da transcrição de fala quando o áudio fornecido tiver ruídos ou não for muito claro.
Para ver se o recurso de adaptação do modelo está disponível para seu idioma, consulte a página de suporte a idiomas.
Melhorar o reconhecimento de palavras e frases
Para aumentar a probabilidade do Speech-to-Text reconhecer a palavra "assento" ao transcrever seus
dados de áudio, transmita a única palavra "assento"
no campo PhraseSet
objeto
em um recurso SpeechAdaptation.
Quando você fornece uma frase com várias palavras, o Speech-to-Text tem mais chances de reconhecer essas palavras na 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 melhoria de adaptação do 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, suponha 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 o Speech-to-Text reconheça a primeira sequência de números ("123") como um
endereço, em vez de um número ordinal ("cento e vinte e três"). 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, o Speech-to-Text 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 do modelo, inclua um token de classe no
campo phrases
de um recurso PhraseSet
. Consulte a
lista de tokens de classe compatíveis para ver quais
tokens estão disponíveis para 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, o
Speech-to-Text ignora o token sem mostrar um erro e
ainda usa o restante da frase como 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
regionais. Os nomes dos restaurantes são relativamente raros na fala geral e,
portanto, são menos propensos a serem 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 pré-criados. Um phrase
pode
incluir tokens de classe pré-criados 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 o Speech-to-Text 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
abaixo.
Ajustar os resultados da transcrição usando otimização
Por padrão, a adaptação do modelo já fornece um efeito suficiente na maioria dos casos. O recurso de otimização da adaptação do modelo permite aumentar o viés 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 do modelo e 2) quiser ajustar a força dos efeitos da adaptação do 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 do modelo
para aumentar a probabilidade do modelo reconhecer "sessão" e
"seção" adicionando-as como phrases
em um recurso PhraseSet
. Isso informará ao
Speech-to-Text 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 aparecerem com mais frequência no áudio. Talvez você já tenha transcrito seu áudio usando a API Speech-to-Text e encontrou um grande número de erros reconhecendo 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 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 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
. O Speech-to-Text consulta esse valor ponderado ao selecionar uma possível
transcrição para palavras nos seus dados de áudio. Quanto maior
o valor, maior será a probabilidade do Speech-to-Text escolher essa
frase entre as possíveis alternativas.
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 você não encontrar os resultados que está procurando ao promover uma frase com várias palavras,
sugerimos que você adicione todas as frases, como duas palavras, em ordem, que compõem a
frase como adicional. phrase
itens e atribuir valores de otimização para cada um. Continuando
com o exemplo acima, você poderia investigar a adição de bigramas e N-gramas
adicionais (mais de 2 palavras), como "minha favorita",
"minha exposição favorita", "exposição favorita", "minha exposição favorita". no Museu de História Natural
dos Estados Unidos, "Museu de História Natural
dos Estados Unidos", "baleia-azul" e assim por diante. O modelo
de reconhecimento do Speech-to-Text tem mais chances de reconhecer frases relacionadas no
áudio que contêm partes da frase original aprimorada, mas não têm correspondência
entre palavras.
Definir 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. Para melhores resultados, teste seus resultados de transcrição ajustando os valores de otimização para cima ou para baixo até conseguir resultados de transcrição precisos.
Valores de otimização maiores podem resultar em menos falsos negativos, que são casos em que a palavra ou frase ocorreu no áudio mas não foi reconhecida corretamente pelo Speech-to-Text. No entanto, a otimização também pode aumentar a probabilidade de falsos positivos. Ou seja, 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 do Speech-to-Text incluem um campo
SpeechAdaptationInfo
,
que fornece informações sobre o comportamento de adaptação do modelo durante
o reconhecimento. Se ocorrer um tempo limite relacionado à adaptação do modelo,
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
PhraseSet
e atribua um valorboost
de 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
PhraseSet
foi 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
PhraseSet
criado 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
CustomClass
está 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
PhraseSet
criado 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, umCustomClass
inline: 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
- Aprenda a usar o adaptador da fala em uma solicitação do Speech-to-Text.
- Confira a lista de tokens de classe compatíveis.