Innerhalb von 24 Stunden transkribieren Sie 40 Stunden aufgezeichnete Sprache in einer Überraschungssprache.
Erstellen Sie eine ASR für eine Überraschungssprache L aus einem vorgeborenen akustischen Modell, einem L-Aussprachewörterbuch und einem L-Sprachmodell. Dieser Ansatz wandelt Telefone direkt in L -Wörter um. Dies ist weniger laut als die Verwendung mehrerer Cross-ausgebildetes ASRs, um englische Wörter zu erstellen, aus denen Telefonzeichenfolgen extrahiert, durch PTGen zusammengeführt und in L-Wörter zusammengeführt werden.
Eine vollständige Beschreibung mit Leistungsmessungen finden Sie auf Arxiv und in:
M Hasegawa-Johnson, L Rolston, C Goudeseune, Ga Levow und K. Kirchhoff,
Graphem-to-Phonem-Transduktion für Cross-Sprach-ASR, STAT. Lang. Rede Proc.:3‒19, 2020.
Wenn Sie noch keine Version von Kaldi neuer als 2016 in September 2016 haben, erhalten Sie und erstellen Sie sie nach den Anweisungen in den Installationsdateien.
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)
Setzen Sie Brno U. des Phonem -Erkenntnisses der Technologie neben das übliche S5 -Verzeichnis.
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
Setzen Sie dies neben das übliche s5 -Verzeichnis.
(Die PaketnodeJS ist für ./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
In exp/ tdnn_7b_chain_online erstellt dies die Dateien phones.txt , tree , final.mdl , conf/ usw.
Dies erstellt die data und exp . Der letzte Befehl mkgraph.sh kann 45 Minuten dauern (30 für CTVE Mandarin) und viel Speicher verwenden, da es fstdeterminizestar auf einem großartigen Modell nennt, wie Dan Povey erklärt.
sox MySpeech.wav -r 8000 8khz.wav oder ffmpeg -i MySpeech.wav -acodec pcm_s16le -ac 1 -ar 8000 8khz.wav . (Die Skripte cmd.sh und path.sh sagen, wo Sie kaldi/src/online2bin/online2-wav-nnet3-latgen-faster finden.)
. 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 geben Sie Wortketten in L (wo immer von wo immer), ungefähr 10 Wörter pro Zeile, höchstens 500K -Zeilen ein. Diese mögen ziemlich laut sein, weil sie aufgeräumt werden. In $L/train_all/g2aspire.txt geben Sie einen G2P, einige hundert Zeilen mit jeweils Graphem (s), Whitespace und raumdelimitierten Telefonen im Aspire-Stil.
Wenn es CR-Linien-Terminatoren hat, konvertieren Sie sie mit %s/^M/r/g in VI, wobei die Kontrolle-V vor dem ^M tippt.
Wenn es mit einer BOM beginnt, entfernen Sie es: vi -b g2aspire.txt , und nur x dieses Zeichen weg.
Wenn Sie die G2P, ./g2ipa2asr.py $L_wikipedia_symboltable.txt aspire2ipa.txt phoibletable.csv > $L/train_all/g2aspire.txt erstellen müssen.
./run.sh $L macht einen l-kustomisierten Hclg.fst../run_from_wordlist.sh $L . Sehen Sie dieses Skript für die Verwendung.Auf IFP-Service-03.ifp.illinois.edu erhalten Sie LDC-Rede und konvertieren Sie sie in eine flache Dire mit 8 kHz .wav-Dateien:
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
Für Babel .SPH -Dateien:
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
Auf 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
Auf dem Host, der das Transkription ausführt, z. B. 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 spaltet die ASR-Aufgaben in einen Job pro CPU-Kern, jeweils bei ungefähr der gleichen Audiodauer.$L-8khz , die Dir von 8 kHz-Sprachdateien.$L-submit.sh ../$L-submit.sh startet diese Jobs parallel.grep -h -e '^TAM_EVAL' $L/lat/*.log | sort > $L-scrips.txt (oder ... ^RUS_ , ^BABEL_ usw.).elisa.tam-eng.eval-asr-uiuc.y3r1.v8.xml.gz , mit Timestamp am 11. Juni und Version 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' anschließen.)cat $L/lat/*.ascii | sort > $L-nbest.txt .Wenn Ihre Transkriptionen unsinnige englische Wörter verwendeten, wandeln Sie sie in Telefone um und dann über einen Trie oder längsten gemeinsamen Substring in L-Wörter:
./trie-$L.rb < trie1-scrips.txt > $L-trie-scrips.txt .make multicore-$L ; Warten; grep ... > $L-lcs-scrips.txt .RUS_20160930 wurde in 67 Minuten transkribiert, 13 MB/min, 12x schneller als Echtzeit.
Eine 3,1 -GB -Teilmenge von Assam LDC2016E02 wurde in 440 Minuten, 7 MB/min, 6,5x Echtzeit transkribiert. (Dies mag langsamer gewesen sein, weil es das Gedächtnis von IFP-53 erschöpft hat.)
Arabisch/nemlar_speech/nmbcn7ar, 2,2 GB (40 Stunden), wurde in 147 Minuten, 14 MB/min, 16x Echtzeit transkribiert. (Dies mag schneller gewesen sein, da es einige lange (halbstündige) Dateien anstelle vieler kurzer Dateien waren.)
TAM_EVAL_20170601 wurde in 45 Minuten, 21 MB/min, 19x Echtzeit transkribiert.
Die Erzeugung von Gitter $L/lat/* dauerte 1,04x länger für Russisch, 0,93x länger (!) Für Arabisch, 1,7x länger für Tamil.