Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Um Módulo de voz em Português do Brasil para o
Sistema de Síntese de Voz Festival
Eduardo Gomes Pullen Parente
Brasília
2009
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Um Módulo de voz em Português do Brasil para o
Sistema de Síntese de Voz Festival
Eduardo Gomes Pullen Parente
Monografia apresentada como requisito parcial
para conclusão do Bacharelado em Ciência da Computação
Orientador
Prof. Marco Aurélio de Carvalho
Brasília
2009
Universidade de Brasília — UnB
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Bacharelado em Ciência da Computação
Coordenador: Prof. Marcos Vinicius Lamar
Banca examinadora composta por:
Prof. Marco Aurélio de Carvalho (Orientador) — CIC/UnB
Prof.a Maria de Fátima Ramos Brandão — CIC/UnB
Prof.a Lúbia Mara Lopes Rodrigues — CIC/UnB
CIP — Catalogação Internacional na Publicação
Parente, Eduardo Gomes Pullen.
Um Módulo de voz em Português do Brasil para o Sistema de Síntese de Voz Festival / Eduardo Gomes Pullen Parente. Brasília :
UnB, 2009.
125 p. : il. ; 29,5 cm.
Monografia (Graduação) — Universidade de Brasília, Brasília,
2009.
1. síntese de fala, 2. texto-fala, 3. TTS, 4. Festival, 5. MBROLA
CDU 004
Endereço:
Universidade de Brasília
Campus Universitário Darcy Ribeiro — Asa Norte
CEP 70910-900
Brasília–DF — Brasil
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Um Módulo de voz em Português do Brasil para o
Sistema de Síntese de Voz Festival
Eduardo Gomes Pullen Parente
Monografia apresentada como requisito parcial
para conclusão do Bacharelado em Ciência da Computação
Prof. Marco Aurélio de Carvalho (Orientador)
CIC/UnB
Prof.a Maria de Fátima Ramos Brandão
CIC/UnB
Prof.a Lúbia Mara Lopes Rodrigues
CIC/UnB
Prof. Marcos Vinicius Lamar
Coordenador do Bacharelado em Ciência da Computação
Brasília, 23 de maio de 2009
Agradecimentos
Agradeço a minha mãe que me apoiou desde o início deste projeto e ao meu pai e à
Patrícia que me ajudaram na montagem da apresentação deste trabalho. Agradeço
também aos meus irmãos por terem paciência comigo durante esse ano decisivo e à
Mariana que desde julho vem me suportando enquanto eu dividia meu tempo entre
ela e a monografia.
Agradeço ainda ao Marco Aurélio por ter acreditado no sucesso do projeto desde
o início e por ter provido todas as condições para que fosse possível sua realização
e para que pudesse ser conduzido com qualidade.
Por fim agradeço ao Josafá pela colaboração e disponibilidade que conduziram
este trabalho ao final bem sucedido que tomou.
i
Resumo
O presente trabalho descreve o processo de produção um módulo de voz para o
sistema de síntese de voz Festival, sistema capaz de produzir uma pronúncia a
partir de um texto, usando suas ferramentas e o uso da voz em português do Brasil
do projeto MBROLA. O resultado desse trabalho é um software capaz de receber
um texto em português do Brasil e devolver um arquivo de som que pode ser usado
para aplicativos na internet.
Palavras-chave: síntese de fala, texto-fala, TTS, Festival, MBROLA
ii
Abstract
This work describes the process of building a voice for the text-to-speech system
Festival, the Festival can receive a text file and return an voice file, using its tools
and the project MBROLA´s brazilian portuguese voice. The result of this work is a
software able to receive a brazilian portuguese text and to return an audio file that
can be used to communicate with people throught the internet.
Keywords: speech synthesis, text-to-speech, TTS, Festival, MBROLA
iii
Sumário
1 Introdução
1.1 Motivação . . . . . . . . . . .
1.2 Problema . . . . . . . . . . .
1.3 Objetivos . . . . . . . . . . .
1.3.1 Objetivos Gerais . . .
1.3.2 Objetivos Específicos
1.4 Capítulos Seguintes . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
2
2
3
2 Sistemas Texto-Fala
2.1 Histórico . . . . . . . . . . . . . . . . . . . .
2.2 Aplicações . . . . . . . . . . . . . . . . . . .
2.2.1 TDD . . . . . . . . . . . . . . . . . . .
2.2.2 Portais de Voz . . . . . . . . . . . . .
2.3 Como Funciona um Sistema de Texto-Fala .
2.4 Sistemas Texto-Fala Existentes . . . . . . .
2.5 Análise e síntese de voz . . . . . . . . . . . .
2.5.1 Fontes sonoras . . . . . . . . . . . . .
2.5.2 Filtros . . . . . . . . . . . . . . . . . .
2.5.3 Predição Linear . . . . . . . . . . . .
2.5.4 Análise da fala pelo método LPC . .
2.5.5 Síntese de Fala por Computador . .
2.5.6 Síntese de Voz por Análise da Fala .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
8
8
8
9
10
10
10
12
16
17
18
18
.
.
.
.
.
.
20
21
21
22
23
23
24
.
.
.
.
28
28
29
30
31
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Considerações Fonéticas do Português
3.1 Classes de Fonemas . . . . . . . . . . . . . .
3.1.1 Classificação das Vogais . . . . . . .
3.1.2 Classificação das consoantes . . . . .
3.1.3 Semivogais . . . . . . . . . . . . . . .
3.2 Representação do Português usando o AFI .
3.3 Difones . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Festival
4.1 Vantagens e Desvantagens do Festival . . . . . . . .
4.2 O Framework Festvox e a Produção de Novas Vozes
4.3 Funcionamento do Festival . . . . . . . . . . . . . . .
4.4 Entradas do Léxico . . . . . . . . . . . . . . . . . . .
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4.5
4.6
4.7
4.8
4.9
Definindo Léxicos . . . . . . . . .
Processo de Procura de Palavras
Regras Letra-Som . . . . . . . . .
Construindo Regras Letra-Som .
Requisitos do Léxico . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
32
33
34
36
41
5 Desenvolvimento do Módulo de Voz
5.1 Criação do Léxico . . . . . . . . . . .
5.1.1 Definição dos Fonemas . . . .
5.1.2 Definição dos Allowables . . .
5.1.3 Criação das Regras Letra-som
5.1.4 Definição do Léxico . . . . . .
5.2 Fraseamento . . . . . . . . . . . . . .
5.3 Tokenização . . . . . . . . . . . . . .
5.4 Gerador de Transcrição Fonética . .
5.5 Integração com o MBROLA . . . . .
5.6 Requisitos e Uso do Programa . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
42
42
42
43
44
45
46
46
46
47
47
6 Conclusões e trabalhos futuros
6.1 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
49
49
Referências
50
A Exemplos de Execução
52
B Conteúdo do CD
55
v
.
.
.
.
.
Lista de Figuras
2.1 Máquinas de Wolfgan von Kempelen (Kempelen (1791)) . . . . . . . .
2.2 Máquinas de Wolfgan von Kempelen (Kempelen (1791)) . . . . . . . .
2.3 Foto do VODER (Voice Operating Demonstrator) na World Fair em
Nova York em 1939 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Esquema de funcionamento do VODER . . . . . . . . . . . . . . . . .
2.5 Exemplo de um gráfico senóide . . . . . . . . . . . . . . . . . . . . . .
2.6 Filtro passa-baixas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 Filtro passa-altas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8 Filtro passa-banda . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9 Uso do Filtro Pólos-somente . . . . . . . . . . . . . . . . . . . . . . . .
2.10 Esquema de Síntese de Voz por Computador . . . . . . . . . . . . . .
2.11 Esquema de Síntese de Voz pelo Método LPC . . . . . . . . . . . . . .
7
7
11
12
13
13
16
18
19
3.1 Espectro e forma de onda da pronúncia da palavra defesa . . . . . . .
26
vi
5
6
Capítulo 1
Introdução
1.1
Motivação
O projeto Luz das Letras teve início como uma iniciativa social da COPEL - Companhia Paranense de Energia, visando alfabetizar os moradores das comunidades
ribeirinhas que tinham suas terras desapropriadas para construção de represas.
A companhia utilizava suas máquinas antigas e ociosas para montar laboratórios
para servir a tais comunidades. Com o sucesso do projeto, a COPEL passou a
não levar somente alfabetização para os alunos, mas também algumas noções de
geografia, matemática entre outras. A CEB, Companhia Energética de Brasília,
estabeleceu então um convênio com a COPEL e trouxe a idéia e os programas do
Luz das Letras para o Distrito Federal, com o mesmo intuito, utilizando-o experimentalmente na nossa região.
A CEB estabeleceu parceria com a Casa da União, que é uma organização social
de interesse público, que passou a procurar novos atores que pudessem manter e
desenvolver os programas que foram implantados no Projeto Luz das Letras, uma
vez que mudanças nas novas administrações da COPEL haviam paralisado o desenvolvimento de tal sistema. Dessa forma, o Luz das Letras foi apresentado ao
CEAD/UnB e finalmente ao Projeto Casa Brasil, do Governo Federal, em desenvolvimento no ITI com orientação do Ministério de Ciência e Tecnologia e suporte
operacional do CNPq - Conselho Nacional de Desenvolvimento Científico e Tecnológico. O Casa Brasil propôs uma reformulação em todo o Projeto Luz das Letras, criando então o Projeto Luz do Saber, com profundas mudanças nos aspectos
logísticos, pedagógicos e tecnológicos.
O Casa Brasil patrocinou o desenvolvimento do Luz do Saber até outubro de
2008, em parceria com a Secretaria de Educação do Ceará, que o tem mantido
desde então.
Como um projeto que envolve a utilização de computadores para ensino, o Luz
do Saber sempre utilizou softwares para realizar suas atividades, mas os softwares
utilizados eram rudimentares e exigiam muito esforço por parte do professores
e pedagogos, que eram obrigados a fazer gravação das pronúncias de todas as
palavras que o software necessitava tornando a tarefa de confeccionar novos exercícios trabalhosa e antiprodutiva.
1
Desse modo, de forma a propiciar maiores facilidades de autoria de atividades
no Luz do Saber, é necessário desenvolver-se uma nova ferramenta para o projeto, que venha a eliminar a necessidade de se ir à estúdio todas as vezes que
novas atividades são criadas. Para que seja viável a criação de um novo software
educacional necessita-se de uma ferramenta que possa pronunciar tudo que for
necessário, ou seja, deve existir uma ferramenta que seja capaz de sintetizar a fala
de textos digitados no momento da criação de cada novo exercício, ou produzido automaticamente pelos mesmos, além disso essa fala sintetizada deve ter qualidade
suficiente para suportar o ensino de alfabetização. Para isso, é preciso que o software de sintetização de fala receba o texto digitado pelo professor ou produzido pelo
programa (através de pesquisas em seus bancos de dados), e devolva um arquivo
sonoro contendo as sentenças já em formato audível e de qualidade, propiciando
que a interface do sistema com o usuário o transmita em palavras ao aluno.
Os sistemas texto-fala possuem a característica de serem capazes de pronunciar palavras e textos. O Sistema de Síntese de Fala Festival pode ser agregado
a outras soluções, isto é, é possível usar-se o Festival como um auxiliar para outras aplicações. O presente trabalho visa abrir portas para que as falas produzidas
possam ser sucessivamente aprimoradas até atingirem o nível de clareza requerido
para o uso pretendido.
1.2
Problema
Com o Festival é possível conseguir-se o dinamismo necessário para as aplicações
educacionais do Luz do Saber, mas o Festival está disponível apenas em algumas
línguas estrangeiras atualmente. O Festival é um sistema capaz de receber novos
módulos de voz em qualquer língua. Essa criação de um novo módulo dá-se através
de um framework chamado Festvox. O Festvox, por sua vez, é um conjunto de regras e passos a serem seguidos para essa criação, passos esses que não são triviais
e por vezes não são de fácil entendimento.
O Software de Síntese de Voz Festival atende às necessidades do projeto Luz do
Saber, mas não existe uma voz apropriada em português do Brasil para que seja
feito o seu uso.
1.3
1.3.1
Objetivos
Objetivos Gerais
Implantação de um módulo de voz para o sistema de síntese de voz Festival que
possa ser aprimorado e concepção de documentação adequada para possibilitar seu
uso posterior.
1.3.2
Objetivos Específicos
Os objetivos específicos deste trabalho são, primeiramente, desenvolver um dicionário fonético para o Festival e conceber documentação adequada para poste2
rior uso desse dicionário. Esse desenvolvimento inclui a criação de uma lista de
palavras a partir de textos arbitrários, a geração de uma descrição fonética preliminar das pronúncias das palavras e a correção dessas pronúncias de modo que se
possa tê-las como entrada para os scripts que geram o dicionário.
Tem-se como segundo objetivo específico proceder a integração do Festival com a
voz em português do Brasil do projeto MBROLA através da exportação, a partir do
Festival, de um arquivo com a duração e a potência com que os fonemas devem ser
pronunciados. Assim o módulo de voz pode ter sua produção de fonemas testada
através da pronúncia correta de palavras e frases em português brasileiro.
1.4
Capítulos Seguintes
O capítulo 2 apresenta uma introdução ao sistema do Festival através de um histórico
e da conceituação dos sistemas texto-fala, além de citar alguns exemplos de aplicação desses sistemas. Nesse capítulo são descritos os sistemas texto-fala, alguns
pontos importantes na história dos TTS’s(sigla para sistemas texto-fala em inglês),
algumas aplicações de síntese de fala como os TDD’s, o funcionamento dos sistema
texto-fala de um modo geral, o sistema Festival e o framework Festvox e as vantagens e desvantagens de se usar o Festival como um programa de síntese de fala a
partir de textos.
O capítulo 3 apresenta uma breve análise da fonologia da Língua Portuguesa.
Esse capítulo define o que é fonema, descreve os tipos de fonema (vogais, consoantes e semivogais) e introduz os símbolos usados no trabalho, adaptados dos
símbolos usados pela Associação Fonética Internacional, no Alfabeto Fonético Internacional(AFI).
O capítulo 4 explica o que é o Festival e detalha os passos por ele seguidos da
leitura e interpretação do texto até a pronúncia. Além disso descreve os passos que
devem ser seguidos para obtenção do dicionário fonético que integra o módulo de
voz a ser construído.
O capítulo 5 descreve o processo seguido e as dificuldades encontradas para a
confecção do módulo de voz e sua integração para teste com o software do projeto
MBROLA.
O capítulo 6 apresenta a conclusão do trabalho e sugere alguns trabalhos futuros que podem aperfeiçoar o programa.
3
Capítulo 2
Sistemas Texto-Fala
Este capítulo aborda a questão dos sistemas texto-fala de um modo geral através,
primeiramente, de um histórico e depois através de exemplos e da apresentação do
conceito de sistema texto-fala. Além disso o capítulo apresenta o software utilizado
no trabalho partindo de suas características, vantagens e desvantagens.
A seção “Histórico” apresenta as primeiras tentativas de se reproduzir a voz
humana artificialmente. Em seguida, a seção Aplicações cita algumas soluções
operacionais relevantes que utilizam os sistema texto-fala.
A seção “Como Funciona um Sistema Texto-Fala” explica informalmente como
um sistema de computador converte textos em fala. A seção seguinte faz um apanhado dos sistemas texto-fala existentes hoje e por fim a seção “Vantagens e desvantagens do Festival” enumera as características para a escolha do software.
2.1
Histórico
Quando se fala de síntese de fala hoje logo imagina-se um sistema de síntese de
fala por computador, programa de computador capaz de reproduzir a fala humana
artificialmente segundo ( Dutoit (1997)), mas a vontade de se reproduzir a fala não
começa com a invenção dos computadores.
As primeiras tentativas de reprodução da fala humana datam da primeira metade
do séc.XVIII. Ch. G. Kratzenstein,professor de fisiologia de Copenhaguem, conseguiu reproduzir vogais usando tubos de ressonância em 1773. Ao mesmo tempo
em que Wolfgang von Kempelen, um Húngaro a serviço da imperatriz do Sacro Império Romano, Maria Teresa, começava seus estudos. Von Kempelem publicou seu
livro em 1791 intitulado “Mechanismus der menschlichen Sprache nebst Beschreibung einer sprechenden Maschine”, Mecanismo da Linguagem Humana e Descrição
de uma Máquina de Fala, em tradução livre( Traunmüller (2000)).
As figuras 2.2 e 2.1 mostram desenhos feitos por Kempelen (1791) em seu livro.
Kempelen consegui reproduzir não apenas sons mas também palavras e frases curtas.
No séc.XX, em 1939, Homer Dudley apresentou o VODER (Voice Operating
Demonstrator). A figura 2.3 mostra uma Foto do VODER na World Fair em Nova
York em 1939. O VODER foi inspirado em uma outra máquina conhecida como
VOCODER (Voice Coder), desenvolvido pela Bell Laboratories meados da década
4
Figura 2.1: Máquinas de Wolfgan von Kempelen (Kempelen (1791))
5
Figura 2.2: Máquinas de Wolfgan von Kempelen (Kempelen (1791))
de 1930. O VOCODER original era um dispositivo para analisar a voz em parâmetros acústicos lentamente variáveis que podiam levar o sintetizador a reconstruir a
aproximação do sinal de voz original.
O VODER consistia em barras que eram pressionadas com os pulsos para escolha de uma voz ou fonte de som e um pedal para controlar a frequência fundamental. O sinal fonte era direcionado através de dez filtros de banda cujos níveis
de saída eram controlados com os dedos. Era necessária uma certa habilidade
para fazer o VODER falar. A qualidade e a inteligibilidade da produção de voz do
VODER estavam longe de serem boas, mas o potencial para produção artificial de
voz ficou bem claro(Lemmetty (1999)). A figura 2.4 mostra um esquema de funcionamento do VODER.
A capacidade do VODER de reproduzir a fala humana através de sinais elétricos possibilitou a criação dos modelos baseados nessa abordagem na década de
50 como os modelos OVE e obtentor de parâmetros artificiais. Já na década de
setenta, a síntese de fala tornou-se intimamente ligada ao desenvolvimento dos
computadores e surgiram os sistemas que sintetizam a fala a partir de um texto,
os sintetizadores texto-fala. Um sintetizador texto-fala (Text-To-Speech) é um sistema computadorizado que deve ser capaz de ler qualquer texto escrito na língua
escolhida.
Os sistemas texto-fala podem reconhecer texto diretamente introduzido por um
usuário ou através por um escaner de Reconhecimento ótico de Caracteres (OCR).
Os sistema texto-fala de outros aparelhos de fala, por exemplo leitoras de CDs, por
produzirem automaticamente sentenças novas e não apenas apresentar senteças
previamente gravadas (Pontes (2005)). A natureza top-down desse processo reduz
o esforço computacional necessário ao sistema e permite a produção de frases com
alta qualidade nas pronúncias Young and Fallside (1979).
6
Figura 2.3: Foto do VODER (Voice Operating Demonstrator) na World Fair em Nova
York em 1939
Figura 2.4: Esquema de funcionamento do VODER
7
2.2
Aplicações
Os sistemas de síntese de fala estão presentes em diversas soluções já bastante consolidadas. Entre os sistemas já consolidados têm-se como exemplo os TDD´s(Telecommunication
Device for the Deaf) e os Portais-de-Voz.
O TDD’s tornam os telefones convencionais úteis aos deficientes auditivos através
da troca de sinais elétricos especiais que pode ser efetuada entre dois desses aparelhos ou entre um deles e um atendente da operadora de telefone que repassa a
chamada.
Os portais-de-voz são computadores capazes atender automaticamente a chamadas
para a organização sem que um operador seja necessário e sem que se tenha chamadas
com sinal de ocupado.
2.2.1
TDD
TDD, sigla em inglês para dispositivo de comunicação para surdos, é um aparelho
que permite que deficientes auditivos possam comunicar-se pelo telefone convencional. Em vez da voz o usuário do TDD digita um texto, que é convertido em
sinais que podem reconhecidos por outro aparelho de TDD do outro lado da linha.
Também é possível através do TDD realizar-se comunicação do usuário com um
ouvinte através do serviço de intermediação surdo-ouvinte provido pelas empresas
de telecomunicação.
Para citar um exemplo do uso dos TDD’s, nos Estados Unidos, desde janeiro
de 1992, todos os órgãos públicos foram obrigados pela ADA - American with Disabilities Act (Ação dos Americanos com Deficiências Físicas), a prover acesso das
pessoas com dificuldades extremas de fala ou de audição a serviços de emergência, isto é, acesso direto 911 (telefone de emergência dos Estados Unidos) usando
TDD’s e modems( Brown (2009)). Os funcionários de telecomunicação devem estar
preparados para lidar com chamadas desse tipo. Isso envolve encaminhar essas
chamadas usando o recursos apropriados de modo racional e em tempo hábil.
2.2.2
Portais de Voz
O Portal de Voz é também conhecido como “Plataforma de Multi-atendimento”, ou
simplesmente Plataforma. Um portal de voz é uma combinação de hardware e software, a URA. A URA (unidade de resposta audível) atende diversos telefonemas
sem perdas de chamada e é capaz de realizar atendimentos e enquetes, receber
mensagens dos usuários. O portal de voz é usado, por exemplo, em emissoras de
televisão, emissoras de rádio, jornais, revistas, associações e instituições de ensino(Estúdio (2009)).
Os portais de voz em si não constituem um uso direto dos sistemas texto-fala,
mas sua integração com os TDD’s os faz de grande importância já, por exemplo,
o Banco do Brasil usa essa integração em seu auto-atendimento por telefone para
atender ao público com dificuldades na comunicação falada.
8
2.3
Como Funciona um Sistema de Texto-Fala
Os sistemas de síntese de fala têm aplicações em diversas áreas. Pode-se tomar
como exemplo de sua utilização os sistemas para telecomunicações que fornecem o
acesso a informações de texto por telefone; os sistemas de portais de voz que apresentam entre outros serviços acesso a contas de e-mail, notícias em geral e dicas de
entretenimento através da voz e os sistemas, que aliados aos OCRs (Optical Character Recognition ), auxiliam na utilização de aparelhos eletrônicos por deficientes
visuais( Körting et al. (2005)).
A síntese da fala em um sistema texto-para-fala é dividida em duas etapas
principais. O processador de Linguagem Natural e o processador de sinais digitais(Körting et al. (2005)). No processador de linguagem natural, primeiramente,
o texto é interpretado e tem suas palavras divididas de acordo com sua função sintática e sua classe gramatical, além de passar por um processo de desambiguação,
elimina dúvidas com relação aos homógrafos, para que exista o mínimo de erros
possível. Depois são determinadas as características de pronúncia específicas de
cada palavra e o texto é transcrito para linguagem fonética através de um alfabeto
específico (Pontes (2005)).
O processador de sinais digitas determina, usando a transcrição fonética do
texto gerada no processador de linguagem natural, as características das palavras
a serem pronunciadas. As características determinadas para cada palavra a ser
pronunciada são a duração e a entonação de cada parte da palavra.
O processador de sinais digitais não é único para todos os sistemas texto-parafala, isto é, os sistemas de síntese de fala não seguem uma única abordagem. As
duas principais abordagens, ou tecnologias, usadas nos sistemas de síntese para
fala são a síntese por concatenação e a síntese por formantes. Existem ainda outros
tecnologias de síntese de fala como as baseadas em HMMs (hidden Markov models)
e a síntese por sinewave, que substitui os formantes por tons puros.
Um formante são picos de intensidade em uma certa forma de onda. É possível
utilizar esse picos para distinguir entre ondas sonoras de fala e outras ondas e
distinguir as ondas de fala entre elas. A síntese por formantes se utiliza dessa
característica das ondas para obter formas sintéticas aplicando a elas certas regras
de produção.
A síntese por concatenação, como o próprio nome sugere, é feita por concatenação de fonemas de vozes humanas gravadas. Existem três tipos de síntese por
concatenação: por domínios específicos, por seleção de unidade e por difones. A
síntese por domínios específicos consiste em um pequeno conjunto de palavras de
um tema específico que são concatenadas para formar a sequência desejada como
num relógio digital, por exemplo. A síntese por seleção de unidades utiliza-se de
um vasto banco de dados de fonemas individuais, difones, meios-fonemas, sílabas,
morfemas, palavras, frases e sentenças que são indexadas por frequência fundamental duração, posição silábica e fonemas vizinhos para determinar qual é o melhor ajuste para a frase a ser sintetizada. A síntese por difones possui um banco de
dados com todos os possíveis difones do idioma em questão. Difones são formados
pela interação entre dois fonemas de uma palavra, um exemplo de difone pode ser
a interação entre os fonemas p e a na palavra papel, como definido na seção 3.3.
9
Quando a frase precisa ser construída a entonação e a duração correta dos difones
é aplicada e eles concatenados para formar as palavras necessárias.
2.4
Sistemas Texto-Fala Existentes
Atualmente existem diversos sistemas de síntese de fala através de texto. Muitos
desses sistemas tem operação apenas em língua inglesa como o KTTS do KDE,
o Epos, para citar alguns exemplos. Para citar alguns exemplos de sistemas em
outras línguas temos o MARY, para o alemão, NexTens, para o holandês, além
de projetos em desenvolvimento para Hindi, Grego e Latim pela Bliss Intelligent
Technologies, empresa indiana de tecnologia. Existem ainda projetos que procuram
englobar várias línguas como é o caso do festival, desenvolvido na Universidade de
Edinburg, na Inglaterra e o MBROLA desenvolvido na Faculdade Politécnica de
Mons, na Bélgica.
Já existem sistemas texto-fala que sintetizam o português. Para citar exemplos
têm-se o sistema ORADOR e o sistema Multivox. O sistema ORADOR foi desenvolvido para o português do Brasil no Laboratório de Circuitos e Processamento
de Sinais da Universidade Federal de Santa Catarina é baseado em unidades de
tamanhos variáveis para a síntese da fala (Linse (2007)).
O sistema Multivox tem uma versão para o português europeu produzida na
FEUP ( Faculdade de Engenharia da Universidade do Porto) em Portugal e é baseado
em conversão das frases escritas para frases com símbolos fonéticos substituindo
os símbolos da escrita para posterior sintetização da voz(Teixeira et al. (1996)).
Dentre todos esses sistemas o Festival se destaca por algumas características e
facilidades: o Festival é de uso simples; pode ser usado como servidor de voz, isto
é, se um texto qualquer em uma língua que Festival conhece for passado a ele é
retornado um arquivo de audio para uso à escolha do usuário e possui facilidade de
introdução e desenvolvimento de novas línguas.
2.5
Análise e síntese de voz
Este capítulo explicita os modos de análise e síntese de voz envolvidas no processo
da síntese de voz feita pelo Festival.
Primeiramente é exposto o conceito de fontes sonoras e são citados os parâmetros nos quais a análise da voz opera. Em seguida, são explicitados os modos de
análise da voz e é introduzido o método que o Festival utiliza para análise da voz,
síntese de voz por análise de voz usando o método de predição linear.
2.5.1
Fontes sonoras
Antes de se compreender o que são os filtros e seu funcionamento se faz necessária
uma explicação sobre fontes sonoras. Fontes sonoras são dispositivos ou aparelhos
capazes de produzir perturbações no ar, gerando ruídos, notas musicais ou, no caso
da fala, fonemas. Fontes sonoras podem ser geradoras de sinais, de ruídos, ou de
ambos.
10
Um ruído é constituído de certa quantidade de oscilações irregulares, sem harmonia. Ao contrário das fontes que geram ruídos as fontes que geram sinais emitem
oscilações em uma frequência determinada e com grande quantidade de energia.
A oscilação harmônica de um sinal pode ser representada por um gráfico senóide
como o da figura 2.5(Halliday et al. (2003)).
Figura 2.5: Exemplo de um gráfico senóide
Senóides são gráficos caracterizados pelos seguintes elementos: período, amplitude e fase. Na figura 2.5 "T", chamado de período da senóide, descreve quanto
tempo leva um ciclo completo da onda, ou seja, a distância no eixo x entre os picos
do gráfico; "A"indica a amplitude de onda, a distância entre a parte mais alta da
onda (topo) e a parte mais baixa dela (vale), chamada também de altura da onda
ou crista; ”φ” indica o quanto a onda está deslocada em relação a origem (fase),
as senóides não deslocadas iniciam-se no eixo x. A partir desse gráfico é possível
obter-se a frequência do sinal através de sua relação com o período, a saber, T=1/f.
Enquanto um sinal pode ser descrito por um desses gráficos um ruído é formado
por vários pulsos sobrepostos de forma irregular e não só de senóides, mas por
uma soma de senóides e cossenóides. Uma cossenóide é um gráfico semelhante à
senóide, mas ele se inicia normalmente no eixo y em vez de no eixo x.
Um conjunto de oscilações regulares é chamado de sinal e um conjunto de oscilações irregulares é chamado ruído, mas independentemente de ser regular ou
não um conjunto de oscilações é conhecido como espectro e indica como as oscilações
variam conforme a passagem do tempo.
Um filtro modifica as características de fase e amplitude de cada componente
do espectro que passa por ele, mas um filtro jamais altera a frequência de qualquer
sinal ou componente do espectro.
11
Quando deseja-se extrair um sinal de uma fonte que gera não só o sinal desejado, mas também ruído usam-se filtros.
2.5.2
Filtros
Filtros elétricos são circuitos usados em processamento de sinais que permitem ao
projetista de um circuito determinar quais frequências de um sinal recebido podem
atingir o restante do circuito, isto é,um filtro recebe um certo sinal e permite que o
atravessem apenas frequências pré-determinadas.
Existem diversos tipos de filtros elétricos. Dentre esses tipos de filtros elétricos
destacam-se três principais, classificados de acordo com as faixas de frequência que
os atravessam e do quanto são atenuados os sinais além ou aquém das frequências
determinadas. De acordo com a frequências que os atravessam são esses filtros:
os filtros passa-baixa, os filtros passa-alta e os filtros passa-banda. De acordo com
o quanto os sinas são atenuados os filtros podem ser de: 1a ordem, 2a ordem, 3a
ordem e assim sucessivamente.
Filtros digitais são algoritmos que possuem uma sequência de números em sua
entrada e uma sequência de numerosos como saída. A seção 2.5.2 descreve os filtros
digitais, filtros implementados por software; sua classificação e seu funcionamento.
Filtros Elétricos
Filtros passa-baixas:
Os filtros passa-baixas permitem apenas que baixas frequências os atravessem.
Assim, os sinais que possuem frequências mais altas tem suas amplitudes reduzidas. O limite de frequência que divide as frequências altas e as frequências mais
baixas em dois grupos é dado pela frequência de corte(fc) 2.6.
Figura 2.6: Filtro passa-baixas
Filtros passa-altas:
12
Os filtros passa-altas permitem apenas que altas frequências os atravessem. Apenas os sinais de frequências mais elevadas passam inalterados por esse tipo de
filtro e as amplitudes dos sinais de frequências mais baixas são reduzidas.A frequência de corte (fc) na figura 2.7 mostra a frequência em que as amplitudes de
frequências mais baixas são atenuadas.
Figura 2.7: Filtro passa-altas
Filtros passa-banda:
Os filtros passa-banda permitem apenas que uma certa faixa de frequência os
atravessem, isto é, os sinais que possuem frequências abaixo ou acima do valores
de frequência determinados pelo filtro têm suas amplitudes reduzidas. A figura 2.8
ilustra o gráfico de um filtro passa-banda mostrando o intervalo de frequência que
ele deixa passa e as amplitudes atenuadas dos sinais de frequências fora da faixa
de frequência determinada.
Figura 2.8: Filtro passa-banda
Ordem dos Filtros Elétricos:
13
Os filtros de sinal possuem diferentes níveis de permissão e atenuação de sinais.
Esses níveis de diferentes atenuações dos filtros elétricos chamam-se ordens.
• Primeira Ordem
Filtros passa-baixas de primeira ordem são aqueles em que, a cada vez que
a frequência chega ao dobro, depois de atingida a frequência de corte, a sua
amplitude cai pela metade.
Em filtros passa-altas de primeira ordem a cada vez que a frequência de um
certo sinal cai pela metade a partir da frequência de corte a sua amplitude cai
pela metade.
Filtros passa-banda de primeira ordem diminuem pela metade a amplitude
do sinal a cada vez que o sinal dobrar sua frequência acima da frequência do
limite superior da intervalo determinado pelo filtro ou a cada vez que sinal
cai pela metade a partir do limite inferior definido no filtro.
• Segunda Ordem
Filtros passa-baixas de segunda ordem são aqueles em que, a cada vez que
a frequência chega ao dobro, depois de atingida a frequência de corte, a sua
amplitude cai a um quarto de seu valor.
Em filtros passa-altas de segunda ordem a cada vez que a frequência de um
certo sinal cai pela metade a partir da frequência de corte a sua amplitude cai
a um quarto de seu valor.
Filtros passa-banda de segunda ordem fazem diminuir a amplitude do sinal
cair a um quarto de seu valor a cada vez que o sinal dobrar sua frequência
acima da frequência do limite superior da intervalo determinado pelo filtro
ou a cada vez que sinal cai pela metade a partir do limite inferior definido no
filtro.
Filtros Digitais
Filtros digitais são algoritmos que convertem uma sequência de números que recebem como entrada em outra sequência de números que emitem em sua saída.
Essa conversão se dá através da multiplicação dos sinais de entrada por coeficientes que determinam de forma única as características de um sinal digital.
O número de amostras necessárias para que filtro seja capaz de emitir uma
saída chama-se ordem do filtro. Um filtro digital é tão mais complexo quanto mais
forem necessárias entradas para se produzir a saída desse filtro.
Os dois principais tipos de filtros digitais são os filtros recursivos e os filtros não
recursivos.
• Filtros recursivos:
Filtros recursivos são filtros digitais que geram sua saída a partir da entrada
atual e de saídas antigas ou a partir de entradas e saídas antigas. Esse
método é usado para obter os pólos dos filtros digitais.
14
• Filtros não recursivos:
Filtros não recursivos são filtros digitais que calculam sua saída a partir da
entrada atual e das entradas anteriores. Esse método é usado para obter os
zeros dos filtros digitais.
Assim, os filtros recursivos podem gerar somente pólos e os filtros não recursivos
podem gerar somente zeros. Por essas razões os filtros recursivos são ditos filtros
de pólos-somente e os filtros não recursivos são filtros zeros-somente.
Segundo as convenções brasileiras para descrever filtros digitais matematicamente, a entrada atual do filtro é designada como x(n) e a saída atual é denotada
por y(n). Entradas anteriores são descritas como x(n-m) e saídas anteriores como
y(n-m),onde m é o número de amostras anteriores à corrente (ordem do filtro). Os
filtros não-recursivos tem como fórmula geral:
y(n) = a0 x(n) + a1 x(n) + a2 x(n) + ... + aN x(n − N )
Os valores dos coeficientes ak controlam a resposta de frequência do filtro. Para
se obter uma determinada resposta de frequência, é necessário calcular-se os valores desses coeficientes, baseando-se no uso de uma transformada inversa de fourier,
que muda a resposta de frequência desejada para uma resposta de impulso, da
forma a0 ,a1 ,...,aN ,0,0,...,, por meio da qual se obtém os valores dos coeficientes do
filtro (a0 , ..., aN )
Por exemplo, um filtro zeros-somente de segunda ordem possui como equação
geral a seguinte fórmula:
y(n) = a0 x(n) + a1 x(n − 1) + a2 x(n − 2)
(2.1)
Para se obter uma frequência central f0 com largura de banda LB, são calculados coeficientes intermediários c1 e c2 usando-se as seguintes equações:
c2 = exp(−2π
c1 =
LB
)
fa
−4c2
f0
cos(2π )
1 + c2
fa
(2.2)
(2.3)
onde fa é a taxa de amostragem do sinal. O passo seguinte é calcular a constante
de escala D, que determina a resposta de amplitude em regiões de frequência removidas pelo zero. A constante é calculada de modo que a resposta de amplitude
seja 1 ou 0 e que sinais de baixa frequências passem por ligeira mudança. Neste
caso, D vale: D = 1 + c1 + c2 . A seguir, calculam-se os coeficientes do filtro com base
nos coeficientes intermediários definidos nas equações 2.2 e 2.3:
a0 =
1
D
(2.4)
a1 =
c1
D
(2.5)
a2 =
c2
D
(2.6)
15
2.5.3
Predição Linear
É possível prever-se o valor de qualquer amostra de um sistema digital a partir de
uma combinação linear de amostras anteriores?
Uma combinação linear é um somatório de produtórios na forma:
N
X
bi y(n − i)
(2.7)
i=1
Isto é:
y(n) = b1y(n − 1) + b2y(n − 2) + ... + bN y(n − N )
(2.8)
Assim, se a resposta a pergunta for positiva então os coeficientes e as N primeiras
amostras do sinal podem determinar completamente o resto do sinal, pois o resto da
amostra pode ser calculada através da combinação linear das amostras anteriores.
Porém, com um N finito não é possível os coeficientes não podem ser precisamente determinados. Por isso são tomadas várias amostras, compondo um grupo
de amostras conhecido como quadro, para determinar os coeficientes da melhor
maneira possível. Para se decidir se um quadro é suficientemente bom toma-se a
diferença entre a forma de onda real da entrada atual e a forma de onda recriada.
Portanto, a diferença entre o valor da previsão î(n) e valor real da entrada y(n)
fornece o erro de precisão da previsão:
e(n) = î(n) - y(n)
Cada coeficiente da previsão possui um erro associado a ele e o sinal e(n) que
representa esses erros é chamado de resíduo. Quanto menor for valor médio do
resíduo melhor a será a escolha dos coeficientes da previsão.
Associando-se a equação obtida para o erro à equação de combinação linear que
descreve a onda para a previsão do comportamento do resto da onda tem-se:
y(n)= a0e(n) + b1y(n-1) + b2y(n-2) + ... + bNy(n-N)
Onde a0 é um fator de escala que fornece uma aproximação à amplitude correta.
A figura USO DO FILTRO POLO SOMENTE mostra como esse esquema funciona
com sinal e(n) sendo introduzido no filtro pólos-somente e em que o conjunto de
coeficientes previsores interage com o filtro para se obter um sinal o mais similar
possível ao sinal original.
Figura 2.9: Uso do Filtro Pólos-somente
16
Quando existe vocalização o resíduo é um pulso periódico com uma forma de
onda com a mesma frequência do discurso. Quando existe vocalização o resíduo
torna-se um ruído branco, pulso emitido com todas as frequências sonoras, e sua
intensidade é a mesma para uma certa faixa de frequência.
A ordem de N indica a precisão dos coeficientes usados para representar o sinal
em y(n), isto é, quanto maior for a ordem de N maior será a precisão do método, mas
isso acarreta em um aumento exponencial do esforço computacional necessário.
Estimasse que o valor ótimo de N para se ter qualidade suficiente na síntese da
fala tem relação com maiores frequências e taxas de amostragem. Segundo Jr. and
Hansen (1993) usa-se a seguinte conjectura:
(
N=
fa + (4 ou 5), sonora
fa ,
surda
(2.9)
Onde fa é a taxa de amostragem em KHz.
2.5.4
Análise da fala pelo método LPC
Para que possa se gerar uma voz sintética através do computador é necessário
que ela passe por análise prévia detalha para se determinar características importantes da forma de onda digitalizada. No processo de análise uma forma de onda
é divida em vários pedaços, chamados de frames, janelas ou quadros. Em vez de
o algoritmo determinar as características necessárias a síntese para toda a onda
ele determina essas características para cada um quadros obtidos da divisão da
onda. As características obtidas para cada frame são posteriormente usadas para
recriação da onda no processo de síntese da fala.
Uma das primeiras funções da análise da fala é determinar características
ressonantes do trato vocal em cada quadro. Existem vários métodos que são capazes de determinar essas características. Um dos métodos capazes de fazê-lo é
o método de Codificação por Predição Linear (LPC). O LPC é um método estatístico que envolve diretamente transformações do domínio de tempo para o domínio
da frequência sendo capaz de mudar de resposta a cada seguimento seguindo as
mudanças de estado do trato vocal durante o discurso.
A análise da fala também possui por função determinar a frequência fundamental dos seguimentos vocalizados e ser capaz de não somente examinar a forma de
onda digitalizada mas também transformá-la no domínio da frequência através da
análise do espectro. Para tanto o algoritmo utiliza-se de Transformadas de Fourier
e gerando enorme quantidade de cálculos e tornando o modelo matemático para
tal bastante complexo (Halliday et al. (2003)). Por isso criar um algoritmo que detecte o tom exato de todos os interlocutores é extremamente complicado e, embora
muitos modos tenham sido desenvolvidos com esse fim, todos tem suas limitações
promovendo melhora de desempenho para tipos específicos de interlocutores.
A análise envolve ainda cálculo de amplitude de onda. Esse cálculo pode ser
feito através da obtenção da potência média quadrática das amostras do quadro.
17
2.5.5
Síntese de Fala por Computador
Utilizando o método de predição linear descrito anteriormente a síntese de voz por
computador a síntese pode ser descrita pelo esquema da figura 2.10. Os esquema
possui um gerador de pulso, um gerador de ruídos, um seletor, um amplificador e
um sistema de ressonância.
O gerador de pulsos é usado quando a fala precisa ser vocalizada e o gerador
de ruídos é usado quando não há vocalização a ser produzida. O gerador de pulsos
possui uma frequência fundamental f0 e de frequência variável e o gerador de ruídos gera um ruído branco. Após selecionada a fonte geradora o sinal é amplificado
e depois introduzido no sistema de ressonância (filtro) que simulará a resposta de
voz. Com esse sistema é possível se produzir a combinação de dois aspectos diferentes da ressonância na fala : os pólos e os zeros. Embora nem todos os sistemas
de síntese se utilizem de zeros ele são necessários para se sintetizar sons nasais e
fricativas surdas de modo mais realístico.
A síntese de fala por computador pode ser feita através de dois principais métodos: a Síntese de Voz por Regras e a Síntese de Voz por Análise da Fala. Os dois
métodos necessitam de análise prévia da fala e diferenciam-se apenas pelo modo
como os dados são fornecidos ao sintetizador. O modelo adotado pelo Festival e que
será abordado no presente trabalho é o modelo de Síntese de Voz por Análise da
Fala.
Figura 2.10: Esquema de Síntese de Voz por Computador
2.5.6
Síntese de Voz por Análise da Fala
Nos sistemas que usam a Síntese de Voz por Análise da Fala a voz é digitalizada a
partir de processo de Predição Linear (LPC), descrito na seção 2.5.4. O processo de
Predição Linear produz blocos de dados, quadros, que possuem características que
importam à Síntese de Voz por Análise da Fala.
Os quadros advindos do LPC são classificados por suas amplitude, duração e
ausência ou presença de vocalização. Quadros vocalizados trazem também informação a respeito da frequência fundamental da fonte, senão, ainda assim, trazem
informação sobre as ressonâncias do trato vocal. A classificação e utilização da
informação de ressonância dos quadros vocalizados e não vocalizados depende do
método de sintetização adotado, os métodos de síntese fala foram descritos na seção
2.3. Se for adotado o método de síntese por formantes, por exemplo, as características das ressonâncias das pronúncias são descritas através de características dos
filtros passa-banda, já o método LPC constrói a descrição da ressonância a partir
dos coeficientes de um filtro pólos-somente(Dodge and Thomas (1997)).
18
Em uma codificação LPC o discurso é analisado para se obter os coeficientes
necessários a descrição da ressonância da voz. Essa análise é feita de modo a se
encontrar os coeficientes de um filtro pólos-somente. Existem dois modos principais
para se encontrar os coeficientes de um filtro pólos-somente: por covariância e por
lattice.
Covariância é um conceito em matemática que descreve a relação entre a variação de duas variáveis, isto é, o modo como elas variam juntamente. Lattice é
um método empregado através de regras que descrevem árvore com o conjunto de
quadros obtidos da fala. A covariância pode ser descrita pela fórmula:
µ=
1 X
i = 1N xi
N
(2.10)
1 X
i = 1N (xi − µ)(xi − µ)T
(2.11)
N −1
A figura 2.11 mostra o processo de síntese de voz pelo método LPC. Na de ressíntese de voz , a fonte geradora, de pulsos ou de ruídos, recebe do filtro de pólossomente e reconstrói a forma de onda do discurso original.
C=
Figura 2.11: Esquema de Síntese de Voz pelo Método LPC
O método de análise por covariância é capaz de preservar muitos aspectos de entonação e sotaque, mas as ressonâncias vocais da LPC não são facilmente alteradas
como pretende esse método, pois os coeficientes do espectro da fala não são triviais em relação ao filtro pólos-somente. Assim se torna onerosa a tarefa de tentar
reconhecer quais coeficientes devem ser alterados a fim mudar as características
desejadas da ressonância da fala. Por isso, o que se tem feito é alterar todos os
coeficientes de covariância em vez de apenas alguns quando se deseja alterar as
características da ressonância.
O método Lattice produz fala de pior qualidade que por covariância. Os coeficientes Lattice descrevem o estado do trato vocal em dado momento indicando
o estado de cada componente deste em corte transversal do trato vocal. Alterar
esses coeficientes pode causar alterações na fala sintetizada do mesmo modo como
os lábios alteram a fala.
19
Capítulo 3
Considerações Fonéticas do
Português
A língua é parte essencial na comunicação do ser humano onde quer que ele viva.
Primeiramente usada apenas de forma oral a língua necessitou de uma representação escrita a partir do momento que as informações precisaram ser transmitidas
sem a presença do indivíduo que desejava se comunicar. As formas da língua falada, os fonemas, foram primeiro representados por figuras concretas e depois passaram a tomar formas abstratas até adquirirem formas próprias de representação
que, em cada nação ou grupos de nações representavam de forma diferente a língua
falada.
Em linguística, um fonema é a menor unidade sonora (fonética) de uma língua
que estabelece contraste de significado para diferenciar palavras (Neto and Infante
(2004)). Por exemplo, a diferença entre as palavras prato e trato, quando faladas,
está apenas no primeiro fonema: /p/ na primeira e /t/ na segunda.
Nas línguas ocidentais os fonemas são representados por letras(Neto and Infante (2004)). Cada letra corresponde a um som isolado da língua fala e a combinação delas produz palavras. Especificamente na Europa ocidental o alfabeto
que se popularizou e concretizou foi o alfabeto latino, com 26 letras reconhecidas
em toda a europa ocidental. Cada língua tem suas peculiaridades e sons que não
podem ser reproduzidos em outras línguas com facilidade, o que faz surgir novas
letras, ou novas combinações de letras, para representar novos sons que não podem
ser representados com as letras do alfabeto latino isoladas.
Assim, antes de poder-se ter início qualquer processo de síntese de fala para a
língua portuguesa falada no Brasil se faz necessário o devido estudo da fonética
da língua, isto é, produzir ou sintetizar fala requer o entendimento de como os
caracteres de um texto são interpretados e reproduzidos por um falante da língua.
Será adotado aqui um padrão arbitrário de equivalências dos caracteres escritos
com os fonemas que não necessariamente corresponde ao modo como é falado o
português em uma ou outra região do Brasil.
A seção Representação do Português usando o AFI apresenta uma tabela dos
símbolos usados no alfabético fonético internacional que correspondem aos sons
utilizados em língua portuguesa no Brasil.
20
3.1
Classes de Fonemas
Para que a fala seja produzida a espécie humana utiliza diversos órgãos em conjunto de modo a produzir som inteligível aos outros falantes do mesmo idioma.
Pontes (2005) Os principais tipos de fonemas são as vogais e as consoantes e, em
português, as semivogais.
Vogal é o fonema produzido pelo ar que passa pelas cordas vocais quando ele
não encontra qualquer obstáculo enquanto consoante é o fonema produzido pela
fala humana quando o ar encontra algum obstáculo antes deixar o aparelho de
produção da fala.
Em português não ocorrem duas vogais em uma mesma sílaba, isto é, se uma
sílaba possui duas vogais grafadas então uma delas é uma semivogal e se uma
sílaba possui três vogais grafadas duas delas são semivogais e a vogal fica sempre
entre as duas semivogais. Assim, semivogais, em português, são aquelas vogais
que ocupam a mesma sílaba que uma outra vogal, mas não ocupam a posição de
núcleo da sílaba, ou seja, sua pronúncia é menos acentuada.
3.1.1
Classificação das Vogais
As vogais, por não serem formadas com obstáculos, diferenciam-se apenas pelos
modos diferentes de imposição da língua na saída do ar. As vogais podem ser classificadas quanto ao timbre, ao modo de articulação e ao ponto de articulação.
Quanto ao timbre
• Vogais abertas: são aquelas pronunciadas com a abertura máxima da boca
como "a"em ártico ou "e"em época.
• Vogais fechadas: são aquelas pronunciadas com dando-se passagem mínima
abrindo o mínimo possível a boca como o primeiro "o"em fogo ou "e"em leito.
• Vogais Reduzidas: "e"e "o"são por vezes classificadas como vogais reduzidas
quando se encontram no fim de palavras por representarem os fonemas de
"i"e "u"como em corre e gato.
Quanto ao modo de articulação
• As vogais orais: são aquelas cuja pronúncia é feita completamente através da
cavidade bucal como "i"em vi ou "a"em pá.
• As vogais nasais: são aquelas cujo som é emitido parcialmente pela cavidade
nasal como "o"em som ou "a"em mãe.
Quanto ao ponto de articulação
• Vogais anteriores: são aquelas pronunciadas com a parte de baixo da língua
curvada. São vogais anteriores em português "a", "â", "o", "ó"e "u".
21
• Vogais posteriores: são aquelas pronunciadas com a parte de baixo da língua
curvada para cima como é o caso de "e", "é"e "i"no português.
3.1.2
Classificação das consoantes
Os obstáculos impostos a saída do geram diferentes tipo de consoantes. Os obstáculos impostos a saída do ar são as cordas vocais, a língua, os dentes ou os lábios.
Diferentes consoantes podem ser produzidas combinando-se as ações de mais de
um desse obstáculos. As consoantes são classificadas de acordo com o uso desses
quatro componentes do sistema de fala do corpo humano.
Quanto ao papel das cordas vocais
Muitas consoantes compartilham a mesma classificação, mas diferem apenas quanto
a sonoridade das cordas vocais. Um bom exemplo disso é diferença em o "f"e o "v".
Em que a diferença existe apenas porque no "f"as cordas vocais não vibram e no
"v"as cordas vocais vibram.
• Consoantes Surdas: são aquelas pronunciadas sem vibração das cordas vocais.
• Consoantes Sonoras: são aquelas em que as cordas vocais são postas em vibração.
Quanto ao modo de articulação
• Consoantes Oclusivas: são consoantes pronunciadas através da obstrução total da passagem do ar por um instante. Tais como "p"e o "b"em português.
• Consoantes Fricativas: são consoantes que friccionam, sofrem atrito, com algum obstáculo quando da saída do ar dos pulmões. Como a consoante "z"na
palavra "zebra".
• Consoantes Laterais: são consoantes formadas pela passagem do ar pelas
laterais da língua.
• Consoantes Vibrantes são aquelas consoantes formadas por vibração de algum órgão do aparelho fonador. Um exemplo de consoante vibrante em português é a consoante "r"em "mastro".
• Consoantes Nasais: são aquelas pronunciadas com o auxílio da cavidade nasal.
Um exemplo típicos de consoante nasal em português é o "nh";
Quanto ao ponto de articulação
• Consoantes Bilabiais: são aquelas pronunciados usando-se os dois lábios como
obstáculo, caso do "p"e do "b"em português.
• Consoantes Dentais: são aquelas consoantes ditas com a língua entre os
dentes, não existem consoantes dentais em português. Um exemplo de consoante dental é "th"do inglês.
22
• Consoantes Labiodentals: consoantes pronunciadas usando-se os lábios e os
dentes são chamadas de labiodentals. "f"e "v"são consoantes lábio dentais em
língua portuguesa.
• Consoantes Palatais: São consoantes que precisam ser pronunciadas usandose a língua e o palato. Em português, "j","ch", "lh"e "nh"são palatais.
• Consoantes Retroflexivas: São consoantes ditas com a língua curvada. É o
caso do "r"em inglês. Em algumas localidades do interior do Brasil essa pronuncia da consoante "r"também é encontrada.
• Consoantes Velares: Pronunciadas com a parte de cima da língua no palato.
"k","g"e "rr"são geralmente velares em português.
• Consoantes Uvulares: São aquelas consoantes pronunciadas com a da vibração da úvula. Um exemplo de consoante aspirada é o "h"do inglês.
• Consoantes Glotais: Pronunciadas através da vibração da glote, as consoantes
glotais não possuem muitas ocorrências nas línguas ocidentais aparecendo em
línguas como o árabe e o hebraico.
3.1.3
Semivogais
Quando uma sílaba possui duas vogais ela é classificada como sendo um ditongo e
quando ela possui três vogais é classificada como tritongo. Existem dois grupos de
ditongos distintos. Se a sílaba é formada por uma vogal seguida de uma semivogal o ditongo chama-se ditongo crescente. Do contrário o ditongo é dito ditongo
decrescente.
3.2
Representação do Português usando o AFI
O AFI, em português, Alfabeto Fonético Internacional, ou, em Inglês, IPA International Phonetic Alphabet, foi desenvolvido pela Associação Fonética Internacional
de modo que cada som seja representado por apenas um símbolo, isto é, não existem dígrafos como "lh"ou "nh"para representar os sons. Desse modo o API facilita
aos falantes entender os fonemas de outras línguas que não as suas línguas nativas porque representa os fonemas produzidos pelos seres humanos falantes das
mais diversas línguas sem a dependência de se conhecer qual fonema os caracteres
representam em uma língua específica.
Para uma compreensão mais direta do trabalho será adotada uma tabela que
representa os fonemas descritos pelo AFI através de letras do alfabeto latino e
assentos gráficos. A convenção de assentos gráficos adotada é convenção de acentos
gráficos do português do Brasil.A tabela 3.1 indica a representação de cada fonema
do português na AFI e a representação utilizada no trabalho (Chbane (1994)).
23
Tabela 3.1: Representação dos Fonemas
Símbolos AFI Fonemas com uma Letra
Exemplos
a
A
pá, gato
ã
B
lã, cama
e
e
vê, medo
ε
E
pé, ferro
i
I
vir, bico
o
o
avô, morro
O
O
avó, cola
u
U
tu, bambu
m
m
mar, amigo
n
n
nada, cano
η
H
vinha, caminho
b
b
bravo, ambos
p
p
pai, caprino
d
d
dar, andar
t
t
tu, canto
g
g
frango, agrado
k
k
casa, que
f
f
filho, afiar
v
v
vinho, uva
s
s
saber, posso
z
z
bazar, casa
S
x
chover, xarope
Z
j
já, jarra
l
l
lado, veludo
l
w
alto, fuzil
λ
K
filho, pilha
r
r
caro, cores
r
L
mar, carta
R
R
carro, roda
3.3
Difones
A simples concatenação de fonemas não produz discursos reconhecível. Por esse
motivo foi buscou-se métodos alternativos para se formar falas compreensíveis e
tem-se usado desde muito tempo a concatenação de palavras, mas, para que o vocabulário de um banco de palavras seja suficientemente grande o banco de dados
tem de crescer demasiadamente tornando inviável a aplicação desse método para
reproduzir falas de contextos geral.
Como dito na seção 2.1, histórico dos sistemas de síntese de fala, teve início o
uso dos computadores na síntese de voz juntamente com a introdução dos sistemas
texto-fala, isso possibilitou a utilização do poder processamento dos computadores
e a divisão dos discursos. As principais técnicas empregadas para a síntese de voz
24
hoje, descritas na seção 2.3, empregam técnicas de que dividem a fala.
Essa divisão é feita diversas vezes por blocos de fala. Os blocos de são partes com
certas características úteis para a análise do discurso que possibilitam a posterior
síntese por computador.
Além da divisão inicial da fala em blocos o Festival usa uma técnica de síntese
de voz que faz uma nova divisão desses blocos em partes menores, conhecidas por
difones.
Um difone é a interação entre os fonemas de um par de fonemas adjacente. Essa
interação é percebida porque os difones não são extraídos iniciando-se no inicio o
primeiro fonema e terminando ao fim do segundo fonema, como é mais intuitivo.
A extração dos difones se inicia no meio do primeiro fonema e termina no meio do
segundo fonema. Essa abordagem confere ênfase à interação entre os fonemas e
em detrimento aos fonemas isolados (Black and Lenzo (2000)).
Tome-se como exemplo a palavra "defesa":
1. silêncio-d
2. d-ê
3. ê-f
4. f-ê
5. ê-z
6. z-á
7. á-silêncio
Há dois motivos principais para usar os difones na síntese de voz: o primeiro diz
respeito às partes da fala e segundo a dificuldade de modelagem. O primeiro motivo
para se usar os difones é que a principal parte da pronúncia, a parte pronunciada
com mais intensidade, é o centro da pronúncia. O meio da pronúncia de um fonema
é sempre mais intenso e mais estável acusticamente (Black and Lenzo (2000)).
O segundo motivo para se usar os difones na síntese de voz é que a área da
pronúncia compreendida entre a pronúncia de um fonema e a pronúncia de outro
fonema é um fenômeno complexo e difícil modelagem. A figura 3.1 mostra como exemplo a pronúncia da palavra defesa. Na parte de cima da figura têm-se o espectro
da pronúncia da palavra e na parte de baixo têm-se a forma de onda gerada.
Desse modo os difones aproveitam as áreas mais importantes da pronúncia dos
fonemas e ainda evitam uma área da pronúncia de difícil modelagem, a área de
passagem entre a pronúncia de dois fonemas. Tornando os difones peças importantes na composição das vozes sintéticas.
Basicamente, as técnicas que usam os difones procuram abranger todas as possíveis transições entre fonemas da língua que se pretende sintetizar. Por padrão o
número de difones de uma língua é o quadrado do número de fonemas existentes,
mas existem restrições fonéticas que impedem o aparecimento dessa quantidade
de fonemas, isto é, esse número varia de acordo com as regras de pronúncia e de
acordo com as palavras que realmente existem em determinada língua. Como exemplo dessa restrição considere uma combinação do fonema z com o fonema l. Essa
combinação não existe em língua portuguesa.
25
Figura 3.1: Espectro e forma de onda da pronúncia da palavra defesa
26
Na síntese por difones trabalha-se escolhas pré-determinadas a respeito de
quais difones estão presentes em certa língua, mas existem certas circunstâncias
em que se faz necessário o mapeamento entre unidades que se considerava não
existirem.
Além do fonemas padrão os alofones também podem ser usados para a construção dos difones. Alofones são variações do mesmo fonema. Os alofones podem
ocorrem por causa da mudança de língua, de uma variação de região geográfica em
um país, ou mesmo dentro da fala de uma mesma pessoa onde palavras diferentes
que tem o mesmo fonema mas eles são pronunciados de modos diferentes. Um exemplo interessante é o das palavras com o fonema t. O fonema t nas regiões do
centro-sul do Brasil possui variações quando em palavras diferentes e até mesmo
dentro de uma mesma palavra. Considere-se como exemplo as palavra tinta. Essa
palavra possui dois alofones do fonema t. A pronúncia do fonema t quando junto
da vogal i torna-se um pouco misturada ao som do fonema x, enquanto que quando
junto da vogal a essa mudança não ocorre. Assim, a pronúncia da palavra tinta
torna-se algo entorno de t-x-i-n-t-a.
Essencialmente o ideal para um sistema texto-fala seria possuir todos os possíveis alofones dos fonemas em seu banco de dados de difones, mas tanto mias
cresce o número de variações incluídas tanto mais cresce o conjunto de difones. O
crescimento do conjunto de difones impacta direto na quantidade de gravações e
segmentações que devem ser realizadas e no tamanho do banco de dados tornando
a tarefa de fazer-se a seleção de unidades muito penosa.
O uso de fonemas como unidades de concatenação gera pronúncias não inteligíveis
pois as transições entre eles não são contínuas. Por sua vez o uso de difones tem
como resultado uma maior inteligibilidade da voz sintetizada, em detrimento de
um maior espaço necessário no banco de dados e de um maior tempo necessário
para a busca das unidades.
27
Capítulo 4
Festival
Os sistemas existentes para a transformação de textos em português do Brasil para
pronúncia possuem qualidade abaixo do desejável para este projeto, por isso foram
analisados sistemas em línguas estrangeiras a fim de encontrar um que satisfizesse
as necessidades do projeto. Dos sistemas analisados o Sistema de Síntese de Fala
Festival é o que mais se adequa aos requisitos levantados para o sistema no início
deste trabalho.
O Festival é um sistema texto-fala que interpreta o texto, analisa a voz gravada
e através dos dois sintetiza uma voz artificial. Para se analisar e sintetizar a voz o
Festival usa alguns dos métodos descritos anteriormente, para analisar o Festival
se usa do método de predição linear da seção 2.5.4 e para sintetizar a voz o Festival
usa o método da seção 2.5.6.
O Léxico é a parte do Festival referente a Busca Léxica, isto é, o processo pelo
qual o Festival transforma uma palavra escrita em uma descrição de sua pronúncia. O Léxico é constituído pelo addenda, por um léxico compilado e por um método
para palavras desconhecidas.
4.1
Vantagens e Desvantagens do Festival
O projeto Festival oferece a facilidade de se introduzir novas linguagens através
da introdução de novos difones necessários àquela língua através do framework
Festvox que possui uma metodologia pré-definida para a criação de vozes em novas
línguas.O Festival fornece opção de uso de vários sintetizadores dentre os quais
a opção feita foi pelo método PSOLA do projeto MBROLA, sigla para Adição de
Sobreposição de Ressíntese de Multi Banda(Multi Band Resynthesis Overlap Add),
técnica utilizada para a geração do som Körting et al. (2005) nos fornece uma boa
idéia das vantagens de se usar o PSOLA:
• A complexidade computacional se resume em uma média de 7 operações por
amostra.
• Para uma taxa de amostragem de 16Khz conseguiu-se obter síntese em tempo
real em um processador Intel486;
• o MBROLA é capaz de suavizar descontinuidades espectrais;
28
• a suavização espectral melhora a qualidade e o desempenho da base de dados
de unidades acústicas;
• a base de dados de difones pode ser eficientemente codificada em uma porcentagem bastante inferior à carga computacional envolvida pela síntese.
No entanto essa técnica apresenta alguns inconvenientes, embora suas desvantagens não acarretem no não uso do método. Eis algumas desvantagens do PSOLA:
• modificações de pitch introduzem uma alteração de duração, que deve ser
compensada apropriadamente;
• o aumento de duração efetuado em porções sonoras do sinal de fala é responsável por uma aparência “metálica” na fala sintetizada;
• variações elevadas de pitch causam distorções sensíveis.
4.2
O Framework Festvox e a Produção de Novas
Vozes
Produzir uma nova fala para o Festival exige diversas etapas para que se possa
obter uma pronúncia de qualidade e sem ruídos capaz de se assemelhar a voz humana. No framework Festvox essas etapas foram padronizadas afim de se guiar e
facilitar a criação de vozes em novos idiomas para sua utilização no Festival.
Para se criar uma nova voz, além de se gravar a nova voz, Festvox as seguintes
macro-etapas tem de ser cumpridas: limitar a atuação do software, se a aplicação
for limitada; produzir as regras de análise sintática do texto; construir o léxico do
idioma; construir modelos de prosódia; definir a técnica de síntese de formas de
onda; construir um base de dados de difones e rotular as falas. Black and Lenzo
(2003) Cada uma dessas etapas é divida em subetapas a fim de simplificar o problema.
Para se definir uma nova voz para o Festival existem seis principais características que devem ser fornecidas, a saber, conjunto de fonemas, regras de processamento de tokens, método de fraseamento de prosódias, pronúncia das palavras do
léxico ou regras letra-som, entonação e o sintetizador de formas de onda.
• Conjunto de Fonemas: O Conjunto de Fonemas é formado por todos os fonemas existentes na língua ser inserida no Festival;
• Regras de Processamento de Tokens: As regras de processamento de tokens
dizem respeito ao modo como o Festival deve tratar cada entrada textual que
foi interpretada;
• Método de Fraseamento de Prosódias: o método de fraseamento de prosódias
é o modo como o Festival deve pronunciar as palavras encontradas no texto;
• Pronúncia das Palavras do Léxico: a pronúncia das palavras do léxico dita
sobre a pronúncia em si das palavras;
29
• Regras Letra-Som: as regras letra-som servem de alternativa para o Festival
caso ele encontra a pronúncia dos difones no banco de difones;
• Entonação: a entonação das palavras que serão pronunciadas revela se trata
de uma frase afirmativa, imperativa ou interrogativa;
• Formas de Onda: o Festival utiliza as formas de onda para identificar e mapear os tipos de difones.
4.3
Funcionamento do Festival
O Festival dispõe de um sub-módulo que funciona com um ambiente integrado de
desenvolvimento, chamado SIOD, um interpretador da linguagem LISP. O objetivo desse interpretador ligado ao Festival é permitir que o usuário ou desenvolvedor possa interagir com ele através dos das ferramentas providas essa interface.
Através desse ambiente de desenvolvimento é possível utilizar e explorar as funcionalidades dos Festival além de ser possível a elaboração de novos recursos como
a adição de novos idiomas.
O Festival é resultante de largos estudos nas diversas ciências envolvidas no
processo da fala humana. Ciências tais como a matemática, a linguística, a computação e ainda a mecânica do trato vocal envolvida na pronúncia das palavras.
Tudo isso foi considerado e composto quando do desenvolvimento do Festival e todos esses elementos estão presentes nos métodos técnicas empregados no processo
de síntese de voz.
A noção de se ter um conjunto de fonemas é importante para vários dos subsistemas existentes dentro do Festival. Um conjunto de fonemas é um conjunto de
símbolos que são definidos em termos de suas características tais como a de ser vogal ou consoante, tipo de vogal, etc. Para cada novo idioma acrescentado ao Festival
é necessário definir um novo conjunto de fonemas específico da língua e descrever
suas características. Essas características dos fonemas foram descritas no capítulo
3.
A seguir descreve-se a geração de pronúncias do Festival. O processo geração
da fala a partir de um texto inicia a partir da conversão do texto em fonemas correspondentes. Em seguida, são consideradas as regras pós-léxicas que podem modificar alguns dos fonemas encontrados. Então, a cada fonema é associado um valor
de duração e altura, preenchendo uma estrutura de dados que contém a pronúncia.
Finalmente, essa estrutura de dados é lida, sintetizada, transformada em forma
de onda e enviada para o dispositivo de áudio do sistema operacional (Black and
Caley (1999)).
Os processos envolvidos na conversão de texto em pronúncia são:
• Tokenização
Conversão de uma sequência de caracteres em uma lista de tokens, símbolos,
em que os espaços entre as palavras são usados como separadores dos tokens
do texto original.
• Identificação dos tokens
Identificação dos tipos gerais para tokens. Embora seja trivial, esse passo,
30
requer uma carga de trabalho para identificar os tokens dos dígitos como nos
anos, datas, números, etc.
• Token para palavra
Converte cada token para zero ou mais palavras, expandindo números, abreviações, etc.
• Classificação
Identifica classificação sintática a partir das palavras.
• Fraseamento prosódico
Agrega prosódia adequada às frases, isto é, confere o ritmo correto às frases a
serem pronunciadas.
• Busca Léxica
Encontra a pronúncia de cada palavra no addenda, léxico compilado ou nas
regras letra-som, incluindo a fonética e a estrutura silábica
• Atribuição da entonação
Agrega a entonação correta às sílabas apropriadas.
• Atribuição de duração
Associa uma duração a cada fonema a ser pronunciado.
• Geração do contorno F0 (afinação)
o F0 é responsável por adicionar modulação à fala a ser reproduzida, permitindo a variação tonal no decorrer do discurso.
• Renderização de forma de onda
Renderiza a forma de onda dos fonemas e duração. Este processo pode levar
vários passos, incluindo a unidade de seleção, imposição desejada, F0 e a construção da forma de onda.
4.4
Entradas do Léxico
As entradas do léxico consistem em três partes, uma palavra-cabeçalho, uma classificação e a pronúncia. A palavra cabeçalho é o que normalmente se vê como uma
palavra, por exemplo, "lápis"ou "ir", mas pode ser composta de quaisquer caracteres.
O campo de classificação consiste de uma partícula simples (ou nil se nenhuma é
especificada). Claro que existem muitos conjuntos de tags e o que quer que se marque no léxico deve ser compatível com os subsistemas que usam essa informação.
Pode-se opcionalmente definir um mapeamento de tag de um campo de parte de
pronúncia para cada léxico. O valor deve ser uma lista de associação invertida da
forma:
(lex.set.pos.map
’((( punc fpunc) punc)
(( nn nnp nns nnps ) n)))
Todas as tags de classificação que não aparecem do lado esquerdo de um pos.map
são deixadas na forma original.
31
O terceiro campo contém a verdadeira pronúncia da palavra. Isso é uma Sexpression Lisp arbitrária. Em vários dos léxicos distribuídos com o Festival essa
entrada tem um formato interno. Identificando uma estrutura silábica, marcas de
sílaba tônica e os fonemas em si. Em alguns outros léxicos há simplesmente uma
lista de fonemas com marcas de entonação em cada vogal.
Pode-se citar como exemplos das entradas do léxico:
( "sapatos"n (((s a)0) ((p a)1) ((t o s)0) ))
( "caminhar"n (((k a)0) ((m i ñ)1) ((a r)0) ))
( "borracha"n (((b o)0) ((r a)1) ((x a)0) ))
Note que pode haver mais de uma entrada com a mesma palavra-cabeçalho,
mas com partes de pronúncia diferentes, por exemplo:
("casa"v ((ka)1)((za)0))
("casa"n ((ka)1)((za)0))
4.5
Definindo Léxicos
Como dito acima cada léxico é composto por três partes. Um Addenda, uma forma
compilada e regras para palavras desconhecidas e outras declarações.
Cada léxico no sistema tem um nome que permite selecioná-lo quando se faz
troca de vozes durante a síntese. A definição de um léxico segue os passos básicos
descritos a seguir.
Primeiro um léxico deve ser criado: (lex.create "unblex")
Um conjunto de fonemas deve ser declarado para o léxico, para permitir tanto a
verificação nas entradas em si quanto o mapeamento entre diferentes conjuntos de
fonemas usados no sistema. (lex.set.phoneset "unb_fonemas")
O conjunto de fonemas deverá estar declarado no sistema.
Um léxico compilado, cuja construção será descrita a seguir, pode ser adicionado
(lex.set.compile.file "/projects/festival/lib/dicts/unblex.out")
O método para lidar com palavras desconhecidas deve ser escolhido:
(lex.set.lts.method ’lts_rules) (lex.set.lts.ruleset ’nrl)
Nesse estamos especificando o uso um conjunto de regras letra-som originalmente desenvolvido pelo Laboratório de Pesquisa Naval dos Estados Unidos(U.S.
Naval Research Laboratories). O método padrão é retornar um erro se uma palavra
não é encontrada no addenda ou no léxico compilado.
Finalmente ítens do addenda podem ser adicionados quando se tratar de palavras
notadamente comuns, mas que não estão no léxico compilado e não podem ser facilmente deduzidas pelas regras letra-som. Como, por exemplo:
(lex.add.entry ’( "CBF"n ( ((s e)1) ((b e)1) ((e f i)1) )))
(lex.add.entry ’( "AGU"n ( ((a)1) ((g e)1) ((u)1) )))
Usando novamente lex.add.entry para a mesma palavra e a mesma parte de
pronúncia irá redefinir a pronúncia atual. Note que isso adiciona entradas para
o léxico atual então é uma boa idéia selecionar explicitamente o léxico antes de
adicionar entradas ao addenda , particularmente, na tentativa de fazer um arquivo
’.festivalrc
32
Para listas maiores, léxicos compilados são melhores. A função lex.compile toma
dois nomes de arquivo como parâmetros. Um contendo uma lista de entradas léxicas e um arquivo de saída onde o léxico compilado será salvo.
A compilação pode tomar certo tempo e requer muita memória, quando todas as
entradas estão carregadas, checadas e então classificadas antes de serem escritas
no arquivo de saída. Durante a compilação se alguma entrada é mal formada o
processo de leitura é abortado com uma mensagem leitura não muito útil. Note que,
se algumas das entras contém aspas simples ou duplas as entradas provavelmente
terão uma divisão errônea e causaram esse erro estranho.
Nesse caso tente ativar (debug_output t) antes da compilação. Isso irá imprimir
cada entrada enquanto a lê e isso deve ajudar a diminuir a busca pelo erro.
4.6
Processo de Procura de Palavras
Quando se procura uma palavra, tanto através da interface em C++ quanto pela
interface em Lisp, uma palavra é identificada através de uma palavra-cabeçalho e
uma classificação. Se uma classificação não é especificada nil é assumido. O que é
compatível com todos as tags de classificação.
O processo de busca no léxico primeiro busca no addenda, se há uma correspondência total (palavra-cabeçalho e classificação) a entrada é retornada. Se existe uma entrada no addenda cuja palavra-cabeçalho corresponde com a procurada
mas a tag de classificação é nil essa entrada é retornada.
Se não existe a entrada buscada no addenda, o léxico compilado, se presente, é
consultado. Novamente tem-se correspondência se a palavra-cabeçalho e o tag de
classificação correspondem com a busca ou se palavra-cabeçalho corresponde e o tag
de classificação é nil. Diferentemente do addenda, se não há uma correspondência
total com a palavra procurada a primeira entrada encontrada com essa característica é retornada. A razão para isso é que a próxima alternativa depois do léxico
compilado são as regras letra-som, mas as essas regras não podem ser melhores
que uma entrada com a mesma palavra-cabeçalho e uma classificação diferente.
Além disso, dado que existe uma entrada com a mesma palavra-cabeçalho e uma
classificação diferente essa palavra pode ter uma pronúncia não corriqueira e as
regras letra-som podem não ser capazes de produzir uma pronúncia adequada.
Finalmente, se a palavra não é encontrada no léxico compilada ela é repassada
para o método definido para palavras desconhecidas, normalmente regras letrasom.
Ganchos pré e pós-busca podem ser definidos para um léxico. Como uma função,
ou uma lista de funções, em Lisp. Os ganchos pré-busca serão chamados com
dois argumentos, a palavra e características, e deve retornar um par palavracaracterísticas. Os ganchos pós-busca devem receber uma entrada do léxico e retornar uma entrada do léxico. Os ganchos pré e pós busca não fazem nada por
padrão.
Léxicos compilados podem ser criados através de listas de entradas léxicas. A
busca em um léxico compilado, que é binária, é muito mais eficiente que a busca
no addenda, que é linear. Também seria proibitivo o tempo tomado para carregar
33
um léxico completo típico como um addenda. Se não mais algumas centenas de
entrada no addenda deve-se considerar incluí-las no léxico compilado.
Uma lista de todas as entradas no addenda e no léxico compilado devem ser
encontradas pela função lex.lookup_all. Essa função toma uma palavra e retorna
todas as entradas dela independente de classificação.
4.7
Regras Letra-Som
Cada léxico deve definir que ações tomar no caso de uma palavra não ser encontrada no addenda ou no léxico compilado.
As ações são configuradas pelo método:
(lex.set.lts.method MÉTODO)
Onde MÉTODO pode ser tomado entre as opções que se seguem:
’Error’
Retorna um erro quando uma palavra desconhecida é encontrada. Obs.:Este é o
método padrão.
’lts_rules’
Usa um conjunto específico de regras letra-som descrito posteriormente. O nome do
conjunto de regras a ser usado é definido com a função lex.lts.ruleset. Esse método
executa um conjunto de regras para uma forma expandida da palavra e assume
que as regras retornam uma lista correta de fonemas. Se diversas instâncias de
regras são necessárias usa-se o método de função descrito a seguir.
’nenhum’
Retorna uma entrada com a classificação nil.
’FUNCTIONNAME’
Esse método é chamado como um nome de uma função LISP. Essa função possui
dois argumentos: a palavra e sua classificação. Deve retornar uma entrada válida
do léxico.
O sistema básico de regras letra-som, embora simples, é capaz de construir regras letra-som bastante complexas. A forma básica de uma regra é a seguinte:
( CONTEXTOESQUERDO [ITENS] CONTEXTODIREITO = NOVOSITENS)
34
A interpretação é esta. Se ITENS aparece nos CONTEXTOESQUERDO e CONTEXTODIREITO especificados então a string de saída contém NOVOSITENS. Qualquer dos CONTEXTOESQUERDO, CONTEXTODIREITO ou NOVOSITENS pode
estar vazio. Note que NOVOSITENS é escrito de modo separado e não pode ser usado para alimentar regras posteriores no mesmo conjunto de regras. Um exemplo
em língua inglesa pode ser: ( # [ c h ] C = k)
O caracter especial # denota uma fronteira da palavra e o símbolo C denota o
conjunto de todas as consoantes, os conjuntos declarados após as regras. A regra
exemplificado atesta que ch no início de uma palavra, seguido de uma consoante,
deve ser renderizado como sendo o fonema k. Símbolos no contexto podem ser
seguidos pelo símbolo * para zero ou mais ocorrências e por + para uma ou mais
ocorrências.
Os símbolos nas regras são tratados como conjuntos de nomes se declarados
como tal ou como símbolos do alfabeto de entrada e saída.
As regras são testadas em ordem até que uma corresponda a um símbolo ou
mais da entrada. A regra é aplicada adicionando-se a parte à direita da regra à
saída. Volta-se ao início da lista regras e elas são novamente aplicadas.
A função usada para aplicar um conjunto de regras vai expandir entrada em
uma lista de caracteres se receber um único bloco e, se dada uma lista de caracteres,
vai usá-la na forma como recebeu-a.
A partir do Lisp existem três funções de acesso básico. Existem funções semelhantes em C++.
(lts.ruleset NOME DEFINIÇÕES REGRAS)
Define um novo conjunto de regras. Onde NOME é o nome da nova regra, DEFINIÇÕES
é uma lista de definição no formato (SETNAME e0 e1...) e REGRAS é uma lista de
regras como descrito anteriormente.
(lts.apply PALAVRA NOMECONJUNTOREGRAS)
Aplica o conjunto de regras de nome NOMECONJUNTOREGRAS à PALAVRA.
Se PALAVRA é um símbolo então ele é expandido em uma lista de seus caracteres.
Se PALAVRA é uma lista ela é usada como tal. Se as regras não podem ser aplicadas com sucesso retorna-se um erro. O resultado de uma aplicação bem sucedida
é retornado em uma lista.
(lts.check_alpha PALAVRA NOMECONJUNTOREGRAS)
Os símbolos em PALAVRA são conferidos contra o alfabeto de entrada das regras
de nome NOMECONJUNTOREGRAS. Se todos estão contidos no alfabeto t é retornado, se não retorna-se nil. Note que isso não necessariamente garante a aplicação
correta das regras, o contexto pode ser restrito, mas permite verificação geral como
números ou pontuação permitindo a aplicação de um conjunto correto de regras.
O sistema de regras letra-som pode ser usado diretamente da interface Lisp e
pode ser facilmente usado para fazer operações relativamente complexas de análise
35
de palavras ser requerer modificação do sistema C/C++. Por exemplo as regras
letra-som para o dialeto do país de gales consiste em três conjuntos de regras,
primeiro para identificar explicitamente epenteses, depois identificar vogais com
ênfase e por fim reescrever essa string adicional em fonemas.
(define (gales_lts palavra características)
(let (epen str wel)
(set! epen (lts.apply (downcase palavra) ’newepen))
(set! str (lts. apply epen ’newwelstr))
(set! wel (lts.apply str ’newwel))
(list palavra
nil
(lex.sillabify.phstress wel))))
O método de regras letra-som para o galês é associado a welsh_lts, senão essa
função é chamada quando uma palavra não é encontrada no léxico. A função
supracitada primeiro coloca os caracteres da palavra em caixa baixa (downcase)
e então aplicada as regras seguintes e chama finalmente o processo de silabificação
e retorna uma entrada léxica construída.
4.8
Construindo Regras Letra-Som
Como construir regras letra-som é muito trabalhoso, um método alternativo é construir essas regras a partir de um léxico da linguagem, mas a viabilidade de se
usar regras letra-som depende muito da língua para a qual se constroem as regras.
Dado um grande léxico de pronúncias os seguintes passos se seguem para construir um modelo de regras letra-som. O processo descrito não é totalmente automático, mas a intervenção manual é facilmente executada.
O processo envolve o seguintes passos:
• Pré-processamento do léxico e transformação em um conjunto de treinos;
• Definição do conjunto dos pareamentos de letras e fonemas;
• Construção das probabilidades de cada par letra-fonema;
• Alinhamento das letras com número igual de fonemas-_epsilons_;
• Extração dos dados por letra para os treinos;
• Construção dos modelos CART para predição de fonemas a partir de letras e
• Construção do modelo de associação de tonicidade lexical adicional.
Idealmente o modelo é um auxiliar para o léxico para que apenas as palavras
não encontradas no léxico sejam necessitem do uso das regras letra-som. Assim,
apenas formas incomuns necessitam das regras. Mais precisamente as palavras
mais comuns, muitas vezes com pronúncias incomuns, devem estar explicitamente
listadas sempre. É possível reduzir o tamanho do léxico removendo todas as entradas que as regras letra-som conseguem prever corretamente.
36
O conjunto de treinos possui entradas do tipo:
("faca"nil (f a k a))
("chapéu"nil (x a p eh u))
("ontem"nil (om t em))
Deve-se separar os dados entre um conjunto de treinos e conjunto de testes se
pretende saber a integridade do trabalho. A cada dez entradas se coloca uma linha
de teste.
O segundo estágio é definir o conjunto de mapeamentos de letras para fonemas
independente de contexto. Isso pode ser inicialmente definido à mão e então conferido com o conjunto de treinos. faz-se inicialmente um arquivo na forma:
(require ’lts_build)
(set! allowables
((a _epsilon_)
(b _epsilon_)
(c _epsilon_)
(d _epsilon_)
...
(y _epsilon_)
(z _epsilon_)
(# #)))
Todas as letras que aparecem no alfabeto de ao menos estar marcadas com _epsilon_,incluindo caracteres acentuados que aparecem na língua. Os últimos símbolos da lista devem ser cerquilhas que mapeiam para si mesmas. Elas marcam o
início e o fim de cada palavra e são automaticamente adicionados durante a execução dos treinos.
Para adicionar incrementalmente executa-se o Festival como:
festival allowables.scm
e em modo prompt:
festival>(cummulate-pairs «arquivo_de_treinos>")
Esse comando imprimirá cada entrada do léxico que não pode ser alinhada com
o atual conjunto de mapeamentos . Adiciona-se cada entrada listada à lista dos
pares letra-fonema. Por exemplo se a seguinte entrada falhar:
("milho"nil (m i lh o))
Adiciona-se o fonema m para a letra m, o fonema ih para a letra i, o fonema lh
para o dígrafo lh(tratado como apenas uma letra na lista) e o fonema u para letra o
37
na lista de pares letra-fonema. Depois de fazê-lo reinicia-se o Festival e chama-se
cumulate-pairs novamente. Adiciona-se pares até que o número de erros torne-se
aceitável, pois, geralmente existem pronúncias que não possuem qualquer relação
com a escrita como siglas e palavras estrangeiras.
É razoável que a lista de pares letra-fonema seja consistente. Existem ao menos
dois mapeamentos para a sequência ch, c mapeando para o fonema x e h mapeando
para _epsilon_ ou h mapeando para o fonema x e c mapeando para _epsilon_. Entretanto apenas um mapeamento deve ser permitido. É preferível o primeiro.
Existe ainda o caso em que uma letra tenha de ser mapeada para mais de um
fonema simultaneamente. Como é o caso do x. A letra x por vezes é pronunciada
usando-se os fonemas de k e s. Para permitir isso usa-se o multifonema k-s. Assim
o multifonema será previsto para x em alguns contextos e os fonemas serão separados enquanto se ignoram quaisquer _epsilon_ previstos para essas letras. Por
fim a lista de pares letra-fonema para o português é:
(set! allowables
((a _epsilon_ a ah am)
(b _epsilon_ b)
(c _epsilon_ k s)
(d _epsilon_ d)
(e _epsilon_ e eh em)
(f _epsilon_ f)
(g _epsilon_ g)
(h _epsilon_)
(i _epsilon_ i ih im)
(j _epsilon_ j)
(k _epsilon_ k)
(l _epsilon_ l u)
(m _epsilon_ m)
(n _epsilon_ n)
(o _epsilon_ o oh om)
(p _epsilon_ p)
(q _epsilon_)
(r _epsilon_ r R)
(s _epsilon_ s z)
(t _epsilon_ t)
(u _epsilon_ u uh um)
(v _epsilon_ v)
(w _epsilon_ v u)
(x _epsilon_ x k-s z)
(á _epsilon_ ah)
(é _epsilon_ eh)
(í _epsilon_ ih)
(ó _epsilon_ oh)
(â _epsilon_ a)
(ê _epsilon_ e)
38
(ô _epsilon_ o)
(ã _epsilon_ am)
(õ _epsilon_ om)
(à _epsilon_ ah)
(# #)
))
Apesar de seu extenso conteúdo, essa lista não diz nada a respeito do contexto em
que esses pares letra-fonema aparecem ou a respeito de sua frequência na língua.
Essa informação será gerada automaticamente a partir do conjunto de treinos.
Quando o número de erros de correspondência entre os pares letra-fonema e o
léxico se tornar aceitável deixa-se o cummulative-pairs ser executado até o final.
Desse modo ele conta o números de vezes em que cada par letra-fonema aparece.
A seguir chama-se:
festival> (save-table «nome_do_lexico>-pl-table")
Isso transforma a tabela de frequência acumulada em uma tabela de probabilidades e a salva. Reinicia-se o Festival carregando essa nova tabela:
festival allowables.scm <nome_do_lexico>-pl-table.scm
Agora cada palavra pode ser alinhada a um conjunto de fonemas, epsilons e multifonemas com tamanho igual ao da palavra.
festival> (aligndata «nome_do_lexico>.train<nome_do_lexico>.train.align")
Faz-se isso também para o conjunto de testes.
Isso irá produzir entradas como:
queijo k e i j u
carro k a R u
folha f o lh a
O próxima fase é montar entradas para que o algoritmo wagon possa construir
modelos. Isso é feito do seguinte modo:
festival> (build-feat-file «nome_do_lexico>.train.align<nome_do_lexico>.train.feats")
Novamente fazer o mesmo para o conjunto de treinos.
Necessita-se, nesse momento, de um arquivo descritor para o wagon para os
dados de entrada. Fa-se isso através do script "make_wgn_desc"fornecido com as
ferramentas de pronúncia. Um exemplo de script para isso seria:
for i in a b c d e f g h i j k l m n o p q r s t u v w x y z á é í ó â ê ô à ã õ
do
# valor de parada para o wagon
39
STOP=2
echo letter $i STOP $STOP
# Encontra o conjunto de treino para a letra $i
cat <nome_do_lexico>.train.feats |
awk ’if ($6 == "’$i’") print $0’ >ltsdataTRAIN.$i.feats
# divide o conjunto de teinos para obter a saida para o teste passo-a-passo
traintest ltsdataTRAIN.$i.feats
# Extrai os dados de teste para a letra $i
cat <nome_do_lexico>.test.feats |
awk ’if ($6 == "’$i’") print $0’ >ltsdataTEST.$i.feats
# executa o wagon para prever o modelo
wagon -data ltsdataTRAIN.$i.feats.train -test ltsdataTRAIN.$i.feats.test
-stepwise -desc lts<nome_do_lexico>.desc -stop $STOP -output lts.$i.tree
# Testa a árvore resultante
wagon_test -heap 2000000 -data ltsdataTEST.$i.feats -desc lts<nome_do_lexico>.desc
-tree lts.$i.tree
done
O script traintest divide o arquivo de entrada X em X.train e X.test com cada décima
linha em X.test e o resto em X.train. Esse script pode tomar muito tempo de execução, por volta de 6 horas em uma Sun Ultra 140.
Uma vez que os modelos estiverem criados deve-se colocá-los em um única lista
. As árvores geradas pelo algoritmo wagon contém probabilidades em cada folha,
nesse momento essa informação pode ser removida porque apenas os pares letrafonema mais prováveis serão previstos. Isso reduz substancialmente o tamanho
das árvores.
(merge_models ’<nome_do_lexico>_lts_rules «nome_do_lexico>_lts_rules.scm")
O script merge_models é definido dentro de ’lts_build.scm’.
O arquivo de entrada conterá um set! para o nome da variável de entrada para
uma lista de associação de letras com a árvore treinada. Para testar um conjunto
de modelos letra-som carrega-se o modelo salvo e chama-se as seguintes funções:
festival <nome_do_lexico>-table.scm <nome_do_lexico>_lts_rules.scm
festival> (lts_testset «nome_do_lexico>.test.align«nome_do_lexico>_lts_rules)
O resultado, depois de mostradas as falhas, será uma tabela mostrando os resultados para letra, para todas as letras e para palavras completas. As entrada
falhas darão uma noção de como bom ou ruim o resultado é, algumas vezes serão
apenas algumas vogais de diferença, longas versus curta, outras vezes poderão ser
consoantes faltantes. A qualidade das regras letra-som se dá por o quanto elas
proveem pronúncias aceitáveis em vez de o quanto o número de correspondências
é alto ou baixo.
Como o léxico pode ser uma parte muito grande do sistema pode-se remover entradas do léxico em que as regras letra-som se comportam de maneira satisfatória.
40
Para o alemão e o francês esses léxicos reduzidos em 90%. A função "reduce_lexicon"em "festival/lib/lts_build.scm"é usada para isso.
4.9
Requisitos do Léxico
Existe um certo número de sequencias de caracteres que precisam ser arbitrariamente definidos que devem ser mencionados. Se se pretende usar basicamente as
regras existentes para conjuntos de caracteres deve-se tentar incluir ao menos as
seguintes regras:
• Se uma sequência de caracteres é identificada como uma sigla a tokenização
assume que as pronúncias das letras estão individualmente listadas no léxico.
Elas devem ser identificadas como substantivos.
• É difícil obter uma lista completa de símbolos como cifrão, arroba e porcentagem, mas eles devem explicitamente listados pois as regras letra-som não
capazes de reconhecer qual a pronúncia para eles.
• Números em formato de dígitos; 1,24 ou 325, por exemplo; não devem estar no
léxico. As rotinas de conversão de números convertem números em palavras.
41
Capítulo 5
Desenvolvimento do Módulo de Voz
Este capítulo descreve o processo seguido para a obtenção do módulo de voz em
português do Brasil para o Festival. Para isso foram definidos a tokenização, o
fraseamento, o léxico e o gerador de transcrição fonética. Foram obtidos com os
passos descritos nesse capítulo um módulo de voz com o dicionário fonético para
o Festival e a integração do Festival com a voz em português do Brasil do projeto
MBROLA.
5.1
Criação do Léxico
O Léxico é constituído pelo addenda, por um léxico compilado e por um método
para palavras desconhecidas. O addenda é constituído por um pequeno conjunto
de palavras adicionadas à mão. O léxico compilado é constituído por palavras cujas pronúncias não são óbvias através das regras de pronúncia. As regras para
palavras desconhecidas são usadas para as palavras que não constam no addenda
e nem no léxico compilado.
Foram definidos nesse trabalho um addenda, descrito quando da definição final
do léxico, e regras letra-som. As regras letra-som foram definidas usando o processo
descrito a seguir.
5.1.1
Definição dos Fonemas
Antes de se começar a definir o léxico para o português deve-se descrever os fonemas da língua de algum modo. O Festival tem um padrão para tal. O arquivo para
definição dos fonemas para tem um formato pré-definido pelo Festival. A saber:
(1 2 3 4 5 6 7 8 9)
1. Letra que definirá o fonema
2. Vogal ou consoante (vc + - 0)
3. Duração da vogal: curta longa
(vlng s l 0)
42
4. Altura da vogal: baixa média-baixa média média-alta alta
(vheight 1 2 3 4 5 0)
5. Posteridade da vogal: anterior central posterior
(vfront 1 2 3 0)
6. Arredondamento dos lábios
(vrnd + - 0)
7. Tipo de consoante: plosiva(stop) fricativa lateral nasal
(ctype s f l n 0)
8. Local de articulação: labial alveolar palatal labio-dental
apico-alveolar pos-alveolar velar uvular
(cplace l a p ld aa pa v u 0)
9. Fonação das consoantes
(cvox + - 0)
Assim a vogal "i", nesse caso o fonema presente em "igreja"ou o primeiro "i"em
"itália", pode ser definida pela linha de código:
(I + l 1 1 - 0 0 0) ;;
e a consoante "p"foi definida nesse trabalho como:
(p - 0 0 0 0 s l -) ;;
5.1.2
Definição dos Allowables
Em seguida é preços definir uma lista de associação entre os fonemas da língua e
sua representação gráfica. Esse arquivo de associação é chamado de allowables. A
lista de allowables já foi citada discretamente na tabela 3.1 e uma primeira versão
para ela foi apresentada na seção 4.8.
A versão final para a tabela de allowables para o português do Brasil, baseada
na lista de fonemas definida na seção 5.1.1 é:
(require ’lts_build)
(set! allowables ’(
(a _epsilon_ A a B)
(b _epsilon_ b)
(c _epsilon_ k s x)
(d _epsilon_ d d-j)
(e _epsilon_ E e J i)
(f _epsilon_ f)
(g _epsilon_ g j)
(h _epsilon_ )
(i _epsilon_ I i G)
(j _epsilon_ j)
(l _epsilon_ l u K)
(m _epsilon_ m)
(n _epsilon_ n H)
43
(o _epsilon_ O o C u)
(p _epsilon_ p)
(q _epsilon_ k)
(r _epsilon_ R r L)
(s _epsilon_ s z S)
(t _epsilon_ t t-x)
(u _epsilon_ U u F)
(v _epsilon_ v)
(x _epsilon_ x z k-s s S)
(z _epsilon_ z s)
(# #)))
5.1.3
Criação das Regras Letra-som
Para cumprir tal processo os arquivos gerados inicialmente foram:
• fonemas unb_br_phoneset.scm
• permissões mapeando as letras para os fonemas unb_br_allowables.scm
• arquivo de treino unb_br.train com 100 palavras
• arquivo de treino unb_br.train com 1000 palavras
• arquivo de treino unb_br.train com 18000 palavras
os arquivos de treino de 100 palavras e de 1000 palavras formas gerados por
processo completamente manual. O arquivo de treino com 18000 palavras foi gerado em três passos:
• O primeiro consistiu em gerar as palavras através de um programa (unb_br/programas/wordlist.exe) que gerava uma lista de palavras a partir de um
texto. Para gerar as 18000 palavras foram usados a obra "O Primo Basílio"e
o Manual de Redação da Presidência da republica .
• O segundo passo consistiu em criar uma descrição prévia da pronúncia das
palavras, para tanto foi criado um programa (unb_br/programas/pronuncia.php)
que deduzia de forma rudimentar a pronúncia das palavras e colocava a descrição das pronúncias no formato do Festival.
• O terceiro passo para gerar as 18000 palavras foi corrigir minunciosamente a
pronúncia conferindo-a com Polito (2003).
Tendo tudo isso em mãos iniciou-se o processo de construção das regras letrasom: Primeiro, chama-se o Festival passando como parâmetro a lista de permissão,
mapeamento de cada fonema para a letra escrita:
festival allowables_unb_br.scm
Já dentro do Festival executou-se a função cummulate-pairs. Essa função conta
quantas vez cada letra é atribuída para os fonemas aos quais ela está associada
e lista as ocorrências em que não correspondência entre as letras listadas e os
fonemas apresentados.
44
> (cummulate-pairs "unb_br.train")
Tendo o cummulate-pairs executado completa e satisfatoriamente até o final.
Salvou-se a tabela de probabilidades com a função:
>(save-table "unb-br-")
>(quit) Saindo do Festival, chamou-se a ele novamente passando como parâmetros a tabela de premisses e tabela de probabilidades:
festival allowables_unb_br.scm unb-br-pl-tablesp.scm
Em seguida executou-se a função que faz o segundo alinhamento, já com os
fonemas, espaços e multifonemas:
>(aligndata "unb_br.trainunb_br.train.align")
O próximo passo foi gerar um arquivo com as características das palavras e
fonemas descritas de modo que o algoritmo ’wagon pudesse interpretá-las
>(build-feat-file "unb_br.train.alignunb_br.train.feats")
>(quit)
Saindo-se novamente do Festival criou-se um descritor para servir de entrada
para o algoritmo ’wagon através do arquivo de características gerado anteriormente e do fieldFile, que mostra de que modo os sufixos e prefixos da língua podem
ser organizados.
A função que cria o descritor é a seguinte:
make_wagon_desc unb_br.train.feats fieldFile unb_br_lts.desc
Aqui foi encontrado um problema, que inicialmente se pensou ser por causa do
número de palavras, de divergência de parâmetros entre os arquivos gerados pelos
algoritmos.O arquivo unb_br.train.feats passava apenas 11 parâmetros enquanto
o unb_br_lts.desc esperava 12.
Além disso o wagon não reconhecia o nil colocado automaticamente no unb_br_lts.des. A solução foi retirar o parâmetro ’pos’ e substituir nil por # 0 no parâmetro
’ignore’
Criado o descritor e solucionados os problemas pôde-se executar o algoritmo
’wagon com o script criado para chamá-lo: sh wagon.sh
Uma obervação importante é que a árvore de previsão gerada com o arquivo
de treino unb_br.train com 1000 palavras foi muito grande, porém, a árvore de
previsão gerada com o arquivo de treino unb_br.train com as 18000 palavras foi
bem menor.
Uma vez geradas as árvores de previsão criou-se as regras propriamente ditas
com a função merge_models do Festival:
festival allowables_unb_br.scm
>(merge_models ’oald_lts_rules "unb_br_lts_rules.scm"allowables)
As arvores para serem mescladas precisaram estar no mesmo diretório dos allowables e dos arquivos criados até agora.
5.1.4
Definição do Léxico
Primeiramente é definido o Addenda de modo que se considere a pronúncia das
letras isoladas e não a pronúncia dos sinais de pontuação.
Exemplo de entrada de letra isolada:
45
(lex.add.entry ’("h_"nn (((A g A) 0))))
Exemplo de entrada de pontuação:
(lex.add.entry ’("?"punc nil))
Por fim o léxico é criado e são adicionadas as regras letra-som criadas na seção
5.1.3:
(lex.create "unb_br")
(lex.set.phoneset "unb_br")
(lex.set.lts.method ’unb_br_lts_function)
5.2
Fraseamento
O Fraseamento é o processo pelo qual se extrai do texto a pontuação para que o
separador de símbolos, tokens possa operar corretamente.
O formato do arquivo para fraseamento dos textos descreve possíveis sinais de
pontuação encontrados nos textos.
As linhas:
((lisp_token_end_punc in ("?.:!"))
((lisp_token_end_punc in (",;"))
Descrevem a obtenção de alguns sinais que devem ser excluídos antes que o texto
passe ao tokenizador.
5.3
Tokenização
A tokenização define o modo como os tokens, símbolos resultantes do processo de
fraseamento, são extraídos do texto de entrada, isto é, cada letra ou palavra é
transformado em um token para ser analisado pelo Festival. Para cada um desses
tokens o Festival determina a cadeia de caracteres que deve ser buscada no léxico.
5.4
Gerador de Transcrição Fonética
Como o Festival não possui um exportador de transcrição fonética foi necessário
escrever um programa que pudesse, a partir do tokens produzidos pelo Festival,
obter uma transcrição e ser capaz de exportar essa transcrição de modo que ela
pudesse ser usada pelo aplicativo do projeto MBROLA. Cada entrada a ser exportada ao aplicativo do projeto MBROLA tem a forma:
((string-equal "e"char)(string-append "e 180 40 100"))
Onde a primeira string, no exemplo a string "e", indica a letra definida para
descrever o fonema e a segunda string, no exemplo "e 180 40 100", descreve o modo
como o fonema vai ser passar para o aplicativo MBROLA.
Mais detalhadamente a string "e 180 90 100"tem a forma:
<fonema_MBROLA> <duracao_ms> <tempo_ms_pronuncia> <potencia_hertz>
Onde <tempo_ms_pronuncia> é um ponto qualquer em ms enquanto o fonema está
46
sendo pronunciado e <potencia_hertz> é a potência em hertz desse ponto. Aqui foi
adotado o ponto médio da duração do fonema como ponto de maior intensidade
da pronúncia e foi adotada a potência média da pronuncia de um homem que, de
acordo com (Pontes (2005)), é de 100MHz.
5.5
Integração com o MBROLA
Pode-se usar o MBROLA como ferramenta externa para gerar o arquivo wave a ser
usado para o Festival com o comando:
/usr/bin/mbrola <voz> <entrada> <saida>
Onde <voz> é o endereço onde encontra-se a voz em português do Brasil para
o MBROLA, <entrada> é o endereço do arquivo com as strings de entrada para o
MBROLA e <saida> é o nome do arquivo .wav de saída que o MBROLA produzirá.
Para executar o arquivo gerado pelo MBROLA no Festival basta usar o comando:
(na_play saida)
Que pronúncia o arquivo .wav gerado pelo MBROLA
5.6
Requisitos e Uso do Programa
Somente a pasta que contém o programa não contempla todas as funcionalidades
necessárias. É necessário que se obtenha alguns recursos e ferramentas para que
possa se chegar ao pleno funcionamento do projeto. As funcionalidades, ferramentas e os programas necessários foram obtidos na distribuição do Linux "Ubuntu
9.04"através do aplicativo de gerência de pacotes Synaptic e no site do projeto
MBROLA. Estas funcionalidades, ferramentas e estes programas estão listados
a seguir:
• Festival versão 1.96
• Speech Tools
• MBROLA
• php versão 5.2.6
Para usar o módulo de voz confeccionado os seguintes comandos devem ser usados.
• Estando na pasta digita-se:
festival festvox/unb_br_diphone.scm "(voice_unb_br_diphone)"
O que conduz para o ambiente de comandos do Festival.
• No ambiente do Festival usa-se o comando:
>(setq utt (Utterance Text "texto para pronúncia")
onde "texto para pronúncia"é o texto a ser pronunciado, as aspas fazem parte
do comando.
47
• Para pronúncia do texto escolhido usa-se o comando:
>(Falar utt 0 ’mbrola)
48
Capítulo 6
Conclusões e trabalhos futuros
6.1
Conclusões
Foi desenvolvido nesse trabalho um dicionário fonético para o Festival uma documentação adequada de modo que esse trabalho possa ser reaproveitado para
trabalhos posteriores. Esse desenvolvimento incluiu a criação de uma lista de
palavras a partir de textos arbitrários, a geração de uma descrição fonética preliminar das pronúncias das palavras, a correção dessas pronúncias de modo que se
pode tê-las como entrada para os scripts que geraram o dicionário.
Depois da criação desse dicionário fez-se a integração do Festival com a voz
em português do Brasil do projeto MBROLA através da exportação, a partir do
Festival, de um arquivo com a duração e a potência com que os fonemas deviam
ser pronunciados. Assim o módulo de voz pode pronunciar corretamente palavras
e frases em português brasileiro.
6.2
Trabalhos Futuros
O trabalho pode ser melhorado com a afinação dos fonemas gerados pelo Festival
em relação aos fonemas do MBROLA ou montando-se uma voz para o Festival,
trabalho que não foi realizado por falta de tempo hábil no projeto, de modo que se
possa obter uma pronúncia de qualidade. Além disso, precisa-se gerar o suporte à
acentuação para o português.
49
Referências
Black, A. and Lenzo, K. (2000). The architecture of the festival speech synthesis
system. Technical report, Carnegie Mellon University. 25
Black, A. W. and Caley, R. (1999). The festival speech synthesis system. Technical
report, University of Edinburg. www.cstr.ed.ac.uk/projects/festival. 30
Black, A. W. and Lenzo, K. A. (2003). Building synthetic voices. Technical report,
Carnegie Melon University. www.festvox.com. 29
Brown, J. (2009). What is tty and tdd? Technical report, North Carolina Justice
Academy. 8
Chbane, D. (1994). Desenvolvimento de sistema para conversão de textos em fonemas no idioma português. Master’s thesis, Escola Politécnica da Universidade de
São Paulo, São Paulo, Brasil. 23
Dodge, C. and Thomas, A. J. (1997). Computer Music Synthesis, Composition and
Performance. Schirmer-Thomson Learning, USA. 18
Dutoit, T. (1997). An Introduction to Text-To-Speech Synthesis. Kluwer Academic
Publishers, Dordrecht. 4
Estúdio,
N.
S.
(2009).
O
que
é
portal
de
voz.
http://www.newsom.com.br/servicos/portais-de-voz.html, visitado em 17/05/2009.
8
Halliday, D., Resnick, R., and Walker, J. (2003). Fundamentos da Física: Gravitação, Ondas e Termodinâmica. LTC S.A., Rio de Janeiro. 11, 17
Jr., J. D. and Hansen, J. (1993). Discrete-time Processing of Speech Signals. MacMillan Publishing Company. Mamillan Publishing Company. 17
Kempelen, W. (1791). Mechanismus der menschlichen Sprache nebst Beschreibung
einer sprechenden Maschine. von Kempelen, Vienna. vi, 4, 5, 6
Körting, T., Costa, R., and da Silva, F. (2005). Um sistema texto-fala livre. Technical report, Fundação Universidade Federal do Rio Grande. 9, 28
Lemmetty, S. (1999). Review of speech synthesis technology. Technical report, Akustiikan ja äänenkäsittelytekniikan laboratorio, Universidade de Tecnologia de Helsinki, Laboratório de Acústica e Processamento de Sinais.
http://www.acoustics.hut.fi/publications/files/theses/, visitado em 17/05/2009. 6
50
Linse (2007). Sistema de conversão texto-fala. Technical report, Laboratório de
Circuitos e Processamento de Sinais, Universidade Federal de Santa Catarina.
http://www.linse.ufsc.br, visitado em 17/05/2009. 10
Neto, P. and Infante, U. (2004). Gramática da Língua Portuguesa. Scipione, São
Paulo. 20
Polito, A. (2003). Michaelis Dicionário Escolar Italiano-Portugês PortuguêsItaliano. Editora Melhoramentos, São Paulo. 44
Pontes, J. (2005). Criação de um módulo de voz para a lingua francesa no framework multilingual festival. Master’s thesis, Universidade de Brasília, Brasília,
Brasil. 6, 9, 21, 47
Teixeira, J. P., Freitas, D. R., Gouveia, P. D., Olaszy, G., and Németh, G. (1996).
Multivox conversor texto-fala para português. Technical report, Faculdade de
Engenharia da Universidade do Porto. 10
Traunmüller, H. (2000). Wolfgang von kempelen’s speaking machine and its successors. Technical report, Institutionen för lingvistik, Instituto de linguística da
Universidade de Estocolmo. www.ling.su.se/staff/hartmut/kemplne.htm, visitado
em 17/05/2009. 4
Young, S. J. and Fallside, F. (September 1979). Speech synthesis from concept: A
method for speech output from information systems. J. Acoust. Soc. Am., 66:685–
695. 6
51
Apêndice A
Exemplos de Execução
Com a execução da sentença "ola bom dia"obtêm-se, além do arquivo de áudio correspondente, a seguinte saída:
o 180 40 100
l 105 150 100
a 180 40 100
b 60 30 100
om 180 40 100
d 60 30 100
i 180 40 100
a 180 40 100
Com a execução da sentença "o rato roeu a roupa do rei de roma"obtêm-se, além do
arquivo de áudio correspondente, a seguinte saída:
u 180 40 100
r 180 40 100
a 180 40 100
t 180 40 100
u 180 40 100
r 180 40 100
o 180 40 100
e 180 40 100
u 180 40 100
a 180 40 100
r 180 40 100
o 180 40 100
u 180 40 100
p 100 150 100
a 180 40 100
d 60 30 100
u 180 40 100
r 180 40 100
e 180 40 100
i 180 40 100
52
d 60 30 100
i 180 40 100
r 180 40 100
om 180 40 100
m 170 35 100
a 180 40 100
Com a execução da sentença "dicionario em portugues do brasil desenvolvida na
universidade de brasilia"obtêm-se, além do arquivo de áudio correspondente, a
seguinte saída:
d 60 30 100
i 180 40 100
s 110 55 100
_ 50
i 180 40 100
om 180 40 100
n 180 40 100
a 180 40 100
r 180 40 100
i 180 40 100
u 180 40 100
em 180 40 100
p 100 150 100
o 180 40 100
r2 150 25 100
_ 50
t 180 40 100
u 180 40 100
g 150 25 100
e 180 40 100
s 110 55 100
_ 50
d 60 30 100
u 180 40 100
b 60 30 100
r 180 40 100
a 180 40 100
z 60 30 100
i 180 40 100
u 180 40 100
d 60 30 100
e 180 40 100
z 60 30 100
em 180 40 100
v 60 30 100
o 180 40 100
53
u 180 40 100
v 60 30 100
i 180 40 100
d 60 30 100
u 180 40 100
n 180 40 100
a 180 40 100
um 180 40 100
n 180 40 100
i 180 40 100
v 60 30 100
e 180 40 100
r2 150 25 100
_ 50
s 110 55 100
_ 50
i 180 40 100
d 60 30 100
a 180 40 100
d 60 30 100
i 180 40 100
d 60 30 100
i 180 40 100
b 60 30 100
r 180 40 100
a 180 40 100
z 60 30 100
i 180 40 100
l 105 150 100
i 180 40 100
a 180 40 100
54
Apêndice B
Conteúdo do CD
O CD contém a pasta unb_br com o módulo de voz em português do Brasil para o
Sistema de Síntese Voz Festival.
Dentro da pasta unb_br encontram as pastas resultantes do processo de criação
do módulo de voz e as pastas necessárias a sua execução. As pastas dic,wav,php,train,tree
e lts são resultantes do processo de produção do módulo de voz. As pastas festvox
e mbrola são necessária à execução do programa.
A pasta exemplos contém execuções previamente realizadas do programa caso
deseje-se conhecer suas saídas e para comparação com o resultado obtido.
55