[scripts,egs] fixed issues in multilingual training with --use-ivector option (#1828)
authorpegahgh <pegahgh@gmail.com>
Thu, 17 Aug 2017 21:39:06 +0000 (17:39 -0400)
committerDaniel Povey <dpovey@gmail.com>
Thu, 17 Aug 2017 21:39:06 +0000 (14:39 -0700)
egs/babel_multilang/s5/local/nnet3/run_tdnn_multilingual.sh
egs/wsj/s5/steps/nnet3/multilingual/combine_egs.sh

index 6504f98c59141f96af130c6f29d34cc96376bd38..5b05efb81ed2143706b7c5d31fad1c5ceb3540c0 100755 (executable)
@@ -60,7 +60,6 @@ dir=exp/nnet3/multi_bnf
 [ ! -f local.conf ] && echo 'the file local.conf does not exist! Read README.txt for more details.' && exit 1;
 . local.conf || exit 1;
 
 [ ! -f local.conf ] && echo 'the file local.conf does not exist! Read README.txt for more details.' && exit 1;
 . local.conf || exit 1;
 
-
 num_langs=${#lang_list[@]}
 feat_suffix=_hires      # The feature suffix describing features used in
                         # multilingual training
 num_langs=${#lang_list[@]}
 feat_suffix=_hires      # The feature suffix describing features used in
                         # multilingual training
@@ -158,6 +157,7 @@ if $use_ivector; then
   done
 fi
 
   done
 fi
 
+
 for lang_index in `seq 0 $[$num_langs-1]`; do
   multi_data_dirs[$lang_index]=data/${lang_list[$lang_index]}/train${suffix}${feat_suffix}
   multi_egs_dirs[$lang_index]=exp/${lang_list[$lang_index]}/nnet3${nnet3_affix}/egs${feat_suffix}${ivector_suffix}
 for lang_index in `seq 0 $[$num_langs-1]`; do
   multi_data_dirs[$lang_index]=data/${lang_list[$lang_index]}/train${suffix}${feat_suffix}
   multi_egs_dirs[$lang_index]=exp/${lang_list[$lang_index]}/nnet3${nnet3_affix}/egs${feat_suffix}${ivector_suffix}
@@ -165,6 +165,7 @@ for lang_index in `seq 0 $[$num_langs-1]`; do
   multi_ivector_dirs[$lang_index]=exp/${lang_list[$lang_index]}/nnet3${nnet3_affix}/ivectors_train${suffix}${ivec_feat_suffix}${ivector_suffix}
 done
 
   multi_ivector_dirs[$lang_index]=exp/${lang_list[$lang_index]}/nnet3${nnet3_affix}/ivectors_train${suffix}${ivec_feat_suffix}${ivector_suffix}
 done
 
+
 if $use_ivector; then
   ivector_dim=$(feat-to-dim scp:${multi_ivector_dirs[0]}/ivector_online.scp -) || exit 1;
 else
 if $use_ivector; then
   ivector_dim=$(feat-to-dim scp:${multi_ivector_dirs[0]}/ivector_online.scp -) || exit 1;
 else
@@ -179,15 +180,21 @@ if [ $stage -le 8 ]; then
     bnf_dim=1024
   fi
   mkdir -p $dir/configs
     bnf_dim=1024
   fi
   mkdir -p $dir/configs
+  ivector_node_xconfig=""
+  ivector_to_append=""
+  if $use_ivector; then
+    ivector_node_xconfig="input dim=$ivector_dim name=ivector"
+    ivector_to_append=", ReplaceIndex(ivector, t, 0)"
+  fi
   cat <<EOF > $dir/configs/network.xconfig
   cat <<EOF > $dir/configs/network.xconfig
-  input dim=$ivector_dim name=ivector
+  $ivector_node_xconfig
   input dim=$feat_dim name=input
 
   # please note that it is important to have input layer with the name=input
   # as the layer immediately preceding the fixed-affine-layer to enable
   # the use of short notation for the descriptor
   # the first splicing is moved before the lda layer, so no splicing here
   input dim=$feat_dim name=input
 
   # please note that it is important to have input layer with the name=input
   # as the layer immediately preceding the fixed-affine-layer to enable
   # the use of short notation for the descriptor
   # the first splicing is moved before the lda layer, so no splicing here
-  relu-renorm-layer name=tdnn1 input=Append(input@-2,input@-1,input,input@1,input@2,ReplaceIndex(ivector, t, 0)) dim=1024
+  relu-renorm-layer name=tdnn1 input=Append(input@-2,input@-1,input,input@1,input@2$ivector_to_append) dim=1024
   relu-renorm-layer name=tdnn2 dim=1024
   relu-renorm-layer name=tdnn3 input=Append(-1,2) dim=1024
   relu-renorm-layer name=tdnn4 input=Append(-3,3) dim=1024
   relu-renorm-layer name=tdnn2 dim=1024
   relu-renorm-layer name=tdnn3 input=Append(-1,2) dim=1024
   relu-renorm-layer name=tdnn4 input=Append(-3,3) dim=1024
@@ -245,6 +252,10 @@ if [ $stage -le 10 ] && [ ! -z $megs_dir ]; then
 fi
 
 if [ $stage -le 11 ]; then
 fi
 
 if [ $stage -le 11 ]; then
+  common_ivec_dir=
+  if $use_ivector;then
+    common_ivec_dir=${multi_ivector_dirs[0]}
+  fi
   steps/nnet3/train_raw_dnn.py --stage=$train_stage \
     --cmd="$decode_cmd" \
     --feat.cmvn-opts="--norm-means=false --norm-vars=false" \
   steps/nnet3/train_raw_dnn.py --stage=$train_stage \
     --cmd="$decode_cmd" \
     --feat.cmvn-opts="--norm-means=false --norm-vars=false" \
@@ -258,7 +269,7 @@ if [ $stage -le 11 ]; then
     --trainer.max-param-change=2.0 \
     --trainer.srand=$srand \
     --feat-dir ${multi_data_dirs[0]} \
     --trainer.max-param-change=2.0 \
     --trainer.srand=$srand \
     --feat-dir ${multi_data_dirs[0]} \
-    --feat.online-ivector-dir ${multi_ivector_dirs[0]} \
+    --feat.online-ivector-dir "$common_ivec_dir" \
     --egs.dir $megs_dir \
     --use-dense-targets false \
     --targets-scp ${multi_ali_dirs[0]} \
     --egs.dir $megs_dir \
     --use-dense-targets false \
     --targets-scp ${multi_ali_dirs[0]} \
index 50148027806383fa41b626be2c81fbaf82659b6e..3826dad11a9d668b2a54e2a469393dfeff0238a7 100755 (executable)
@@ -55,13 +55,14 @@ combine_scp_list=
 
 # read paramter from $egs_dir[0]/info and cmvn_opts
 # to write in multilingual egs_dir.
 
 # read paramter from $egs_dir[0]/info and cmvn_opts
 # to write in multilingual egs_dir.
-check_params="info/feat_dim info/ivector_dim info/left_context info/right_context info/frames_per_eg info/final.ie.id cmvn_opts"
+check_params="info/feat_dim info/ivector_dim info/left_context info/right_context info/frames_per_eg cmvn_opts"
+ivec_dim=`cat ${args[0]}/info/ivector_dim`
+if [ $ivec_dim -ne 0 ];then check_params="$check_params info/final.ie.id"; fi
+
 for param in $check_params; do
 for param in $check_params; do
-  cat ${args[0]}/$param > $megs_dir/$param || exit 1;
+    cat ${args[0]}/$param > $megs_dir/$param || exit 1;
 done
 done
-cat ${args[0]}/cmvn_opts > $megs_dir/cmvn_opts || exit 1; # caution: the top-level nnet training
-                                                          # script should copy this to its
-                                                          # own dir.
+
 for lang in $(seq 0 $[$num_langs-1]);do
   multi_egs_dir[$lang]=${args[$lang]}
   for f in $required; do
 for lang in $(seq 0 $[$num_langs-1]);do
   multi_egs_dir[$lang]=${args[$lang]}
   for f in $required; do