Bien dans les 24 heures, transcrivez 40 heures suivant le discours enregistré dans une langue surprise.
Construisez un ASR pour un langage surprise L à partir d'un modèle acoustique pré-formé, d'un dictionnaire de prononciation L et d'un modèle de langue L. Cette approche convertit directement les téléphones en mots L. Ceci est moins bruyant que d'utiliser plusieurs ASR formés en croix pour faire des mots anglais à partir desquels les chaînes de téléphone sont extraites, fusionnées par PTGEN et reconstituées en mots L.
Une description complète avec des mesures de performance est sur Arxiv et dans:
M Hasegawa-Johnson, L Rolston, C Goudeseune, Ga Levow et K Kirchhoff,
Transduction graphème à phonème pour ASR transversal, stat. Lang. Speech Proc.:3‒19, 2020.
Si vous n'avez pas déjà une version de Kaldi plus récente que le 30 sept. 2016, obtenez-le et construisez-le en suivant les instructions dans ses fichiers d'installation.
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)
Mettez BRNO U. de la reconnaissance des phonèmes de la technologie à côté du répertoire S5 habituel.
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
Mettez-le à côté du répertoire s5 habituel.
(Le package Nodejs est pour ./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
Dans exp / tdnn_7b_chain_online, cela construit les fichiers phones.txt , tree , final.mdl , conf/ , etc.
Cela construit les data des sous-répertoires et exp . Sa dernière commande mkgraph.sh peut prendre 45 minutes (30 pour CTVE Mandarin) et utiliser beaucoup de mémoire car il appelle fstdeterminizestar sur un modèle grand langage, comme l'explique Dan Povey.
sox MySpeech.wav -r 8000 8khz.wav , ou ffmpeg -i MySpeech.wav -acodec pcm_s16le -ac 1 -ar 8000 8khz.wav . (Les scripts cmd.sh et path.sh disent où trouver 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 mettez les chaînes de mots en l (grattées de partout), environ 10 mots par ligne, au plus 500 000 lignes. Ceux-ci peuvent être assez bruyants, car ils seront nettoyés. Dans $L/train_all/g2aspire.txt met un G2P, quelques centaines de lignes contenant chacune des graphème (s), des espaces blancs et des téléphones de style Aspire délimités dans l'espace.
S'il a des terminateurs de ligne CR, convertissez-les en standard en vi avec %s/^M/r/g , en tapant le contrôle-V avant le ^M .
Si cela commence par une nomenclature, retirez-le: vi -b g2aspire.txt , et juste x ce caractère.
Si vous avez besoin de construire le G2P, ./g2ipa2asr.py $L_wikipedia_symboltable.txt aspire2ipa.txt phoibletable.csv > $L/train_all/g2aspire.txt .
./run.sh $L fabrique un HCLG.fst../run_from_wordlist.sh $L Voir ce script pour l'utilisation.Sur ifp-serv-03.ifp.illinois.edu, obtenez la parole LDC et convertissez-la en un dir plat de 8 kHz .wav Files:
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
Pour les fichiers 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
Sur 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
Sur l'hôte qui exécutera la transcription, par exemple 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 divise les tâches ASR en un seul travail par noyau CPU, chaque travail avec à peu près la même durée audio.$L-8khz , le Dir de fichiers vocaux de 8 kHz.$L-submit.sh ../$L-submit.sh lance ces travaux en parallèle.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 , avec horodatage le 11 juin et la 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' .)cat $L/lat/*.ascii | sort > $L-nbest.txt .Si vos transcriptions ont utilisé des mots anglaises absurdes, convertissez-les en téléphones, puis via un trie ou une sous-chaîne commune la plus longue, en l-words:
./trie-$L.rb < trie1-scrips.txt > $L-trie-scrips.txt .make multicore-$L ; attendez; grep ... > $L-lcs-scrips.txt .RUS_20160930 a été transcrit en 67 minutes, 13 Mo / min, 12x plus vite que le temps réel.
Un sous-ensemble de 3,1 Go d'Assam LDC2016E02 a été transcrit en 440 minutes, 7 Mo / min, 6,5x en temps réel. (Cela peut avoir été plus lent car il a épuisé la mémoire de l'IFP-53.)
Arabe / nemlar_speech / nmbcn7ar, 2,2 Go (40 heures), a été transcrit en 147 minutes, 14 Mo / min, 16x en temps réel. (Cela peut avoir été plus rapide car il s'agissait de quelques fichiers longs (demi-heures) au lieu de beaucoup de brèves.)
TAM_EVAL_20170601 a été transcrit en 45 minutes, 21 Mo / min, 19x en temps réel.
Génération de réseaux $L/lat/* a pris 1,04x de plus pour le russe, 0,93 fois plus (!) Pour l'arabe, 1,7 fois plus pour le tamoul.