Bueno, dentro de las 24 horas, transcriba 40 horas de discurso grabado en un lenguaje sorpresa.
Construya un ASR para un lenguaje sorpresa L a partir de un modelo acústico previamente entrenado, un diccionario de pronunciación L y un modelo de lenguaje L. Este enfoque convierte los teléfonos directamente en palabras L. Esto es menos ruidoso que usar múltiples ASR de entrenamiento cruzado para hacer palabras en inglés a partir de las cuales se extraen las cadenas telefónicas, fusionadas por PTGEN y reconstituidas en L palabras.
Una descripción completa con las mediciones de rendimiento está en ARXIV, y en:
M Hasegawa-Johnson, L Rolston, C Goudeseune, Ga Levow y K Kirchhoff,
Transducción de grafema a fonema para ASR de idioma cruzado, Stat. Lang. Discurso Proc.:3-19, 2020.
Si aún no tiene una versión de Kaldi más nueva que el 30 de septiembre de 2016, obtenga y cree siguiendo las instrucciones en sus archivos de instalación.
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)
Ponga el reconocimiento de fonema de Brno U. de Technology junto al directorio S5 habitual.
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
Pon esto al lado del directorio s5 habitual.
(El paquete NodeJS es 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
En exp/ tdnn_7b_chain_online esto construye los archivos phones.txt , tree , final.mdl , conf/ , etc.
Esto construye los data de subdirectorios y exp . Su último comando mkgraph.sh puede tomar 45 minutos (30 para CTVE mandarina) y usar mucha memoria porque llama fstdeterminizestar en un modelo de lenguaje grande, como explica Dan Povey.
sox MySpeech.wav -r 8000 8khz.wav , o ffmpeg -i MySpeech.wav -acodec pcm_s16le -ac 1 -ar 8000 8khz.wav . (Los scripts cmd.sh y path.sh dicen dónde 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 Ponga cadenas de palabras en L (raspadas desde donde), aproximadamente 10 palabras por línea, como máximo 500k líneas. Estos pueden ser bastante ruidosos, porque serán limpiados. En $L/train_all/g2aspire.txt Pon un G2P, unos pocos cientos de líneas que contienen teléfonos de estilo de grafeme (s), espacios en blanco y de estilo Aspire delimitados espaciales.
Si tiene terminadores de línea CR, conviértalos en estándar en VI con %s/^M/r/g , escribiendo control-V antes del ^M .
Si comienza con una nacimiento, retírelo: vi -b g2aspire.txt , y solo x ese personaje fuera.
Si necesita construir el G2P, ./g2ipa2asr.py $L_wikipedia_symboltable.txt aspire2ipa.txt phoibletable.csv > $L/train_all/g2aspire.txt .
./run.sh $L hace un HCLG.FST de L-Customized../run_from_wordlist.sh $L . Vea ese script para su uso.En IFP-SERV-03.Ifp.illinois.edu, obtenga el discurso LDC y conviértelo en un directorio plano de 8 kHz .WAV Archivos:
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 archivos babel .sph:
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
En 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
En el host que ejecutará la transcripción, por ejemplo, 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 las tareas ASR en un trabajo por núcleo de CPU, cada trabajo con aproximadamente la misma duración de audio.$L-8khz , el Dir de los archivos de discurso de 8 kHz.$L-submit.sh ../$L-submit.sh lanza estos trabajos en paralelo.grep -h -e '^TAM_EVAL' $L/lat/*.log | sort > $L-scrips.txt (o ... ^RUS_ , ^BABEL_ , etc.).elisa.tam-eng.eval-asr-uiuc.y3r1.v8.xml.gz , con marca de tiempo el 11 de junio y la versión 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 .Si sus transcripciones usaban palabras en inglés sin sentido, conviértalas en teléfonos y luego, a través de una subcadena común o más larga, en las palabras L:
./trie-$L.rb < trie1-scrips.txt > $L-trie-scrips.txt .make multicore-$L ; esperar; grep ... > $L-lcs-scrips.txt .RUS_20160930 se transcribió en 67 minutos, 13 MB/min, 12 veces más rápido que en tiempo real.
Se transcribió un subconjunto de 3.1 GB de Assam LDC2016E02 en 440 minutos, 7 MB/min, 6.5x en tiempo real. (Esto puede haber sido más lento porque agotó la memoria de IFP-53).
Árabe/nemlar_speech/nmbcn7ar, 2.2 GB (40 horas), se transcribió en 147 minutos, 14 mb/min, 16x en tiempo real. (Esto puede haber sido más rápido porque eran algunos archivos largos (media hora) en lugar de muchos breves).
TAM_EVAL_20170601 se transcribió en 45 minutos, 21 MB/min, 19x en tiempo real.
Generación de redes $L/lat/* Tomó 1.04x más tiempo para ruso, 0.93x más largo (!) Para árabe, 1.7 veces más para tamil.