O UFPAlign é uma ferramenta de código aberto para alinhamento fonético automático em Português Brasileiro utilizando o pacote de ferramentas Kaldi. O UFPAlign é disponibilizado como um plugin para o Praat, sendo acessível diretamente do menu do Praat e executando o alinhamento a partir de um arquivo de áudio e sua transcrição ortográfica com algumas poucas etapas manuais. O resultado é um TextGrid multi-nível contendo fonemas, sílabas, palavras, transcrições fonéticas e ortográficas conforme a figura abaixo.
🇬🇧 Check the documentation in English
Aqui, assume-se uma instalação em um sistema operacional
baseado no Debian, então o gerenciador de pacotes padrão será o apt
.
Kaldi
Primeiro, clona a versão mais atual do Kaldi do GitHub digitando no terminal:
$ git clone https://github.com/kaldi-asr/kaldi
O próximo passo é a instalação do tools
do Kaldi. No diretório
kaldi/tools/
, verifica se algum pré-requisito do Kaldi ainda precisa ser
instalado:
$ cd kaldi/tools
$ extras/check_dependencies.sh
A seguir, assumindo que tenhas 4 CPUs disponíveis na tua máquina, executa o seguinte comando:
$ make -j 4
O último pacote a ser instalado é a OpenBLAS, uma biblioteca open-source de álgebra linear que pode ser utilizada no lugar da Intel MKL. Cuidado que isso irá utilizar todos os cores da tua máquina, até mesmo as hyperthreads caso o processador as suporte.
$ extras/install_openblas.sh
Finalmente, podes intalar o Kaldi src
. Para o UFPAlign, o suporte ao CUDA não
é necessário.
$ cd kaldi/src
$ ./configure --shared
$ make depend -j 4
$ make -j 4
Para testar se a instalação do Kaldi foi bem-sucedida, podes executar os
scripts do corpus yes/no
. A execução é rápida, pois o conjunto de dados é
muito pequeno e o pipeline apenas treina e decodifica um modelo baseado em
monofones.
$ cd kaldi/egs/yesno/s5
$ bash run.sh
A última linha da execução deverá printar a taxa de erro por palavra (WER):
%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10_0.0
Praat
Em ambientes Linux, podes instalar o Praat usando o apt-get
rodando o comando:
$ sudo apt-get install praat
Ou podes baixar o executável 64-bit na página de download do
Praat. Depois de
baixá-lo, deves descompactar dentro de uma pasta. Pronto, apenas clica no
executável para usar o Praat. O *.tar.gz
pode ser deletado.
Dependencias do Python
Outras dependencias podem ser instaladas com o `pip`:$ pip install -r requirements.txt
Para usar o plugin, abre o menu New
e clique na opção UFPAlign
, a seguinte
janela inicial será exibido. Clica nos botões Choose...
para selecionar o
caminho para o diretório raiz do Kaldi, um arquivo de áudio e
sua correspondente transcrição ortográfica. Podes também escolher a
arquitetura do modelo acústico que será usado para realizar o alinhamento.
Após selecioná-los, clica no botão Alinhar
. Isso deve demorar um pouco.
Quando o alinhamento é concluído com sucesso, o alinhador oferece a opção de exibir imediatamente o TextGrid resultante na interface do Praat ou prosseguir para alinhar um novo arquivo de áudio.
A figura no início desse documento mostra o editor de TextGrid do Praat exibindo uma forma de onda do arquivo de áudio seguida por seu espectrograma e o TextGrid multicamadas resultante de alinhamento contendo cinco camadas: fonemas, sílabas, palavras, transcrição fonética e transcrição ortográfica, respectivamente.
O editor TextGrid do Praat plota a forma de onda e o espectrograma do arquivo de áudio, o que significa que esses dados não fazem parte do conteúdo do arquivo TextGrid. O Kaldi fornece os traços azuis verticais, que correspondem às marcas de tempo, enquanto a biblioteca de NLP do FalaBrasil fornece as transcrições fonéticas e silábicas.
Basicamente tens de executar o arquivo ufpalign.sh
. Sem nenhum argumento, ele
printa uma mensagem de ajuda. O comando abaixo funciona perfeitamente
utilizando o modelo monofone:
$ KALDI_ROOT=$HOME/kaldi \
bash ufpalign.sh demo/ex.wav demo/ex.txt mono
O arquivo demo/M-001.log
contém um exemplo de saída
completa do comando funcionando.
Mais detalhes no diretório docker/execution
.
Com o intuito de prover um nível mínimo de reproducibilidade dos resultados,
o diretório simulation
foi criado com scripts para executar o MFA e outros
alinhadores mais antigos baseados no HTK sobre a mesma base de teste, a fim de
avaliar a "acurácia" do UFPAlign por comparação.
Recomenda-se o uso da imagem docker em docker/simulation
.
Se utilizares qualquer recurso disponível nesse repositório, podes nos citar com a seguinte referência:
Batista, C., Dias, A.L. & Neto, N. Free resources for forced phonetic alignment in Brazilian Portuguese based on Kaldi toolkit. EURASIP J. Adv. Signal Process. 2022, 11 (2022). https://doi.org/10.1186/s13634-022-00844-9
@article{Batista22a,
author = {Batista, Cassio and Dias, Ana Larissa and Neto, Nelson},
title = {Free resources for forced phonetic alignment in Brazilian Portuguese based on Kaldi toolkit},
journal = {EURASIP Journal on Advances in Signal Processing},
year = {2022},
month = {Feb},
day = {19},
volume = {2022},
number = {1},
pages = {11},
issn = {1687-6180},
doi = {10.1186/s13634-022-00844-9},
url = {https://doi.org/10.1186/s13634-022-00844-9}
}
Ver também: repositório do FalaBrasil para treino de modelos acústicos com o Kaldi.
Grupo FalaBrasil (2025) - https://ufpafalabrasil.gitlab.io/
Universidade Federal do Pará (UFPA) - https://portal.ufpa.br/
Cassio T Batista - https://cassiotbatista.github.io
Ana Larissa Dias - larissa.engcomp@gmail.com