data.sh 3.3 KB
Newer Older
1
#!/bin/bash
2 3 4 5 6 7 8 9 10

stage=-1
stop_stage=100

# bpemode (unigram or bpe)
nbpe=5000
bpemode=unigram
bpeprefix="data/bpe_${bpemode}_${nbpe}"

11 12 13 14 15
stride_ms=10
window_ms=25
sample_rate=16000
feat_dim=80

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
source ${MAIN_ROOT}/utils/parse_options.sh


mkdir -p data
TARGET_DIR=${MAIN_ROOT}/examples/dataset
mkdir -p ${TARGET_DIR}

if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then
    # download data, generate manifests
    python3 ${TARGET_DIR}/librispeech/librispeech.py \
    --manifest_prefix="data/manifest" \
    --target_dir="${TARGET_DIR}/librispeech" \
    --full_download="True"

    if [ $? -ne 0 ]; then
        echo "Prepare LibriSpeech failed. Terminated."
        exit 1
    fi

35 36
    for sub in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do
        mv data/manifest.${sub} data/manifest.${sub}.raw
37 38 39
    done

    rm -rf data/manifest.train.raw data/manifest.dev.raw  data/manifest.test.raw
40 41
    for sub in train-clean-100 train-clean-360 train-other-500; do
        cat data/manifest.${sub}.raw >> data/manifest.train.raw
42 43
    done

44 45
    for sub in dev-clean dev-other; do
        cat data/manifest.${sub}.raw >> data/manifest.dev.raw
46 47
    done

48 49
    for sub in test-clean test-other; do
        cat data/manifest.${sub}.raw >> data/manifest.test.raw
50 51 52 53 54 55 56 57 58
    done
fi

if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
    # compute mean and stddev for normalizer
    num_workers=$(nproc)
    python3 ${MAIN_ROOT}/utils/compute_mean_std.py \
    --manifest_path="data/manifest.train.raw" \
    --num_samples=-1 \
H
Hui Zhang 已提交
59
    --spectrum_type="fbank" \
60
    --feat_dim=${feat_dim} \
61
    --delta_delta=false \
62 63 64
    --sample_rate=${sample_rate} \
    --stride_ms=${stride_ms} \
    --window_ms=${window_ms} \
65 66 67 68 69 70 71 72 73 74
    --use_dB_normalization=False \
    --num_workers=${num_workers} \
    --output_path="data/mean_std.json"

    if [ $? -ne 0 ]; then
        echo "Compute mean and stddev failed. Terminated."
        exit 1
    fi
fi

H
Hui Zhang 已提交
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
    # build vocabulary
    python3 ${MAIN_ROOT}/utils/build_vocab.py \
    --unit_type "spm" \
    --spm_vocab_size=${nbpe} \
    --spm_mode ${bpemode} \
    --spm_model_prefix ${bpeprefix} \
    --vocab_path="data/vocab.txt" \
    --manifest_paths="data/manifest.train.raw"

    if [ $? -ne 0 ]; then
        echo "Build vocabulary failed. Terminated."
        exit 1
    fi
fi
90 91 92

if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
    # format manifest with tokenids, vocab size
93
    for sub in train dev test dev-clean dev-other test-clean test-other; do
94 95 96 97 98 99
    {
        python3 ${MAIN_ROOT}/utils/format_data.py \
        --cmvn_path "data/mean_std.json" \
        --unit_type "spm" \
        --spm_model_prefix ${bpeprefix} \
        --vocab_path="data/vocab.txt" \
100 101
        --manifest_path="data/manifest.${sub}.raw" \
        --output_path="data/manifest.${sub}"
102 103 104 105 106 107 108 109

        if [ $? -ne 0 ]; then
            echo "Formt mnaifest failed. Terminated."
            exit 1
        fi
    }&
    done
    wait
110 111 112 113 114 115 116 117 118 119

    for sub in train dev; do
        mv data/manifest.${sub} data/manifest.${sub}.fmt
    done
fi

if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then
    for sub in train dev; do
        remove_longshortdata.py --maxframes 3000 --maxchars 400 --stride_ms ${stride_ms} data/manifest.${sub}.fmt data/manifest.${sub}
    done
120 121 122 123
fi

echo "LibriSpeech Data preparation done."
exit 0