Bem, dentro de 24 horas, transcreva 40 horas após o discurso gravado em um idioma surpresa.
Construa um ASR para uma linguagem surpresa l a partir de um modelo acústico pré-treinado, um dicionário de pronúncia L e um modelo de idioma L. Essa abordagem converte telefones diretamente em palavras L. Isso é menos barulhento do que usar vários ASRs treinados para fazer palavras em inglês a partir das quais as cadeias de telefone são extraídas, mescladas por ptgen e reconstituídas em palavras L.
Uma descrição completa com medições de desempenho está no ARXIV e em:
M Hasegawa-Johnson, L Rolston, C Goudeseune, Ga Levow e K Kirchhoff,
Transdução de grafema para fonema para ASR de linguagem cruzada, Stat. Lang. Discurso Proc.:3-19, 2020.
Se você ainda não possui uma versão do Kaldi mais recente que o 2016 de 30 de setembro, obtenha e crie -o seguindo as instruções em seus arquivos de instalação.
git clone https://github.com/kaldi-asr/kaldi
cd kaldi/tools; make -j $(nproc)
cd ../src; ./configure --shared && make depend -j $(nproc) && make -j $(nproc)
Coloque o reconhecedor de fonemas da Brno U. do Tecnologia ao lado do diretório S5 usual.
sudo apt-get install libopenblas-dev libopenblas-base
cd kaldi/egs/aspire
git clone https://github.com/uiuc-sst/brno-phnrec.git
cd brno-phnrec/PhnRec
make
Coloque isso ao lado do diretório s5 usual.
(O pacote nodejs é para ./sampa2ipa.js .)
sudo apt-get install nodejs
cd kaldi/egs/aspire
git clone https://github.com/uiuc-sst/asr24.git
cd asr24
cd kaldi/egs/aspire/asr24
wget -qO- http://dl.kaldi-asr.org/models/0001_aspire_chain_model.tar.gz | tar xz
steps/online/nnet3/prepare_online_decoding.sh
--mfcc-config conf/mfcc_hires.conf
data/lang_chain exp/nnet3/extractor
exp/chain/tdnn_7b exp/tdnn_7b_chain_online
utils/mkgraph.sh --self-loop-scale 1.0 data/lang_pp_test
exp/tdnn_7b_chain_online exp/tdnn_7b_chain_online/graph_pp
Em exp/ tdnn_7b_chain_online, isso constrói os arquivos phones.txt , tree , final.mdl , conf/ etc.
Isso constrói os data dos subdiretos e exp . Seu último comando mkgraph.sh pode levar 45 minutos (30 para mandarim da CTVE) e usar muita memória porque chama fstdeterminizestar em um grande modelo de idioma, como Dan Povey explica.
sox MySpeech.wav -r 8000 8khz.wav , ou ffmpeg -i MySpeech.wav -acodec pcm_s16le -ac 1 -ar 8000 8khz.wav . (Os scripts cmd.sh e path.sh dizem onde encontrar kaldi/src/online2bin/online2-wav-nnet3-latgen-faster .)
. cmd.sh && . path.sh
online2-wav-nnet3-latgen-faster
--online=false --do-endpointing=false
--frame-subsampling-factor=3
--config=exp/tdnn_7b_chain_online/conf/online.conf
--max-active=7000
--beam=15.0 --lattice-beam=6.0 --acoustic-scale=1.0
--word-symbol-table=exp/tdnn_7b_chain_online/graph_pp/words.txt
exp/tdnn_7b_chain_online/final.mdl
exp/tdnn_7b_chain_online/graph_pp/HCLG.fst
'ark:echo utterance-id1 utterance-id1|'
'scp:echo utterance-id1 8khz.wav|'
'ark:/dev/null'
wget -qO- http://kaldi-asr.org/models/0002_cvte_chain_model.tar.gz | tar xz
steps/online/nnet3/prepare_online_decoding.sh
--mfcc-config conf/mfcc_hires.conf
data/lang_chain exp/nnet3/extractor
exp/chain/tdnn_7b cvte/s5/exp/chain/tdnn
utils/mkgraph.sh --self-loop-scale 1.0 data/lang_pp_test
cvte/s5/exp/chain/tdnn cvte/s5/exp/chain/tdnn/graph_pp
$L/train_all/text coloque seqüências de palavras em L (raspadas de onde quer que), aproximadamente 10 palavras por linha, no máximo 500 mil linhas. Isso pode ser bastante barulhento, porque serão limpos. Em $L/train_all/g2aspire.txt Coloque um G2P, algumas centenas de linhas que contêm telefones grafias, whitespace e telefones de aspiros delimitados pelo espaço.
Se tiver terminadores de linha CR, converta-os em padrão em VI com %s/^M/r/g , digitando controle-V antes do ^M .
Se começar com um nascido, remova -o: vi -b g2aspire.txt e apenas x esse personagem.
Se você precisar construir o G2P, ./g2ipa2asr.py $L_wikipedia_symboltable.txt aspire2ipa.txt phoibletable.csv > $L/train_all/g2aspire.txt .
./run.sh $L fabrica um hclg.fst em cliente l../run_from_wordlist.sh $L . Veja esse script para uso.Em ifp-serv-03.ifp.illinois.edu, obtenha fala LDC e converta-a em um diretor plano de arquivos .wav de 8 kHz:
cd /ws/ifp-serv-03_1/workspace/fletcher/fletcher1/speech_data1/Russian/LDC2016E111/RUS_20160930
cd /ws/ifp-serv-03_1/workspace/fletcher/fletcher1/speech_data1/Tamil/TAM_EVAL_20170601/TAM_EVAL_20170601
cd /ws/ifp-serv-03_1/workspace/fletcher/fletcher1/speech_data1/Uzbek/LDC2016E66/UZB_20160711
mkdir /tmp/8k
for f in */AUDIO/*.flac; do sox "$f" -r 8000 -c 1 /tmp/8k/$(basename ${f%.*}.wav); done
tar cf /workspace/ifp-53_1-data/eval/8k.tar -C /tmp 8k
rm -rf /tmp/8k
Para Babel .Sph Arquivos:
cd /ws/ifp-serv-03_1/workspace/fletcher/fletcher1/speech_data1/Assamese/LDC2016E02/conversational/training/audio
tar cf /tmp/foo.tar BABEL*.sph
scp /tmp/foo.tar ifp-53:/tmp
No IFP-53,
mkdir ~/kaldi/egs/aspire/asr24/$L-8khz
cd myTmpSphDir
tar xf /tmp/foo.tar
for f in *.sph; do ~/kaldi/tools/sph2pipe_v2.5/sph2pipe -p -f rif "$f" /tmp/a.wav;
sox /tmp/a.wav -r 8000 -c 1 ~/kaldi/egs/aspire/asr24/$L-8khz/$(basename ${f%.*}.wav); done
No host que executará a transcrição, por exemplo, IFP-53:
cd kaldi/egs/aspire/asr24
wget -qO- http://www.ifp.illinois.edu/~camilleg/e/8k.tar | tar xf -
mv 8k $L-8khz
./mkscp.rb $L-8khz $(nproc) $L divide as tarefas ASR em um trabalho por núcleo da CPU, cada trabalho com aproximadamente a mesma duração de áudio.$L-8khz , o diretor de arquivos de fala de 8 kHz.$L-submit.sh ../$L-submit.sh lança esses trabalhos em paralelo.grep -h -e '^TAM_EVAL' $L/lat/*.log | sort > $L-scrips.txt (ou ... ^RUS_ , ^BABEL_ , etc.).elisa.tam-eng.eval-asr-uiuc.y3r1.v8.xml.gz , com timestamp 11 e versão 8,grep -h -e '^TAM_EVAL' tamil/lat/*.log | sort | sed -e 's/ /t/' | ./hyp2jonmay.rb /tmp/jon-tam tam 20180611 8-e 's/Ñ/N/g' .).)cat $L/lat/*.ascii | sort > $L-nbest.txt .Se suas transcrições usavam palavras sem sentido em inglês, convertem-as em telefones e, em seguida, através de uma substring Trie ou mais longa, em palavras L:
./trie-$L.rb < trie1-scrips.txt > $L-trie-scrips.txt .make multicore-$L ; espere; grep ... > $L-lcs-scrips.txt .RUS_20160930 foi transcrito em 67 minutos, 13 Mb/min, 12x mais rápido que em tempo real.
Um subconjunto de 3,1 GB de Assam LDC2016E02 foi transcrito em 440 minutos, 7 Mb/min, 6,5x em tempo real. (Isso pode ter sido mais lento porque esgotou a memória do IFP-53.)
Árabe/NEMLAR_SPEECH/NMBCN7AR, 2,2 GB (40 horas), foi transcrito em 147 minutos, 14 mb/min, 16x em tempo real. (Isso pode ter sido mais rápido, porque foram alguns arquivos longos (meia hora) em vez de muitos breves.)
TAM_EVAL_20170601 foi transcrito em 45 minutos, 21 Mb/min, 19x em tempo real.
A geração de treliças $L/lat/* levou 1,04x a mais para russo, 0,93x mais (!) Para árabe, 1,7x mais para o Tamil.