Blame view

egs/wsj/s5/utils/lang/bpe/add_final_optional_silence.sh 2.07 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
  #!/bin/bash
  . ./path.sh
  
  final_sil_prob=0.5
  
  echo "$0 $@"  # Print the command line for logging
  
  . ./utils/parse_options.sh
  
  if [ $# -ne 1 ]; then
    echo "Usage: $0  <lang>"
    echo " Add final optional silence to lexicon FSTs (L.fst and L_disambig.fst) in"
    echo " lang/ directory <lang>."
    echo " This can be useful in systems with byte-pair encoded (BPE) lexicons, in which"
    echo " the word-initial silence is part of the lexicon, so we turn off the standard"
    echo " optional silence in the lexicon"
    echo "options:"
    echo "   --final-sil-prob <final silence probability>      # default 0.5"
    exit 1;
  fi
  
  lang=$1
  
  if [ $lang/phones/final_sil_prob -nt $lang/phones/nonsilence.txt ]; then
    echo "$0 $lang/phones/final_sil_prob exists. Exiting..."
    exit 1;
  fi
  
  silphone=$(cat $lang/phones/optional_silence.int)
  
  sil_eq_zero=$(echo $(perl -e "if ( $final_sil_prob == 0.0) {print 'true';} else {print 'false';}"))
  sil_eq_one=$(echo $(perl -e "if ( $final_sil_prob == 1.0) {print 'true';} else {print 'false';}"))
  sil_lt_zero=$(echo $(perl -e "if ( $final_sil_prob < 0.0) {print 'true';} else {print 'false';}"))
  sil_gt_one=$(echo $(perl -e "if ( $final_sil_prob > 1.0) {print 'true';} else {print 'false';}"))
  
  if  $sil_lt_zero || $sil_gt_one; then
    echo "$0 final-sil-prob should be between 0.0 and 1.0. Final silence was not added."
    exit 1;
  else
    if $sil_eq_zero; then
      echo "$0 final-sil-prob = 0 => Final silence was not added."
      exit 0;
    elif $sil_eq_one; then
      ( echo "0 1 $silphone 0";
        echo "1" ) | fstcompile > $lang/final_sil.fst
    else
      log_silprob=$(echo $(perl -e "print log $final_sil_prob"))
      ( echo "0 1 $silphone 0 $log_silprob";
        echo "0 $log_silprob";
        echo "1" ) | fstcompile > $lang/final_sil.fst
    fi
    mv $lang/L.fst $lang/L.fst.orig
    mv $lang/L_disambig.fst $lang/L_disambig.fst.orig
    fstconcat $lang/L.fst.orig $lang/final_sil.fst | fstarcsort --sort_type=olabel > $lang/L.fst
    fstconcat $lang/L_disambig.fst.orig $lang/final_sil.fst | fstarcsort --sort_type=olabel > $lang/L_disambig.fst
    echo "$final_sil_prob" > $lang/phones/final_sil_prob
  fi