Blame view
egs/voxforge/s5/run.sh
9.14 KB
8dcb6dfcb first commit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
#!/bin/bash # Copyright 2012 Vassil Panayotov # Apache 2.0 # NOTE: You will want to download the data set first, before executing this script. # This can be done for example by: # 1. Setting the variable DATA_ROOT in path.sh to point to a # directory with enough free space (at least 20-25GB # currently (Feb 2014)) # 2. Running "getdata.sh" # The second part of this script comes mostly from egs/rm/s5/run.sh # with some parameters changed . ./path.sh || exit 1 # If you have cluster of machines running GridEngine you may want to # change the train and decode commands in the file below . ./cmd.sh || exit 1 # The number of parallel jobs to be started for some parts of the recipe # Make sure you have enough resources(CPUs and RAM) to accomodate this number of jobs njobs=2 # This recipe can select subsets of VoxForge's data based on the "Pronunciation dialect" # field in VF's etc/README files. To select all dialects, set this to "English" dialects="((American)|(British)|(Australia)|(Zealand))" # The number of randomly selected speakers to be put in the test set nspk_test=20 # Test-time language model order lm_order=2 # Word position dependent phones? pos_dep_phones=true # The directory below will be used to link to a subset of the user directories # based on various criteria(currently just speaker's accent) selected=${DATA_ROOT}/selected # The user of this script could change some of the above parameters. Example: # /bin/bash run.sh --pos-dep-phones false . utils/parse_options.sh || exit 1 [[ $# -ge 1 ]] && { echo "Unexpected arguments"; exit 1; } # Select a subset of the data to use # WARNING: the destination directory will be deleted if it already exists! local/voxforge_select.sh --dialect $dialects \ ${DATA_ROOT}/extracted ${selected} || exit 1 # Mapping the anonymous speakers to unique IDs local/voxforge_map_anonymous.sh ${selected} || exit 1 # Initial normalization of the data local/voxforge_data_prep.sh --nspk_test ${nspk_test} ${selected} || exit 1 # Prepare ARPA LM and vocabulary using SRILM local/voxforge_prepare_lm.sh --order ${lm_order} || exit 1 # Prepare the lexicon and various phone lists # Pronunciations for OOV words are obtained using a pre-trained Sequitur model local/voxforge_prepare_dict.sh || exit 1 # Prepare data/lang and data/local/lang directories utils/prepare_lang.sh --position-dependent-phones $pos_dep_phones \ data/local/dict '!SIL' data/local/lang data/lang || exit 1 # Prepare G.fst and data/{train,test} directories local/voxforge_format_data.sh || exit 1 # Now make MFCC features. # mfccdir should be some place with a largish disk where you # want to store MFCC features. mfccdir=${DATA_ROOT}/mfcc for x in train test; do steps/make_mfcc.sh --cmd "$train_cmd" --nj $njobs \ data/$x exp/make_mfcc/$x $mfccdir || exit 1; steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x $mfccdir || exit 1; done # Train monophone models on a subset of the data utils/subset_data_dir.sh data/train 1000 data/train.1k || exit 1; steps/train_mono.sh --nj $njobs --cmd "$train_cmd" data/train.1k data/lang exp/mono || exit 1; # Monophone decoding utils/mkgraph.sh data/lang_test exp/mono exp/mono/graph || exit 1 # note: local/decode.sh calls the command line once for each # test, and afterwards averages the WERs into (in this case # exp/mono/decode/ steps/decode.sh --config conf/decode.config --nj $njobs --cmd "$decode_cmd" \ exp/mono/graph data/test exp/mono/decode # Get alignments from monophone system. steps/align_si.sh --nj $njobs --cmd "$train_cmd" \ data/train data/lang exp/mono exp/mono_ali || exit 1; # train tri1 [first triphone pass] steps/train_deltas.sh --cmd "$train_cmd" \ 2000 11000 data/train data/lang exp/mono_ali exp/tri1 || exit 1; # decode tri1 utils/mkgraph.sh data/lang_test exp/tri1 exp/tri1/graph || exit 1; steps/decode.sh --config conf/decode.config --nj $njobs --cmd "$decode_cmd" \ exp/tri1/graph data/test exp/tri1/decode #draw-tree data/lang/phones.txt exp/tri1/tree | dot -Tps -Gsize=8,10.5 | ps2pdf - tree.pdf # align tri1 steps/align_si.sh --nj $njobs --cmd "$train_cmd" \ --use-graphs true data/train data/lang exp/tri1 exp/tri1_ali || exit 1; # train tri2a [delta+delta-deltas] steps/train_deltas.sh --cmd "$train_cmd" 2000 11000 \ data/train data/lang exp/tri1_ali exp/tri2a || exit 1; # decode tri2a utils/mkgraph.sh data/lang_test exp/tri2a exp/tri2a/graph steps/decode.sh --config conf/decode.config --nj $njobs --cmd "$decode_cmd" \ exp/tri2a/graph data/test exp/tri2a/decode # train and decode tri2b [LDA+MLLT] steps/train_lda_mllt.sh --cmd "$train_cmd" 2000 11000 \ data/train data/lang exp/tri1_ali exp/tri2b || exit 1; utils/mkgraph.sh data/lang_test exp/tri2b exp/tri2b/graph steps/decode.sh --config conf/decode.config --nj $njobs --cmd "$decode_cmd" \ exp/tri2b/graph data/test exp/tri2b/decode # Align all data with LDA+MLLT system (tri2b) steps/align_si.sh --nj $njobs --cmd "$train_cmd" --use-graphs true \ data/train data/lang exp/tri2b exp/tri2b_ali || exit 1; # Do MMI on top of LDA+MLLT. steps/make_denlats.sh --nj $njobs --cmd "$train_cmd" \ data/train data/lang exp/tri2b exp/tri2b_denlats || exit 1; steps/train_mmi.sh data/train data/lang exp/tri2b_ali exp/tri2b_denlats exp/tri2b_mmi || exit 1; steps/decode.sh --config conf/decode.config --iter 4 --nj $njobs --cmd "$decode_cmd" \ exp/tri2b/graph data/test exp/tri2b_mmi/decode_it4 steps/decode.sh --config conf/decode.config --iter 3 --nj $njobs --cmd "$decode_cmd" \ exp/tri2b/graph data/test exp/tri2b_mmi/decode_it3 # Do the same with boosting. steps/train_mmi.sh --boost 0.05 data/train data/lang \ exp/tri2b_ali exp/tri2b_denlats exp/tri2b_mmi_b0.05 || exit 1; steps/decode.sh --config conf/decode.config --iter 4 --nj $njobs --cmd "$decode_cmd" \ exp/tri2b/graph data/test exp/tri2b_mmi_b0.05/decode_it4 || exit 1; steps/decode.sh --config conf/decode.config --iter 3 --nj $njobs --cmd "$decode_cmd" \ exp/tri2b/graph data/test exp/tri2b_mmi_b0.05/decode_it3 || exit 1; # Do MPE. steps/train_mpe.sh data/train data/lang exp/tri2b_ali exp/tri2b_denlats exp/tri2b_mpe || exit 1; steps/decode.sh --config conf/decode.config --iter 4 --nj $njobs --cmd "$decode_cmd" \ exp/tri2b/graph data/test exp/tri2b_mpe/decode_it4 || exit 1; steps/decode.sh --config conf/decode.config --iter 3 --nj $njobs --cmd "$decode_cmd" \ exp/tri2b/graph data/test exp/tri2b_mpe/decode_it3 || exit 1; ## Do LDA+MLLT+SAT, and decode. steps/train_sat.sh 2000 11000 data/train data/lang exp/tri2b_ali exp/tri3b || exit 1; utils/mkgraph.sh data/lang_test exp/tri3b exp/tri3b/graph || exit 1; steps/decode_fmllr.sh --config conf/decode.config --nj $njobs --cmd "$decode_cmd" \ exp/tri3b/graph data/test exp/tri3b/decode || exit 1; # Align all data with LDA+MLLT+SAT system (tri3b) steps/align_fmllr.sh --nj $njobs --cmd "$train_cmd" --use-graphs true \ data/train data/lang exp/tri3b exp/tri3b_ali || exit 1; ## MMI on top of tri3b (i.e. LDA+MLLT+SAT+MMI) steps/make_denlats.sh --config conf/decode.config \ --nj $njobs --cmd "$train_cmd" --transform-dir exp/tri3b_ali \ data/train data/lang exp/tri3b exp/tri3b_denlats || exit 1; steps/train_mmi.sh data/train data/lang exp/tri3b_ali exp/tri3b_denlats exp/tri3b_mmi || exit 1; steps/decode_fmllr.sh --config conf/decode.config --nj $njobs --cmd "$decode_cmd" \ --alignment-model exp/tri3b/final.alimdl --adapt-model exp/tri3b/final.mdl \ exp/tri3b/graph data/test exp/tri3b_mmi/decode || exit 1; # Do a decoding that uses the exp/tri3b/decode directory to get transforms from. steps/decode.sh --config conf/decode.config --nj $njobs --cmd "$decode_cmd" \ --transform-dir exp/tri3b/decode exp/tri3b/graph data/test exp/tri3b_mmi/decode2 || exit 1; #first, train UBM for fMMI experiments. steps/train_diag_ubm.sh --silence-weight 0.5 --nj $njobs --cmd "$train_cmd" \ 250 data/train data/lang exp/tri3b_ali exp/dubm3b # Next, various fMMI+MMI configurations. steps/train_mmi_fmmi.sh --learning-rate 0.0025 \ --boost 0.1 --cmd "$train_cmd" data/train data/lang exp/tri3b_ali exp/dubm3b exp/tri3b_denlats \ exp/tri3b_fmmi_b || exit 1; for iter in 3 4 5 6 7 8; do steps/decode_fmmi.sh --nj $njobs --config conf/decode.config --cmd "$decode_cmd" --iter $iter \ --transform-dir exp/tri3b/decode exp/tri3b/graph data/test exp/tri3b_fmmi_b/decode_it$iter & done steps/train_mmi_fmmi.sh --learning-rate 0.001 \ --boost 0.1 --cmd "$train_cmd" data/train data/lang exp/tri3b_ali exp/dubm3b exp/tri3b_denlats \ exp/tri3b_fmmi_c || exit 1; for iter in 3 4 5 6 7 8; do steps/decode_fmmi.sh --nj $njobs --config conf/decode.config --cmd "$decode_cmd" --iter $iter \ --transform-dir exp/tri3b/decode exp/tri3b/graph data/test exp/tri3b_fmmi_c/decode_it$iter & done # for indirect one, use twice the learning rate. steps/train_mmi_fmmi_indirect.sh --learning-rate 0.002 --schedule "fmmi fmmi fmmi fmmi mmi mmi mmi mmi" \ --boost 0.1 --cmd "$train_cmd" data/train data/lang exp/tri3b_ali exp/dubm3b exp/tri3b_denlats \ exp/tri3b_fmmi_d || exit 1; for iter in 3 4 5 6 7 8; do steps/decode_fmmi.sh --nj $njobs --config conf/decode.config --cmd "$decode_cmd" --iter $iter \ --transform-dir exp/tri3b/decode exp/tri3b/graph data/test exp/tri3b_fmmi_d/decode_it$iter & done local/run_sgmm2.sh --nj $njobs |