Blame view
egs/tedlium/s5_r2/local/chain/compare_wer_general.sh
3.26 KB
8dcb6dfcb 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 |
#!/bin/bash # this script is used for comparing decoding results between systems. # e.g. local/chain/compare_wer_general.sh exp/chain_cleaned/tdnn_{c,d}_sp # For use with discriminatively trained systems you specify the epochs after a colon: # for instance, # local/chain/compare_wer_general.sh exp/chain_cleaned/tdnn_c_sp exp/chain_cleaned/tdnn_c_sp_smbr:{1,2,3} echo "# $0 $*" include_looped=false if [ "$1" == "--looped" ]; then include_looped=true shift fi used_epochs=false # this function set_names is used to separate the epoch-related parts of the name # [for discriminative training] and the regular parts of the name. # If called with a colon-free directory name, like: # set_names exp/chain_cleaned/tdnn_lstm1e_sp_bi_smbr # it will set dir=exp/chain_cleaned/tdnn_lstm1e_sp_bi_smbr and epoch_infix="" # If called with something like: # set_names exp/chain_cleaned/tdnn_d_sp_smbr:3 # it will set dir=exp/chain_cleaned/tdnn_d_sp_smbr and epoch_infix="_epoch3" set_names() { if [ $# != 1 ]; then echo "compare_wer_general.sh: internal error" exit 1 # exit the program fi dirname=$(echo $1 | cut -d: -f1) epoch=$(echo $1 | cut -s -d: -f2) if [ -z $epoch ]; then epoch_infix="" else used_epochs=true epoch_infix=_epoch${epoch} fi } echo -n "# System " for x in $*; do printf "% 10s" " $(basename $x)"; done echo strings=("# WER on dev(orig) " "# WER on dev(rescored) " "# WER on test(orig) " "# WER on test(rescored)") for n in 0 1 2 3; do echo -n "${strings[$n]}" for x in $*; do set_names $x # sets $dirname and $epoch_infix decode_names=(dev${epoch_infix} dev${epoch_infix}_rescore test${epoch_infix} test${epoch_infix}_rescore) wer=$(grep Sum $dirname/decode_${decode_names[$n]}/score*/*ys | utils/best_wer.sh | awk '{print $2}') printf "% 10s" $wer done echo if $include_looped; then echo -n "# [looped:] " for x in $*; do set_names $x # sets $dirname and $epoch_infix decode_names=(dev${epoch_infix} dev${epoch_infix}_rescore test${epoch_infix} test${epoch_infix}_rescore) wer=$(grep Sum $dirname/decode_looped_${decode_names[$n]}/score*/*ys | utils/best_wer.sh | awk '{print $2}') printf "% 10s" $wer done echo fi done if $used_epochs; then exit 0; # the diagnostics aren't comparable between regular and discriminatively trained systems. fi echo -n "# Final train prob " for x in $*; do prob=$(grep Overall $x/log/compute_prob_train.final.log | grep -v xent | awk '{printf("%.4f", $8)}') printf "% 10s" $prob done echo echo -n "# Final valid prob " for x in $*; do prob=$(grep Overall $x/log/compute_prob_valid.final.log | grep -v xent | awk '{printf("%.4f", $8)}') printf "% 10s" $prob done echo echo -n "# Final train prob (xent)" for x in $*; do prob=$(grep Overall $x/log/compute_prob_train.final.log | grep -w xent | awk '{printf("%.4f", $8)}') printf "% 10s" $prob done echo echo -n "# Final valid prob (xent)" for x in $*; do prob=$(grep Overall $x/log/compute_prob_valid.final.log | grep -w xent | awk '{printf("%.4f", $8)}') printf "% 10s" $prob done echo echo -n "# Num-params " for x in $*; do printf "% 10s" $(grep num-parameters $x/log/progress.1.log | awk '{print $2}') done echo |