O reconhecimento de voz evoluiu bastante ao longo dos últimos anos. Inicialmente, o reconhecimento processava-se apenas em modo discreto, isto é, o utilizador tinha que fazer uma pausa entre cada palavra ditada. Actualmente, o utilizador já tem a possibilidade de efectuar ditados contínuos ao computador. Para além disso, o reconhecimento também se tornou mais inteligente, uma vez que possui um conjunto de regras gramaticais incorporadas, permitindo assim perceber melhor o que está a ser ditado.
O reconhecimento de voz usa diferentes técnicas para reconhecer a voz humana. Funciona assim como uma "pipeline" que transforma os sinais áudio digitais provenientes da placa de som em fala reconhecida. Estes sinais passam por diversas etapas, ao longo das quais são aplicados método matemáticos e estatísticos de forma a tentar compreender o que está a ser ditado.
Transformação do PCM
Quando o utilizador fornece um comando de voz pelo microfone, este é transmitido para a placa de som, sendo o sinal analógico amostrado 16.000 vezes por segundo. De seguida, este é transformado para digital através de uma técnica chamada Pulse Code Modulation (PCM). Esta forma digital do sinal não é nem mais nem menos do que uma stream de amplitudes representando o sinal analógico. No entanto, o software de reconhecimento de voz não pode trabalhar directamente com base nesta stream, dado que é muito complicado procurar padrões que possam ser relacionadas com o que está actualmente a ser ditado. É neste sentido que esta é transformada num conjunto de bandas de frequência discreta, usando uma técnica chamada Windowed Fast Fourier Transform (FFT). Esta consiste numa amostragem do sinal áudio em cada centésimo de segundo, mas desta vez no domínio da frequência. Assim, a stream de entrada é agora representada por um conjunto de bandas de frequência discretas, podendo ser facilmente identificadas as componentes de frequência de um som. A partir destas componentes, é possível aproximar-nos do que o ouvido humano ouve.
O próximo passo envolve o reconhecimento destas bandas de frequência. Para isso, o software de reconhecimento de voz possui uma base de dados de milhares de frequências ou "fonemas". Um fonema é a mais pequena unidade de fala de um idioma ou dialecto. A dicção de fonemas é diferente entre si, tal que, ao substituir um fonema numa palavra, esta passa a ter um significado completamente diferente. Por exemplo, se substituirmos o fonema "b" na palavra "bato" pelo fonema "m", o significado será alterado para "mato". A base de dados de fonemas é usada para comparar e identificar as banda de frequência áudio que foram amostradas. Se, por exemplo, a frequência de entrada tem um som igual ao "t", o software irá tentar compará-lo com o respectivo fonema na base de dados. Ao encontrar o fonema correspondente, é atribuído ao sinal de entrada o número identificador do fonema na base de dados, também chamado de "feature number".
Graças às transformadas de Fourier e à base de dados de fonemas, tornou-se assim possível passar de um vector PCM com 16.000 entradas para um vector com apenas 100 entradas (por segundo), transformando o processo de reconhecimento em tempo real fazível.
Reconhecimento de padrões acústicos
Aparentemente, o processo é simples. A cada banda de frequência seria associado o seu fonema correspondente. O software iria de seguida juntar os fonemas em palavras, e o computador passaria a compreender a voz humana. Aparentemente. No entanto, o processo é muito mais complicado quando começamos a olhar para ele com mais detalhe. Podem existir tantas variações no som causado pelo modo como as palavras são pronunciadas, que é quase impossível encontrar a entrada na base de dados correspondente ao som. A juntar a isto, diferentes pessoas pronunciam a mesma palavra de forma diferente. Para complicar ainda mais a situação, o ambiente também adiciona a sua componente de ruído: numa situação em que o utilizador está na secretária do seu escritório, com o consequente ambiente ruidoso que daí advém, o reconhecedor de voz pode apresentar resultados diferentes de uma situação em que o utilizador está numa sala silenciosa com um microfone de alta qualidade. Sem esquecer que o próprio som de um fonema varia conforme os fonemas que o rodeiam e que o som produzido por um fonema altera-se desde o início da sua pronúncia até ao seu fim. Sendo assim, o software tem que usar técnicas complexas para aproximar o som de entrada e descobrir quais os fonemas que estão envolvidos.
O ruído de fundo e os problemas de variação são solucionados com recurso a métodos estatísticos, ao permitirmos que um feature number seja usado por mais do que um fonema. Isto apenas é possível porque a duração de um fonema é longa se comparada com a frequência de amostragem de um centésimo de segundo. Isto quer dizer que enquanto um fonema está a ser pronunciado, estão a ser atribuídos vários feature numbers. Admitindo que o software já foi treinado, o que quer dizer que já foram estabelecidas as probabilidades de ocorrência de um determinado feature number num fonema, resta-nos calcular a probabilidade do conjunto de feature numbers registados ser realmente o fonema (ver exemplo na figura 1).
O reconhecedor de voz também necessita de saber quando é que um fonema acaba e outro começa. Para isto é usada uma técnica matemática denominada "Hidden Markov Models" (HMM). Admitindo que o reconhecedor de voz registou os feature numbers correspondestes a dois fonemas consecutivos de uma palavra, torna-se complicado, a olho humano, distinguir onde começam e acabam os fonemas, sobretudo se estes dois fonemas tiverem algum feature number em comum (ver figura 2). É aqui que entra a técnica das HMM's, que consiste na explosão combinatória das possibilidades de qualquer fonema ser seguido de qualquer outro fonema, ligados por meio de transições com pesos associados, até que se torna possível distinguir com clareza onde começa e acaba o fonema. Contudo, este método não é viável se não forem aplicadas limitações, como se irá ver de seguida, dadas as gigantescas quantidades de memória necessárias.
Também é de referir a importância da existência
de um fonema "silencioso", também ele caracterizado por feature
numbers, de forma a identificar pausas nas palavras ditadas.
Ainda existe um outro motivo de preocupação: o som de um fonema depende geralmente do fonema anterior e posterior. O software de reconhecimento de voz consegue superar este problema criando "tri-fonemas", que são fonemas no contexto de fonemas consecutivos. Dado que a língua portuguesa tem 28 fonemas, existem 28*28*28 = 21.952 tri-fonemas, o que constitui um número demasiado elevado em termos de esforço de computação, daí que os tri-fonemas que tenham um som semelhante sejam agrupados, acabando por se transformar num só.
Muitos outros problemas subsistem, tal como a evolução do som de um fonema não ser constante, o próprio reconhecedor de voz não saber quando é que o utilizador vai começar a falar. Contudo, não nos vamos debruçar sobre eles.
Modelos linguísticos
O software de reconhecimento de voz é agora capaz de identificar fonemas que são pronunciados. O passo seguinte consiste em reconhecer palavras, comparando as combinações de fonemas com as palavras contidas no dicionário utilizado pelo programa. Contudo, isto não é assim tão simples: o utilizador pode enganar-se ao pronunciar uma palavra que não faz parte do dicionário; o software de reconhecimento de voz pode enganar-se ao reconhecer uma palavra; ainda não se sabe onde começa uma palavra e acaba a outra; o processamento de voz continua incomportável quer a nível de exigências de CPU como de memória. É por isto tudo que se torna necessário para o reconhecedor de voz restringir as possibilidades do que está a ser ditado, através do recurso a modelos linguísticos e gramáticas adequadas.
Se o sistema for programado para fazer o reconhecimento de comandos, o modelo
linguístico é um pouco mais simples do que se fosse para reconhecimento
da linguagem natural. Nesse caso, o dicionário contém todas
as formas possíveis de se pronunciar cada comando registado no sistema.
Para a fala contínua, é preciso que o sistema utilize um dicionário
com todas as palavras da língua ou pelo menos com todas as palavras
usadas com maior frequência.
As condicionantes não ficam por aqui. O dicionário deve também
registar as classes gramaticais de cada vocábulo. Para além
disso, é preciso construir um modelo gramatical com as construções
possíveis e a probabilidade de ocorrência de cada tipo de construção.
Com a ajuda destas informações, o software de reconhecimento
de voz tem condições para concluir que as frases "foi há
três anos" e "foi a três anos" não estão
correctas, mas sim "foi à três anos". Mais uma vez,
para o caso do ditado discreto (reconhecimento de comandos), as gramáticas
são muito mais simples, uma vez que o sistema sabe com antecedência
quais as palavras que está à espera. (Para mais informações
sobre o reconhecimento de linguagem natural, ver a secção dedicada
ao NLU - Natural Language Understanding).
Antes disto, o software deve processar os fonemas para identificar correctamente o agrupamento de palavras. Os fonemas contidos em "foi à três anos" sugerem termos como "foia" e "trêzanos", que não estão no dicionário de vocábulos conhecidos, logo, são descartados. Por outro lado, ao ouvir a palavra "comunicação", o reconhecedor de voz terá que decidir se ouviu "comunica acção" ou um único termo. O modelo gramatical vai indicar qual é a construção mais plausível. Os programas mais recentemente implementados fazem a análise de toda a frase, para ampliar a precisão do reconhecimento, tomando assim vantagem do facto da linguagem apresentar uma estrutura. Po exemplo, supondo que o reconhecedor de voz tem dúvidas entre a escolha das palavras "hora" e "ora", mas sabe que a palavra anterior é "uma", então está na possibilidade de efectuar a escolha certa porque sabe que a sequência "uma hora" faz mais sentido do que a sequência "uma ora". A técnica que está por detrás disto usa "trigramas", baseados em modelos estatísticos, que calculam a probabilidade de uma determinada sequência de palavras ocorrer.
A maioria dos pacotes de reconhecimento da fala vem com dicionários que contêm cerca de 150 mil palavras do português. Os sistemas na língua inglesa também trabalham com aproximadamente a mesma quantidade de termos no dicionário.
Treino do software
Apesar de todas as técnicas mencionadas acima, para que serve uma grande base de dados de fonemas se estes não correspondem à nossa voz ou pronúncia? Por exemplo, o que é que acontece quando uma base de dados desenvolvida no Brasil é colocada à venda em Portugal?
Este é um verdadeiro problema, e a única solução
é possibilitar ao utilizador "treinar" os modelos acústicos.
No caso de um sistema mono-utilizador, basta fornecer um texto pré-determinado
ao utilizador para este ditar. No caso de sistemas multi-utilizador, por exemplo
no caso de uma central telefónica, não é viável
pedir a cada utilizador falar durante 15 minutos para treinar o reconhecedor
de voz. A solução para este caso é efectuar um treino
conjunto do sistema por várias pessoas, sendo os pesos das transições
das HMM's ajustado de acordo com a média dos modelos, de forma a tornar
o sistema capaz de reconhecer o maior número de utilizadores possível.