Pós-processamento em sistemas de reconhecimento automático de voz

On By Pavel Pekichev8 Min Read
Post-processing in Automatic Speech Recognition systems

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.
Algumas abordagens clássicas com base em n-grama [1] são de qualidade relativamente boa; há, no entanto, alguns aspectos negativos. Apesar de modelos de n-grama apresentarem uma rápida inferência, até mesmo modelos de 3-grama podem ocupar vários gigabites de espaço de disco, o que depende do vocabulário da linguagem. Outro ponto negativo refere-se à questão das palavras fora do vocabulário. Se uma palavra não estiver nos dados de treinamento, o modelo não conseguirá processar normalmente, o que também poderá afetar negativamente a precisão. As abordagens modernas fazem uso de técnicas computacionalmente intensivas, como atenção ou RNN bidirecional [3] e arquiteturas de rede neural com base no transformador [2]. Esses modelos apresentam elevada precisão [2], embora não sejam muito adequados para casos de uso de streaming ao vivo, já que demandam a extensão total da sequência de entrada para executar a inferência. Quando se tem, por exemplo, apenas um novo token de entrada para uma RNN bidirecional, é preciso atualizar os status ocultos de todos os tokens identificados anteriormente pelo modelo (figura 1).
Computações no passo regressivo de uma RNN bidirecional

Figura 1. Computações no passo regressivo de uma RNN bidirecional. Todos os status ocultos anteriores devem ser sequencialmente atualizados para cada nova entrada

  Determinadas abordagens tentam solucionar a questão de pontuação e uso de letra maiúscula ao definir dois modelos diferentes [3][6], enquanto outras combinam ambos em um único modelo, uma vez que os resultados são altamente correlativos [4][2]. As palavras que vêm logo após a pontuação demonstram de forma satisfatória essa correlação: palavras após pontos finais são, possivelmente, iniciadas em maiúscula, enquanto as palavras após vírgulas são, possivelmente, iniciadas em minúscula. Há abordagens que sugerem uma arquitetura com vários resultados [4]: um por tarefa, respectivamente. Elas demonstram que essa arquitetura suplanta as arquiteturas isoladas de pontuação e uso de maiúscula. Dadas as considerações acima, optamos pelo uso de uma única rede neural com base em GRU, com dois resultados para pontuação e uso de maiúscula. Com relação às palavras não presentes no vocabulário, usamos a técnica do tipo SentencePiece [6], que segmenta palavras desconhecidas em tokens menores ou, em casos extremos, em caracteres. Abaixo você encontra os detalhes e considerações.

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).
Exemplo de TruncBiRNN

Figura 2. Neste exemplo, para cada token atual, somente os próximos dois são levados em consideração para computação do status oculto 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).
Figura 3. Arquitetura de modelo com tamanho de janela igual a dois tokens para TruncBiGRU

Figura 3. Arquitetura de modelo com tamanho de janela igual a dois tokens para TruncBiGRU.

  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: Função de perda 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: sanção por divergência 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: Função de perda

Treinamento

Para fins de treinamento, usamos transcrições de texto de um conjunto de reuniões internas no Webex e dados de texto extraídos do Wikipedia. Antes de tudo, os dados do treinamento são limpos e divididos em duas frases. Durante o treinamento, cada amostra é gerada a partir de frases consecutivas e truncada a uma extensão aleatória de uma distribuição fixa, o que permite ao modelo identificar frases cortadas durante o treinamento e, consequentemente, lidar com os resultados intercalares durante a inferência. Em seguida, treinamos o modelo em um total aproximado de 300 megabites de texto do Wikipedia, ajustando-o a transcrições de reunião no Webex. O pré-treinamento no Wikipedia ajuda a otimizar todas as classes de pontuação, embora seja particularmente útil para as classes de uso de maiúscula, o que se deve, a nosso ver, à grande quantidade de nomes próprios no corpus do Wikipedia. Nós aplicamos a mesma preparação de dados em nossos conjuntos de avaliação ao concatenar frases e truncá-las em extensões aleatórias. Dessa forma, é possível avaliar a precisão do que possivelmente observaríamos em status intercalares de transcrição.

Conclusão

Ao fazer uso de técnicas relativamente fáceis com algumas personalizações da arquitetura, como GRU truncada e sanção adicional em uma função de perda, criamos um modelo que pode ser executado on-line. A experiência de leitura de legendas ao vivo é substancialmente otimizada com o uso de maiúscula e pontuações em tempo real. Referências [1] A. Gravano, M. Jansche, and M. Bacchiani, “Restoring punctuation and capitalization in transcribed speech”, in ICASSP 2009, 2009, pp. 4741–4744. [2] Monica Sunkara, Srikanth Ronanki, Kalpit Dixit, Sravan Bodapati, Katrin Kirchhoff, “Robust Prediction of Punctuation and Truecasing for Medical ASR” [3] Tilk, Ottokar & Alumäe, Tanel. (2016). Bidirectional Recurrent Neural Network with Attention Mechanism for Punctuation Restoration. 3047-3051. 10.21437/Interspeech.2016-1517. [4] Vardaan Pahuja, Anirban Laha, Shachar Mirkin, Vikas Raykar, Lili Kotlerman, Guy Lev “Joint Learning of Correlated Sequence Labelling Tasks Using Bidirectional Recurrent Neural Networks” [5] Wang, Peilu & Qian, Yao & Soong, Frank & He, Lei & Zhao, Hai. (2015). Part-of-Speech Tagging with Bidirectional Long Short-Term Memory Recurrent Neural Network. [6] Lita, Lucian & Ittycheriah, Abe & Roukos, Salim & Kambhatla, Nanda. (2003). tRuEcasIng. 10.3115/1075096.1075116. [7] https://github.com/google/sentencepiece Inscreva-se no Webex Acesse nossa página inicial ou entre em contato conosco para obter assistência. Clique aqui para saber mais sobre as ofertas do Webex e para se inscrever em uma conta grátis.

About The Author

Pavel Pekichev
Pavel Pekichev Machine Learning Scientist Cisco
Pavel Pekichev is a Machine Learning Scientist at Cisco working on speech recognition systems.
Learn more

Topics


More like this