O UFPAlign é uma ferramenta de código aberto para alinhamento fonético automático do 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
Se houver algum requisito faltando, o comando deve te informar o passo para
instalá-lo. O passo seguinte é a compilação dos requisitos com o make
:
$ make
Se tiveres várias CPUs e quiseres acelerar as coisas, podes rodar o passo
anterior paralelamente usando o parâmetro -j
. Por exemplo, para usar 4 CPUs:
$ 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
.
$ 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 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 próprio editor TextGrid do Praat plota a forma de onda e o espectrograma do arquivo de áudio, esta informação não é 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. Decidindo abrir imediatamente o TextGrid resultante na interface Praat ou não, o arquivo TextGrid será salvo dentro de um diretório chamado textgrid no diretório inicial com o mesmo nome do arquivo de áudio que escolheste alinhar.
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, por favor nos cite 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}
}
Verifica também o repositório do FalaBrasil para treino de modelos acústicos com o Kaldi.
Grupo FalaBrasil (2024) - https://ufpafalabrasil.gitlab.io/
Universidade Federal do Pará (UFPA) - https://portal.ufpa.br/
Cassio Batista - https://cassiotbatista.github.io
Larissa Dias - larissa.engcomp@gmail.com