add_final_optional_silence.sh
2.07 KB
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