Introdução
Os sistemas de Reconhecimento automático de voz (ASR) disponibilizam transcrições de texto. Em geral, não passa de uma sequência de palavras. A Cisco conta com esses sistemas para gerar legendas em tempo real durante as reuniões no Webex. Um problema que acaba surgindo refere-se à possível dificuldade de ler as legendas sem pontuação e uso de letras maiúsculas. A pontuação faz total diferença quando o assunto é entender o significado de um texto. Imagine a seguinte sequência de palavras com duas opções de pontuação:“maria a gerente do banco ligou”.
Opção A: “Maria, a gerente do banco ligou.”
Opção B: “Maria, a gerente do banco, ligou.”
Uma única vírgula pode fazer uma diferença e tanto.
Falaremos sobre várias questões ao criar um sistema de pós-processamento:- Modelos de alta precisão para uso de maiúsculas e restabelecimento de pontuação a partir de um texto básico. Rápida inferência em resultados intercalares: para acompanhar as legendas em tempo real.
- Uso de pequenos recursos: o reconhecimento de voz é exaustivo do ponto de vista computacional; algo que não é necessário aos nossos modelos de pontuação.
- Capacidade de processar palavras fora do vocabulário: às vezes, será necessário pontuar ou usar maiúscula em palavras totalmente desconhecidas para o nosso modelo.
TruncBiRNN
A intuição e os experimentos apontam que é fundamental ter um contexto futuro ao criar um modelo de pontuação, pois é mais difícil determinar as marcações de pontuação em uma posição atual sem saber as várias outras palavras que se seguem. Para fazer uso de informações sobre os próximos tokens e não precisar atualizar todos os status ocultos de todos os tokens no sentido regressivo, optamos por truncar este sentido a uma janela fixa. No sentido progressivo, é apenas uma RNN normal. No sentido regressivo, consideramos apenas uma janela fixa em cada token, executando a RNN para essa janela (figura 2). Com essa janela, é possível obter uma inferência de tempo constante para um novo token de entrada (é necessário computar um status oculto no sentido progressivo e n+1 no sentido regressivo). Agora, para cada token, há status ocultos para sentidos progressivos e regressivos, respectivamente. Chamaremos essa camada de TruncBiRNN ou TruncBiGRU (já que usamos GRU). Os status ocultos podem ser computados em um tempo constante, independentemente da extensão da entrada. A operação de tempo constante é fundamental para que o modelo acompanhe as legendas em tempo real.Arquitetura
A arquitetura consiste da camada integrada, TruncBiGRU e camada de GRU unidirecional, e da camada totalmente conectada. Com relação ao resultado, usamos duas camadas softmax para pontuação e uso de maiúscula, respectivamente (figura 3). O modelo prevê o uso de maiúscula e a pontuação subsequente para cada palavra. Para uma melhor sincronização desses dois resultados e prognóstico do uso de maiúscula, também é necessário conhecer a incorporação do token anterior (para recuperar a pontuação da etapa anterior). Juntamente com uma função de perda personalizada (consulte a próxima seção), isso nos permite evitar casos nos quais uma frase é iniciada com uma palavra com inicial minúscula. Com relação ao prognóstico de pontuação, isso também ajuda a prever o uso de maiúscula para a próxima palavra. É por isso que concatenamos as incorporações atual e seguinte. Uma camada de resultado voltada à pontuação prevê a distribuição para todas as pontuações. Com relação ao nosso modelo, abrange:ponto – um ponto no meio da frase que não sugere, necessariamente, que a próxima palavra deve ser iniciada em maiúscula (“a.m.”,“D.C.”, etc)
vírgula
ponto de interrogação
reticências
dois pontos
travessão
ponto final – um ponto no final de uma frase
Com relação ao uso de maiúscula, há quatro classes:minúscula
maiúscula – todas as letras estão em maiúscula (“IEEE”, “NASA”, etc.)
inicial em maiúscula
alternado – por exemplo, “iPhone”
Primeira palavra com inicial em maiúscula – palavras que iniciam uma frase
As classes adicionais, “primeira palavra com inicial em maiúscula” e “ponto final”, podem soar redundantes a princípio, mas elas ajudam a ampliar a consistência das respostas relacionadas ao uso de maiúscula e pontuação. O “ponto final” sugere que a próxima resposta de uso de maiúscula não pode ser “minúscula”, enquanto “primeira palavra com inicial em maiúscula” indica que a pontuação anterior é um “ponto final” ou ponto de interrogação. Essas classes desempenham um papel importante na função de perda. Função de perda: É necessário otimizar a pontuação e o uso de maiúscula. Para tanto, usamos o produto da função de perda de registro com um coeficiente: No entanto, como mencionado anteriormente, os resultados de uma rede neural podem não ser perfeitamente correlativos. Por exemplo, o pontuador pode prever um “ponto final” para a palavra atual, mas o responsável pelo uso de maiúscula não prevê a “primeira palavra com inicial em maiúscula” para o próximo token. Apesar de raro, esse tipo de erro pode ser bastante evidente. Para lidar com essa questão, usamos um termo adicional de sanção na função de perda que penaliza esse tipo de erro: O primeiro termo corresponde à probabilidade de se ter uma “primeira palavra com inicial maiúscula” após um “ponto que não seja final”; o segundo refere-se à probabilidade de não se ter uma “primeira palavra com inicial maiúscula” após um “ponto final”. Essa sanção soma-se com os tokens nos quais esse erro ocorre. Além disso, passamos dois tensores consecutivos da camada anterior às camadas softmax. Dessa forma, é possível reduzir satisfatoriamente os termos de sanção. Por fim, há a função de perda: