Blame view

egs/rm/s5/local/run_dnn_convert_nnet2.sh 5.81 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
  #!/bin/bash
  
  # This script demonstrates some commands that you could run after run_dnn.sh,
  # that relate to conversion to the nnet2 model format.
  
  
  
  steps/nnet2/convert_nnet1_to_nnet2.sh exp/dnn4b_pretrain-dbn_dnn exp/dnn4b_nnet2
   
  steps/nnet2/decode.sh --nj 10 --cmd "$decode_cmd" --transform-dir exp/tri3b/decode \
     --config conf/decode.config exp/tri3b/graph data/test exp/dnn4b_nnet2/decode
  steps/nnet2/decode.sh --nj 10 --cmd "$decode_cmd" --transform-dir exp/tri3b/decode \
     --config conf/decode.config exp/tri3b/graph_ug data/test exp/dnn4b_nnet2/decode_ug
  
  # decoding results are essentially the same (any small difference is probably because
  # decode.config != decode_dnn.config).
  # %WER 1.58 [ 198 / 12533, 22 ins, 45 del, 131 sub ] exp/dnn4b_nnet2/decode/wer_3
  # %WER 1.59 [ 199 / 12533, 23 ins, 45 del, 131 sub ] exp/dnn4b_pretrain-dbn_dnn/decode/wer_3
  
  
  steps/nnet2/convert_lda_to_raw.sh exp/dnn4b_nnet2 exp/dnn4b_nnet2_raw
  steps/nnet2/decode.sh --nj 10 --cmd "$decode_cmd" \
      --feat-type raw --config conf/decode.config exp/tri3b/graph data/test exp/dnn4b_nnet2_raw/decode
  
  # This is worse because we're decoding without fMLLR.  It's OK, I just wanted to demonstrate
  # the script, which I plan to use for systems without fMLLR.
  # grep WER exp/dnn4b_nnet2_raw/decode/wer_* | utils/best_wer.sh 
  # %WER 3.84 [ 481 / 12533, 44 ins, 136 del, 301 sub ] exp/dnn4b_nnet2_raw/decode/wer_7
  
  matrix-sum scp:data/train/cmvn.scp global.cmvn
  steps/nnet2/convert_lda_to_raw.sh --global-cmvn-stats global.cmvn exp/dnn4b_nnet2 exp/dnn4b_nnet2_raw_no_cmvn
  rm global.cmvn
  steps/nnet2/decode.sh --nj 10 --cmd "$decode_cmd" \
      --feat-type raw --config conf/decode.config exp/tri3b/graph data/test exp/dnn4b_nnet2_raw_no_cmvn/decode
  # Even worse results, but this is expected due to the mismatch.
  # grep WER exp/dnn4b_nnet2_raw_no_cmvn/decode/wer_* | utils/best_wer.sh 
  # %WER 5.31 [ 666 / 12533, 76 ins, 163 del, 427 sub ] exp/dnn4b_nnet2_raw_no_cmvn/decode/wer_7
  
  
  ( # We demonstrate doing further training on top of a model initially
    # trained by Karel's tools.
    nnet-am-switch-preconditioning exp/dnn4b_nnet2/final.mdl - | \
      nnet-am-copy --learning-rate=0.001 - exp/dnn4b_nnet2/final.mdl.mod
  
    mkdir -p exp/dnn4b_nnet2_retrain
  
    steps/nnet2/get_egs.sh --samples-per-iter 200000 \
      --num-jobs-nnet 4 --splice-width 5 --cmd "$train_cmd" \
      data/train data/lang exp/tri3b_ali \
      exp/dnn4b_nnet2_retrain
  
   # options here are for GPU use.
    steps/nnet2/train_more.sh --learning-rate-factor 0.1 --cmd "$train_cmd" \
      --parallel-opts "--gpu 1" --num-threads 1  --minibatch-size 512 \
      exp/dnn4b_nnet2/final.mdl.mod exp/dnn4b_nnet2_retrain/egs exp/dnn4b_nnet2_retrain
  
    steps/nnet2/decode.sh --nj 30 --cmd "$decode_cmd" --transform-dir exp/tri3b/decode \
      --config conf/decode.config exp/tri3b/graph data/test exp/dnn4b_nnet2_retrain/decode
    steps/nnet2/decode.sh --nj 30 --cmd "$decode_cmd" --transform-dir exp/tri3b/decode \
      --config conf/decode.config exp/tri3b/graph_ug data/test exp/dnn4b_nnet2_retrain/decode_ug
   #Results for this experiment:
   #for x in exp/dnn4b_nnet2_retrain/decode*; do grep WER $x/wer_* | utils/best_wer.sh ; done
   #%WER 1.58 [ 198 / 12533, 29 ins, 38 del, 131 sub ] exp/dnn4b_nnet2_retrain/decode/wer_3
   #%WER 7.60 [ 953 / 12533, 56 ins, 168 del, 729 sub ] exp/dnn4b_nnet2_retrain/decode_ug/wer_10
  
   # vs. the following baseline (our experiment got 0.2% abs. improvement on unigram only).
   #for x in exp/dnn4b_nnet2/decode*; do grep WER $x/wer_* | utils/best_wer.sh ; done
   # %WER 1.58 [ 198 / 12533, 22 ins, 45 del, 131 sub ] exp/dnn4b_nnet2/decode/wer_3
   #%WER 7.80 [ 977 / 12533, 83 ins, 151 del, 743 sub ] exp/dnn4b_nnet2/decode_ug/wer_6
  
  )
  
  (
    # We demonstrate doing further training on top of a DBN trained
    # generatively by Karel's tools.
    mkdir -p exp/dnn4b_nnet2_dbn_in
    for f in final.mdl final.feature_transform ali_train_pdf.counts; do
      cp exp/dnn4b_pretrain-dbn_dnn/$f exp/dnn4b_nnet2_dbn_in/
    done
    cp exp/dnn4b_pretrain-dbn/6.dbn exp/dnn4b_nnet2_dbn_in/final.dbn
    steps/nnet2/convert_nnet1_to_nnet2.sh exp/dnn4b_nnet2_dbn_in exp/dnn4b_nnet2_dbn
    cp exp/tri3b/splice_opts exp/tri3b/cmvn_opts exp/tri3b/final.mat exp/tri3b/tree exp/dnn4b_nnet2_dbn/
  
  
    nnet-am-switch-preconditioning exp/dnn4b_nnet2_dbn/final.mdl - | \
      nnet-am-copy --learning-rate=0.01 - exp/dnn4b_nnet2_dbn/final.mdl.mod
  
    steps/nnet2/get_egs.sh --samples-per-iter 200000 \
       --num-jobs-nnet 4 --splice-width 5 --cmd "$train_cmd" \
       data/train data/lang exp/tri3b_ali \
        exp/dnn4b_nnet2_dbn_retrain
  
    steps/nnet2/train_more.sh --learning-rate-factor 0.1 --cmd "$train_cmd" \
      --parallel-opts "--gpu 1" --num-threads 1  --minibatch-size 512 \
      exp/dnn4b_nnet2_dbn/final.mdl.mod exp/dnn4b_nnet2_dbn_retrain/egs exp/dnn4b_nnet2_dbn_retrain
  
  
    steps/nnet2/decode.sh --nj 30 --cmd "$decode_cmd" --transform-dir exp/tri3b/decode \
      --config conf/decode.config exp/tri3b/graph data/test exp/dnn4b_nnet2_dbn_retrain/decode &
    steps/nnet2/decode.sh --nj 30 --cmd "$decode_cmd" --transform-dir exp/tri3b/decode \
      --config conf/decode.config exp/tri3b/graph_ug data/test exp/dnn4b_nnet2_dbn_retrain/decode_ug &
  
   # Here are the results (and note that we never tuned this at all, it was our first guess
   # at what might be good parameters).
   #for x in exp/dnn4b_nnet2_dbn_retrain/decode*; do grep WER $x/wer_* | utils/best_wer.sh ; done
   #%WER 1.68 [ 210 / 12533, 36 ins, 43 del, 131 sub ] exp/dnn4b_nnet2_dbn_retrain/decode/wer_3
   #%WER 7.86 [ 985 / 12533, 72 ins, 172 del, 741 sub ] exp/dnn4b_nnet2_dbn_retrain/decode_ug/wer_8
  
   # Here is the baseline... we're slightly worse than the baseline on both test scenarios.
   #for x in exp/dnn4b_nnet2/decode*; do grep WER $x/wer_* | utils/best_wer.sh ; done
   #%WER 1.58 [ 198 / 12533, 22 ins, 45 del, 131 sub ] exp/dnn4b_nnet2/decode/wer_3
   #%WER 7.80 [ 977 / 12533, 83 ins, 151 del, 743 sub ] exp/dnn4b_nnet2/decode_ug/wer_6
  )