-
Notifications
You must be signed in to change notification settings - Fork 0
/
run.sh
executable file
·364 lines (253 loc) · 15.1 KB
/
run.sh
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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
#!/usr/bin/env bash
stage=0
cmd="run.pl"
nj=$(nproc)
#COLLOCIAL DATA SPLITS
train_coll_dir="data/train_coll"
train_coll_30="data/train_coll_30"
train_coll_50="data/train_coll_50"
train_coll_150="data/train_coll_150"
train_coll_250="data/train_coll_250"
#ALL DATA SPLITS (COLL+MSA)
train_dir="data/train"
train_dir_500="data/train_500"
train_dir_800="data/train_800"
#TEST SET
test_dir="data/coll_dev_10"
#LANG DIRECTORIES
lang_dir="data/lang"
lang_test_dir="data/lang_test"
#DICT DIRECTORIES
dict_dir_nosp="data/local/dict_nosp"
dict_dir="data/local/dict"
#LANGUAGE MODEL DIRECTORY
lm_dir="data/local/lm/trigram"
. ./path.sh
. ./utils/parse_options.sh
################################################## Data Preparation #################################################
if [ $stage -le 0 ]; then
echo "############################################# Data Preparation ############################################"
echo "$0: Creating necessary files and preparing data."
#create wav.scp, text and utt2spk file for each of the train, dev and test set
python3 local/scripts/gen_wavscp_uttspk_text.py
#create utt2spk and fix data dir
for x in $train_dir $train_coll_dir $test_dir; do
#sort the files
sort -u -o $x/wav.scp $x/wav.scp
sort -u -o $x/text $x/text
sort -u -o $x/utt2spk $x/utt2spk
#make spk2utt file
utils/utt2spk_to_spk2utt.pl $x/utt2spk > $x/spk2utt
#fix data directory
utils/fix_data_dir.sh $x
done
fi
#####################################################################################################################
################################################## Feature Extraction ###############################################
if [ $stage -le 1 ]; then
echo "############################################# Feature Extraction ##########################################"
echo "$0: Extracting features"
for x in $train_dir $train_coll_dir $test_dir; do
#make Mel Frequency features
log_dir="$x/log"
mfcc_dir="$x/mfcc"
vad_dir="$x/vad"
segments_dir="$x/segments"
cmvn_dir="$x/cmvn"
steps/make_mfcc.sh --mfcc-config conf/mfcc.conf --nj $nj --cmd "$cmd" --write-utt2num-frames true $x $log_dir $mfcc_dir || exit 1;
#fix data directory
utils/fix_data_dir.sh $x
#compute cepstral mean and variance statistics per speaker.
steps/compute_cmvn_stats.sh $x $log_dir $cmvn_dir || exit 1;
#fix data directory
utils/fix_data_dir.sh $x
done
fi
#####################################################################################################################
############################################ Lexicon & Lang directory #########################################
if [ $stage -le 2 ]; then
echo "#################################### Lexicon & Lang directory #######################################"
echo "$0: Lexicon & Lang directory"
#LEXICON AND LM
python3 local/scripts/lm_scripts/clean_lm_data.py
sort -u -o data/local/lm/lm_corpus_word_list_asmo.txt data/local/lm/lm_corpus_word_list_asmo.txt
python3 local/scripts/gen_lex.py
#create nonsilence_phones.txt, optional_silence.txt, silence_phones.txt files
./local/scripts/create_phones.sh $dict_dir_nosp
#create files for data/lang
utils/prepare_lang.sh $dict_dir_nosp "<UNK>" data/local/lang $lang_dir || exit 1;
#create files for data/lang_test
utils/prepare_lang.sh $dict_dir_nosp "<UNK>" data/local/lang $lang_test_dir || exit 1;
fi
#####################################################################################################################
############################################# Language Model Training ###############################################
if [ $stage -le 3 ]; then
echo "######################################## Language Model Training ##########################################"
./local/scripts/train_egy_lm.sh
fi
#####################################################################################################################
################################################## Splitting Data ###################################################
if [ $stage -le 4 ]; then
echo "############################################# Splitting Data ##############################################"
echo "$0: Splitting Data"
#monophone: 33.74h
utils/subset_data_dir.sh --shortest $train_coll_dir 30000 $train_coll_30 || exit 1;
#1st tri: 52.07h
utils/subset_data_dir.sh $train_coll_dir 30000 $train_coll_50 || exit 1;
#2nd tri: 156.16h
utils/subset_data_dir.sh $train_coll_dir 90000 $train_coll_150 || exit 1;
#3rd tri: 260.23h
utils/subset_data_dir.sh $train_coll_dir 150000 $train_coll_250 || exit 1;
#5th tri: 431.05h
utils/subset_data_dir.sh $train_dir 300000 $train_dir_500 || exit 1;
#6th tri:
utils/subset_data_dir.sh $train_dir 500000 $train_dir_800 || exit 1;
fi
#####################################################################################################################
################################################ Monophone Training #################################################
if [ $stage -le 5 ]; then
echo "########################################### Monophone Training ############################################"
echo "$0: Training Monophone"
# monophone training
steps/train_mono.sh --nj $nj --cmd "$cmd" $train_coll_30 $lang_dir exp/mono || exit 1;
fi
#####################################################################################################################
############################################# First Triphone Training ###############################################
if [ $stage -le 6 ]; then
echo "######################################## First Triphone Training ##########################################"
echo "$0: FIRST triphone training"
#aligning data in data/train_coll_50 using model from exp/mono, putting alignments in exp/mono_ali
steps/align_si.sh --nj $nj --cmd "$cmd" $train_coll_50 $lang_dir exp/mono exp/mono_ali || exit 1;
#train with delta features
steps/train_deltas.sh --cmd "$cmd" 2000 10000 $train_coll_50 $lang_dir exp/mono_ali exp/tri1 || exit 1;
fi
#####################################################################################################################
############################################# Second Triphone Training ##############################################
if [ $stage -le 7 ]; then
echo "######################################## Second Triphone Training #########################################"
echo "$0: SECOND triphone training"
#aligning data in data/train using model from exp/tri1, putting alignments in exp/tri1_ali
steps/align_si.sh --nj $nj --cmd "$cmd" $train_coll_150 $lang_dir exp/tri1 exp/tri1_ali || exit 1;
#train with delta features
steps/train_deltas.sh --cmd "$cmd" 3000 30000 $train_coll_150 $lang_dir exp/tri1_ali exp/tri2 || exit 1;
fi
#####################################################################################################################
############################################# THIRD Triphone Training ##############################################
if [ $stage -le 8 ]; then
echo "######################################## THIRD Triphone Training ##########################################"
echo "$0: THIRD triphone training"
#aligning data in data/train using model from exp/tri2, putting alignments in exp/tri2_ali
steps/align_si.sh --nj $nj --cmd "$cmd" $train_coll_250 $lang_dir exp/tri2 exp/tri2_ali || exit 1;
#train with delta features
steps/train_deltas.sh --cmd "$cmd" 4000 60000 $train_coll_250 $lang_dir exp/tri2_ali exp/tri3 || exit 1;
fi
#####################################################################################################################
############################################ LDA-MLLT Triphones Training ############################################
if [ $stage -le 9 ]; then
echo "############################################ LDA-MLLT Triphones Training ############################################"
echo "$0: FOURTH triphone training"
#aligning data in data/train using model from exp/tri3, putting alignments in exp/tri3_ali
steps/align_si.sh --nj $nj --cmd "$cmd" --use-graphs true $train_coll_dir $lang_dir exp/tri3 exp/tri3_ali || exit 1;
#train LDA-MLLT triphones
steps/train_lda_mllt.sh --cmd "$cmd" 7000 100000 $train_coll_dir $lang_dir exp/tri3_ali exp/tri4 || exit 1;
#Pronunciation & Silence Probabilities
#now we compute the pronunciation and silence probabilities from training data and re-create the lang directory.
steps/get_prons.sh --cmd "$cmd" $train_coll_dir $lang_dir exp/tri4 || exit 1;
utils/dict_dir_add_pronprobs.sh --max-normalize true $dict_dir_nosp exp/tri4/pron_counts_nowb.txt exp/tri4/sil_counts_nowb.txt exp/tri4/pron_bigram_counts_nowb.txt $dict_dir || exit 1;
utils/prepare_lang.sh $dict_dir "<UNK>" data/local/lang $lang_dir || exit 1;
rm $lang_test_dir/G.fst
utils/prepare_lang.sh $dict_dir "<UNK>" data/local/lang $lang_test_dir || exit 1;
utils/format_lm.sh data/lang $lm_dir/tri_lm.o3g.kn.gz $dict_dir/lexicon.txt $lang_test_dir || exit 1;
fi
#####################################################################################################################
############################################### SAT Triphones Training ##############################################
if [ $stage -le 10 ]; then
echo "########################################## SAT Triphones Training #########################################"
echo "$0: FIFTH triphone training"
#Align LDA-MLLT triphones with FMLLR
steps/align_fmllr.sh --nj $nj --cmd "$cmd" $train_dir_500 $lang_dir exp/tri4 exp/tri4_ali || exit 1;
#Train SAT triphones
steps/train_sat_basis.sh --cmd "$cmd" 10000 150000 $train_dir_500 $lang_dir exp/tri4_ali exp/tri5
fi
#####################################################################################################################
############################################ LDA-MLLT Triphones Training ############################################
if [ $stage -le 11 ]; then
echo "####################################### LDA-MLLT Triphones Training #######################################"
echo "$0: SIXTH triphone training"
#Align SAT triphones with FMLLR
steps/align_basis_fmllr.sh --nj $nj --cmd "$cmd" $train_dir_800 $lang_dir exp/tri5 exp/tri5_ali
#train second pass of LDA-MLLT
steps/train_lda_mllt.sh --cmd "$cmd" 13000 220000 $train_dir_800 $lang_dir exp/tri5_ali exp/tri6
fi
#####################################################################################################################
############################################### SAT Triphones Training ##############################################
if [ $stage -le 12 ]; then
echo "########################################## SAT Triphones Training #########################################"
echo "$0: SEVENTH triphone training"
#Align LDA-MLLT triphones with FMLLR
steps/align_fmllr.sh --nj $nj --cmd "$cmd" $train_dir $lang_dir exp/tri6 exp/tri6_ali
#Train SAT triphones
steps/train_sat_basis.sh --cmd "$cmd" 16000 300000 $train_dir $lang_dir exp/tri6_ali exp/tri7
fi
#####################################################################################################################
############################################ LDA-MLLT Triphones Training ############################################
if [ $stage -le 13 ]; then
echo "####################################### LDA-MLLT Triphones Training #######################################"
echo "$0: EIGTH triphone training"
#Align SAT triphones with FMLLR
steps/align_basis_fmllr.sh --nj $nj --cmd "$cmd" $train_dir $lang_dir exp/tri7 exp/tri7_ali
#train third pass of LDA-MLLT
steps/train_lda_mllt.sh --cmd "$cmd" 19000 380000 $train_dir $lang_dir exp/tri7_ali exp/tri8
fi
#####################################################################################################################
############################################### SAT Triphones Training ##############################################
if [ $stage -le 14 ]; then
echo "########################################## SAT Triphones Training #########################################"
echo "$0: NINTH triphone training"
#Align LDA-MLLT triphones with FMLLR
steps/align_fmllr.sh --nj $nj --cmd "$cmd" $train_dir $lang_dir exp/tri8 exp/tri8_ali
#Train SAT triphones
steps/train_sat_basis.sh --cmd "$cmd" 22000 450000 $train_dir $lang_dir exp/tri8_ali exp/tri9
fi
#####################################################################################################################
############################################ LDA-MLLT Triphones Training ############################################
if [ $stage -le 15 ]; then
echo "####################################### LDA-MLLT Triphones Training #######################################"
echo "$0: TENTH triphone training"
#Align SAT triphones with FMLLR
steps/align_basis_fmllr.sh --nj $nj --cmd "$cmd" $train_dir $lang_dir exp/tri9 exp/tri9_ali
#train third pass of LDA-MLLT
steps/train_lda_mllt.sh --cmd "$cmd" 25000 500000 $train_dir $lang_dir exp/tri9_ali exp/tri10
fi
#####################################################################################################################
############################################### SAT Triphones Training ##############################################
if [ $stage -le 16 ]; then
echo "########################################## SAT Triphones Training #########################################"
echo "$0: ELEVENTH triphone training"
#Align LDA-MLLT triphones with FMLLR
steps/align_fmllr.sh --nj $nj --cmd "$cmd" $train_dir $lang_dir exp/tri10 exp/tri10_ali
#Train SAT triphones
steps/train_sat_basis.sh --cmd "$cmd" 28000 550000 $train_dir $lang_dir exp/tri10_ali exp/tri11
#Align SAT triphones with FMLLR
steps/align_basis_fmllr.sh --nj $nj --cmd "$cmd" $train_dir $lang_dir exp/tri11 exp/tri11_ali
echo "$0: Creating graph and Decoding"
#decoding
utils/mkgraph.sh $lang_test_dir exp/tri11 exp/tri11/graph || exit 1;
steps/decode_basis_fmllr.sh --nj $nj --cmd "$cmd" exp/tri11/graph $test_dir exp/tri11/decode_test
fi
#####################################################################################################################
#################################################### NNET Training ###################################################
if [ $stage -le 17 ]; then
echo "$0: Starting nnet training"
state=$(nvidia-smi --query | grep 'Compute Mode')
state=($state)
state=${state[3]}
if [ ! "$state" == "Exclusive_Process" ]; then
echo "Please set the compute mode to Exclusive_Process using 'nvidia-smi -c 3' "
exit 1
else
echo "Successfully set compute mode to Exclusive_Process"
fi
CUDA_VISIBLE_DEVICES=0,1 local/nnet3/run_tdnn_lstm.sh
fi
#####################################################################################################################