Blame view

egs/vystadial_en/s5/run.sh 7.37 KB
8dcb6dfcb   Yannick Estève   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
  #!/bin/bash
  # Copyright Ondrej Platek Apache 2.0
  renice 20 $$
  
  # Load training parameters
  . ./env_voip_en.sh
  # Source optional config if exists
  [ -f env_voip_en_CUSTOM.sh ] && . ./env_voip_en_CUSTOM.sh
  
  . ./path.sh
  
  # If you have cluster of machines running GridEngine you may want to
  # change the train and decode commands in the file below
  . ./cmd.sh
  
  #######################################################################
  #       Preparing acoustic features, LMs and helper files             #
  #######################################################################
  
  echo " Copy the configuration files to $EXP directory."
  local/save_check.sh $EXP $WORK/*  || exit 1;
  
  local/download_en_data.sh $DATA_ROOT || exit 1;
  
  local/data_split.sh --every_n $EVERY_N $DATA_ROOT $WORK/local "$LMs" "$TEST_SETS" || exit 1
  
  local/create_LMs.sh $WORK/local $WORK/local/train/trans.txt \
      $WORK/local/test/trans.txt  $WORK/local/lm "$LMs" || exit 1
  
  local/prepare_en_transcription.sh $WORK/local $WORK/local/dict || exit 1
  
  local/create_phone_lists.sh $WORK/local/dict || exit 1
  
  utils/prepare_lang.sh $WORK/local/dict '_SIL_' $WORK/local/lang $WORK/lang || exit 1
  
  local/create_G.sh $WORK/lang "$LMs" $WORK/local/lm $WORK/local/dict/lexicon.txt || exit 1
  
  echo "Create MFCC features and storing them (Could be large)."
  for s in train $TEST_SETS ; do
      steps/make_mfcc.sh --mfcc-config common/mfcc.conf --cmd \
        "$train_cmd" --nj $njobs $WORK/local/$s $EXP/make_mfcc/$s $WORK/mfcc || exit 1;
      # Note --fake -> NO CMVN
      steps/compute_cmvn_stats.sh $fake $WORK/local/$s \
        $EXP/make_mfcc/$s $WORK/mfcc || exit 1;
  done
  
  echo "Decoding is done for each pair (TEST_SET x LMs)"
  echo "Distribute the links to MFCC feats to all LM variations."
  cp $WORK/local/train/feats.scp $WORK/train/feats.scp
  cp $WORK/local/train/cmvn.scp $WORK/train/cmvn.scp
  for s in $TEST_SETS; do
    for lm in $LMs; do
      tgt_dir=${s}_`basename "$lm"`
      echo "cp $WORK/local/$s/feats.scp $WORK/$tgt_dir/feats.scp"
      cp $WORK/local/$s/feats.scp $WORK/$tgt_dir/feats.scp
      echo "cp $WORK/local/$s/cmvn.scp $WORK/$tgt_dir/cmvn.scp"
      cp $WORK/local/$s/cmvn.scp $WORK/$tgt_dir/cmvn.scp
    done
  done
  
  #######################################################################
  #                      Training Acoustic Models                       #
  #######################################################################
  
  echo "Train monophone models on full data -> may be wastefull (can be done on subset)"
  steps/train_mono.sh  --nj $njobs --cmd "$train_cmd" $WORK/train $WORK/lang $EXP/mono || exit 1;
  
  echo "Get alignments from monophone system."
  steps/align_si.sh  --nj $njobs --cmd "$train_cmd" \
    $WORK/train $WORK/lang $EXP/mono $EXP/mono_ali || exit 1;
  
  echo "Train tri1 [first triphone pass]"
  steps/train_deltas.sh  --cmd "$train_cmd" \
    $pdf $gauss $WORK/train $WORK/lang $EXP/mono_ali $EXP/tri1 || exit 1;
  
  # draw-tree $WORK/lang/phones.txt $EXP/tri1/tree | dot -Tsvg -Gsize=8,10.5  > graph.svg
  
  echo "Align tri1"
  steps/align_si.sh  --nj $njobs --cmd "$train_cmd" \
    --use-graphs true $WORK/train $WORK/lang $EXP/tri1 $EXP/tri1_ali || exit 1;
  
  echo "Train tri2a [delta+delta-deltas]"
  steps/train_deltas.sh  --cmd "$train_cmd" $pdf $gauss \
    $WORK/train $WORK/lang $EXP/tri1_ali $EXP/tri2a || exit 1;
  
  echo "Train tri2b [LDA+MLLT]"
  steps/train_lda_mllt.sh  --cmd "$train_cmd" $pdf $gauss \
    $WORK/train $WORK/lang $EXP/tri1_ali $EXP/tri2b || exit 1;
  
  echo "Align all data with LDA+MLLT system (tri2b)"
  steps/align_si.sh  --nj $njobs --cmd "$train_cmd" \
      --use-graphs true $WORK/train $WORK/lang $EXP/tri2b $EXP/tri2b_ali || exit 1;
  
  echo "Train MMI on top of LDA+MLLT."
  steps/make_denlats.sh  --nj $njobs --cmd "$train_cmd" \
     --beam $mmi_beam --lattice-beam $mmi_lat_beam \
     $WORK/train $WORK/lang $EXP/tri2b $EXP/tri2b_denlats || exit 1;
  steps/train_mmi.sh  $WORK/train $WORK/lang $EXP/tri2b_ali $EXP/tri2b_denlats $EXP/tri2b_mmi || exit 1;
  
  echo "Train MMI on top of LDA+MLLT with boosting. train_mmi_boost is a e.g. 0.05"
  steps/train_mmi.sh  --boost ${train_mmi_boost} $WORK/train $WORK/lang \
     $EXP/tri2b_ali $EXP/tri2b_denlats $EXP/tri2b_mmi_b${train_mmi_boost} || exit 1;
  
  echo "Train MPE."
  steps/train_mpe.sh $WORK/train $WORK/lang $EXP/tri2b_ali $EXP/tri2b_denlats $EXP/tri2b_mpe || exit 1;
  
  #######################################################################
  #                       Building decoding graph                       #
  #######################################################################
  for lm in $LMs ; do
    lm=`basename "$lm"`
    utils/mkgraph.sh $WORK/lang_${lm} $EXP/mono $EXP/mono/graph_${lm} || exit 1
    utils/mkgraph.sh $WORK/lang_${lm} $EXP/tri1 $EXP/tri1/graph_${lm} || exit 1
    utils/mkgraph.sh $WORK/lang_${lm} $EXP/tri2a $EXP/tri2a/graph_${lm} || exit 1
    utils/mkgraph.sh $WORK/lang_${lm} $EXP/tri2b $EXP/tri2b/graph_${lm} || exit 1
  done
  
  
  #######################################################################
  #                              Decoding                               #
  #######################################################################
  for s in $TEST_SETS ; do
    for lm in $LMs ; do
      lm=`basename "$lm"`
      tgt_dir=${s}_`basename "$lm"`
      echo "Monophone decoding"
      # Note: steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
      # calls the command line once for each test,
      # and afterwards averages the WERs into (in this case $EXP/mono/decode/)
      steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
         --config common/decode.conf --nj $njobs --cmd "$decode_cmd" \
        $EXP/mono/graph_${lm} $WORK/${tgt_dir} $EXP/mono/decode_${tgt_dir}
      echo "Decode tri1"
      steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
         --config common/decode.conf --nj $njobs --cmd "$decode_cmd" \
        $EXP/tri1/graph_${lm} $WORK/$tgt_dir $EXP/tri1/decode_${tgt_dir}
      echo "Decode tri2a"
      steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
         --config common/decode.conf --nj $njobs --cmd "$decode_cmd" \
        $EXP/tri2a/graph_${lm} $WORK/$tgt_dir $EXP/tri2a/decode_${tgt_dir}
      echo "Decode tri2b [LDA+MLLT]"
      steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
         --config common/decode.conf --nj $njobs --cmd "$decode_cmd" \
        $EXP/tri2b/graph_${lm} $WORK/$tgt_dir $EXP/tri2b/decode_${tgt_dir}
      # Note: change --iter option to select the best model. 4.mdl == final.mdl
      echo "Decode MMI on top of LDA+MLLT."
      steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
         --config common/decode.conf --iter 4 --nj $njobs --cmd "$decode_cmd" \
        $EXP/tri2b/graph_${lm} $WORK/$tgt_dir $EXP/tri2b_mmi/decode_it4_${tgt_dir}
      echo "Decode MMI on top of LDA+MLLT with boosting. train_mmi_boost is a number e.g. 0.05"
      steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
         --config common/decode.conf --iter 4 --nj $njobs --cmd "$decode_cmd" \
        $EXP/tri2b/graph_${lm} $WORK/$tgt_dir $EXP/tri2b_mmi_b${train_mmi_boost}/decode_it4_${tgt_dir};
      echo "Decode MPE."
      steps/decode.sh --scoring-opts "--min-lmw $min_lmw --max-lmw $max_lmw" \
         --config common/decode.conf --iter 4 --nj $njobs --cmd "$decode_cmd" \
        $EXP/tri2b/graph_${lm} $WORK/$tgt_dir $EXP/tri2b_mpe/decode_it4_${tgt_dir} || exit 1;
    done
  done
  
  
  echo "Successfully trained and evaluated all the experiments"
  local/results.py $EXP | tee $EXP/results.log
  
  local/export_models.sh $TGT_MODELS $EXP $WORK/lang