From f3cecf88092e7ce29f401b287c1dbcdf2433a229 Mon Sep 17 00:00:00 2001 From: Hui Zhang Date: Thu, 29 Apr 2021 10:11:11 +0000 Subject: [PATCH] spm demo; librisppech scripts and confs --- examples/aishell/.gitignore | 4 +- examples/aishell/s1/.gitignore | 3 + examples/librispeech/.gitignore | 2 + examples/librispeech/s1/.gitignore | 3 + .../librispeech/s1/conf/augmentation.json | 34 ++++++ .../librispeech/s1/conf/chunk_confermer.yaml | 115 ++++++++++++++++++ .../s1/conf/chunk_transformer.yaml | 108 ++++++++++++++++ examples/librispeech/s1/conf/conformer.yaml | 111 +++++++++++++++++ examples/librispeech/s1/conf/transformer.yaml | 106 ++++++++++++++++ examples/librispeech/s1/local/avg.sh | 23 ++++ examples/librispeech/s1/local/data.sh | 90 ++++++++++++++ .../librispeech/s1/local/download_lm_en.sh | 20 +++ examples/librispeech/s1/local/export.sh | 24 ++++ examples/librispeech/s1/local/test.sh | 37 ++++++ examples/librispeech/s1/local/train.sh | 31 +++++ examples/librispeech/s1/path.sh | 14 +++ examples/librispeech/s1/run.sh | 20 +++ examples/spm/.gitignore | 1 + examples/spm/README.md | 5 + examples/spm/path.sh | 10 ++ examples/spm/run.sh | 40 ++++++ examples/spm/text | 10 ++ examples/tiny/s0/local/data.sh | 1 - examples/tiny/s1/run.sh | 2 +- examples/tiny/s1/train.profile | Bin 0 -> 180556 bytes 25 files changed, 810 insertions(+), 4 deletions(-) create mode 100644 examples/aishell/s1/.gitignore create mode 100644 examples/librispeech/s1/.gitignore create mode 100644 examples/librispeech/s1/conf/augmentation.json create mode 100644 examples/librispeech/s1/conf/chunk_confermer.yaml create mode 100644 examples/librispeech/s1/conf/chunk_transformer.yaml create mode 100644 examples/librispeech/s1/conf/conformer.yaml create mode 100644 examples/librispeech/s1/conf/transformer.yaml create mode 100755 examples/librispeech/s1/local/avg.sh create mode 100755 examples/librispeech/s1/local/data.sh create mode 100755 examples/librispeech/s1/local/download_lm_en.sh create mode 100755 examples/librispeech/s1/local/export.sh create mode 100755 examples/librispeech/s1/local/test.sh create mode 100755 examples/librispeech/s1/local/train.sh create mode 100644 examples/librispeech/s1/path.sh create mode 100644 examples/librispeech/s1/run.sh create mode 100644 examples/spm/.gitignore create mode 100644 examples/spm/README.md create mode 100644 examples/spm/path.sh create mode 100755 examples/spm/run.sh create mode 100644 examples/spm/text create mode 100644 examples/tiny/s1/train.profile diff --git a/examples/aishell/.gitignore b/examples/aishell/.gitignore index 3c13afe8a..a1def6b3c 100644 --- a/examples/aishell/.gitignore +++ b/examples/aishell/.gitignore @@ -1,5 +1,5 @@ data ckpt* demo_cache -*.log -log +*log +*profile \ No newline at end of file diff --git a/examples/aishell/s1/.gitignore b/examples/aishell/s1/.gitignore new file mode 100644 index 000000000..08728cdc9 --- /dev/null +++ b/examples/aishell/s1/.gitignore @@ -0,0 +1,3 @@ +data +exp +log diff --git a/examples/librispeech/.gitignore b/examples/librispeech/.gitignore index 44038ca5b..f620fb76d 100644 --- a/examples/librispeech/.gitignore +++ b/examples/librispeech/.gitignore @@ -1,2 +1,4 @@ data +exp +log ckpt* diff --git a/examples/librispeech/s1/.gitignore b/examples/librispeech/s1/.gitignore new file mode 100644 index 000000000..08728cdc9 --- /dev/null +++ b/examples/librispeech/s1/.gitignore @@ -0,0 +1,3 @@ +data +exp +log diff --git a/examples/librispeech/s1/conf/augmentation.json b/examples/librispeech/s1/conf/augmentation.json new file mode 100644 index 000000000..c1078393d --- /dev/null +++ b/examples/librispeech/s1/conf/augmentation.json @@ -0,0 +1,34 @@ +[ + { + "type": "shift", + "params": { + "min_shift_ms": -5, + "max_shift_ms": 5 + }, + "prob": 1.0 + }, + { + "type": "speed", + "params": { + "min_speed_rate": 0.9, + "max_speed_rate": 1.1, + "num_rates": 3 + }, + "prob": 0.0 + }, + { + "type": "specaug", + "params": { + "F": 10, + "T": 50, + "n_freq_masks": 2, + "n_time_masks": 2, + "p": 1.0, + "W": 80, + "adaptive_number_ratio": 0, + "adaptive_size_ratio": 0, + "max_n_time_masks": 20 + }, + "prob": 1.0 + } +] diff --git a/examples/librispeech/s1/conf/chunk_confermer.yaml b/examples/librispeech/s1/conf/chunk_confermer.yaml new file mode 100644 index 000000000..bd4279e2b --- /dev/null +++ b/examples/librispeech/s1/conf/chunk_confermer.yaml @@ -0,0 +1,115 @@ +# https://yaml.org/type/float.html +data: + train_manifest: data/manifest.tiny + dev_manifest: data/manifest.tiny + test_manifest: data/manifest.tiny + vocab_filepath: data/vocab.txt + unit_type: 'spm' + spm_model_prefix: 'data/bpe_unigram_200' + mean_std_filepath: "" + augmentation_config: conf/augmentation.json + batch_size: 4 + min_input_len: 0.5 + max_input_len: 20.0 + min_output_len: 0.0 + max_output_len: 400.0 + min_output_input_ratio: 0.05 + max_output_input_ratio: 10.0 + raw_wav: True # use raw_wav or kaldi feature + specgram_type: fbank #linear, mfcc, fbank + feat_dim: 80 + delta_delta: False + dither: 1.0 + target_sample_rate: 16000 + max_freq: None + n_fft: None + stride_ms: 10.0 + window_ms: 25.0 + use_dB_normalization: True + target_dB: -20 + random_seed: 0 + keep_transcription_text: False + sortagrad: True + shuffle_method: batch_shuffle + num_workers: 2 + + +# network architecture +model: + cmvn_file: "data/mean_std.json" + cmvn_file_type: "json" + # encoder related + encoder: conformer + encoder_conf: + output_size: 256 # dimension of attention + attention_heads: 4 + linear_units: 2048 # the number of units of position-wise feed forward + num_blocks: 12 # the number of encoder blocks + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + attention_dropout_rate: 0.0 + input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8 + normalize_before: True + use_cnn_module: True + cnn_module_kernel: 15 + activation_type: 'swish' + pos_enc_layer_type: 'rel_pos' + selfattention_layer_type: 'rel_selfattn' + causal: True + use_dynamic_chunk: True + cnn_module_norm: 'layer_norm' # using nn.LayerNorm makes model converge faster + use_dynamic_left_chunk: false + + # decoder related + decoder: transformer + decoder_conf: + attention_heads: 4 + linear_units: 2048 + num_blocks: 6 + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + self_attention_dropout_rate: 0.0 + src_attention_dropout_rate: 0.0 + + # hybrid CTC/attention + model_conf: + ctc_weight: 0.3 + lsm_weight: 0.1 # label smoothing option + length_normalized_loss: false + + +training: + n_epoch: 20 + accum_grad: 1 + global_grad_clip: 5.0 + optim: adam + optim_conf: + lr: 0.001 + weight_decay: 1e-06 + scheduler: warmuplr # pytorch v1.1.0+ required + scheduler_conf: + warmup_steps: 25000 + lr_decay: 1.0 + log_interval: 1 + + +decoding: + batch_size: 64 + error_rate_type: wer + decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring' + lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm + alpha: 2.5 + beta: 0.3 + beam_size: 10 + cutoff_prob: 1.0 + cutoff_top_n: 0 + num_proc_bsearch: 8 + ctc_weight: 0.0 # ctc weight for attention rescoring decode mode. + decoding_chunk_size: -1 # decoding chunk size. Defaults to -1. + # <0: for decoding, use full chunk. + # >0: for decoding, use fixed chunk size as set. + # 0: used for training, it's prohibited here. + num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1. + simulate_streaming: False # simulate streaming inference. Defaults to False. + + diff --git a/examples/librispeech/s1/conf/chunk_transformer.yaml b/examples/librispeech/s1/conf/chunk_transformer.yaml new file mode 100644 index 000000000..ba60c2735 --- /dev/null +++ b/examples/librispeech/s1/conf/chunk_transformer.yaml @@ -0,0 +1,108 @@ +# https://yaml.org/type/float.html +data: + train_manifest: data/manifest.tiny + dev_manifest: data/manifest.tiny + test_manifest: data/manifest.tiny + vocab_filepath: data/vocab.txt + unit_type: 'spm' + spm_model_prefix: 'data/bpe_unigram_200' + mean_std_filepath: "" + augmentation_config: conf/augmentation.json + batch_size: 4 + min_input_len: 0.5 # second + max_input_len: 20.0 # second + min_output_len: 0.0 # tokens + max_output_len: 400.0 # tokens + min_output_input_ratio: 0.05 + max_output_input_ratio: 10.0 + raw_wav: True # use raw_wav or kaldi feature + specgram_type: fbank #linear, mfcc, fbank + feat_dim: 80 + delta_delta: False + dither: 1.0 + target_sample_rate: 16000 + max_freq: None + n_fft: None + stride_ms: 10.0 + window_ms: 25.0 + use_dB_normalization: True + target_dB: -20 + random_seed: 0 + keep_transcription_text: False + sortagrad: True + shuffle_method: batch_shuffle + num_workers: 2 + + +# network architecture +model: + cmvn_file: "data/mean_std.json" + cmvn_file_type: "json" + # encoder related + encoder: transformer + encoder_conf: + output_size: 256 # dimension of attention + attention_heads: 4 + linear_units: 2048 # the number of units of position-wise feed forward + num_blocks: 12 # the number of encoder blocks + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + attention_dropout_rate: 0.0 + input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8 + normalize_before: true + use_dynamic_chunk: true + use_dynamic_left_chunk: false + + # decoder related + decoder: transformer + decoder_conf: + attention_heads: 4 + linear_units: 2048 + num_blocks: 6 + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + self_attention_dropout_rate: 0.0 + src_attention_dropout_rate: 0.0 + + # hybrid CTC/attention + model_conf: + ctc_weight: 0.3 + lsm_weight: 0.1 # label smoothing option + length_normalized_loss: false + + +training: + n_epoch: 20 + accum_grad: 1 + global_grad_clip: 5.0 + optim: adam + optim_conf: + lr: 0.002 + weight_decay: 1e-06 + scheduler: warmuplr # pytorch v1.1.0+ required + scheduler_conf: + warmup_steps: 25000 + lr_decay: 1.0 + log_interval: 1 + + +decoding: + batch_size: 64 + error_rate_type: wer + decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring' + lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm + alpha: 2.5 + beta: 0.3 + beam_size: 10 + cutoff_prob: 1.0 + cutoff_top_n: 0 + num_proc_bsearch: 8 + ctc_weight: 0.0 # ctc weight for attention rescoring decode mode. + decoding_chunk_size: -1 # decoding chunk size. Defaults to -1. + # <0: for decoding, use full chunk. + # >0: for decoding, use fixed chunk size as set. + # 0: used for training, it's prohibited here. + num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1. + simulate_streaming: False # simulate streaming inference. Defaults to False. + + diff --git a/examples/librispeech/s1/conf/conformer.yaml b/examples/librispeech/s1/conf/conformer.yaml new file mode 100644 index 000000000..83f4f5af4 --- /dev/null +++ b/examples/librispeech/s1/conf/conformer.yaml @@ -0,0 +1,111 @@ +# https://yaml.org/type/float.html +data: + train_manifest: data/manifest.tiny + dev_manifest: data/manifest.tiny + test_manifest: data/manifest.tiny + vocab_filepath: data/vocab.txt + unit_type: 'spm' + spm_model_prefix: 'data/bpe_unigram_200' + mean_std_filepath: "" + augmentation_config: conf/augmentation.json + batch_size: 4 + min_input_len: 0.5 + max_input_len: 20.0 + min_output_len: 0.0 + max_output_len: 400.0 + min_output_input_ratio: 0.05 + max_output_input_ratio: 10.0 + raw_wav: True # use raw_wav or kaldi feature + specgram_type: fbank #linear, mfcc, fbank + feat_dim: 80 + delta_delta: False + dither: 1.0 + target_sample_rate: 16000 + max_freq: None + n_fft: None + stride_ms: 10.0 + window_ms: 25.0 + use_dB_normalization: True + target_dB: -20 + random_seed: 0 + keep_transcription_text: False + sortagrad: True + shuffle_method: batch_shuffle + num_workers: 2 + + +# network architecture +model: + cmvn_file: "data/mean_std.json" + cmvn_file_type: "json" + # encoder related + encoder: conformer + encoder_conf: + output_size: 256 # dimension of attention + attention_heads: 4 + linear_units: 2048 # the number of units of position-wise feed forward + num_blocks: 12 # the number of encoder blocks + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + attention_dropout_rate: 0.0 + input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8 + normalize_before: true + use_cnn_module: True + cnn_module_kernel: 15 + activation_type: 'swish' + pos_enc_layer_type: 'rel_pos' + selfattention_layer_type: 'rel_selfattn' + + # decoder related + decoder: transformer + decoder_conf: + attention_heads: 4 + linear_units: 2048 + num_blocks: 6 + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + self_attention_dropout_rate: 0.0 + src_attention_dropout_rate: 0.0 + + # hybrid CTC/attention + model_conf: + ctc_weight: 0.3 + lsm_weight: 0.1 # label smoothing option + length_normalized_loss: false + + +training: + n_epoch: 20 + accum_grad: 4 + global_grad_clip: 5.0 + optim: adam + optim_conf: + lr: 0.002 + weight_decay: 1e-06 + scheduler: warmuplr # pytorch v1.1.0+ required + scheduler_conf: + warmup_steps: 25000 + lr_decay: 1.0 + log_interval: 1 + + +decoding: + batch_size: 64 + error_rate_type: wer + decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring' + lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm + alpha: 2.5 + beta: 0.3 + beam_size: 10 + cutoff_prob: 1.0 + cutoff_top_n: 0 + num_proc_bsearch: 8 + ctc_weight: 0.0 # ctc weight for attention rescoring decode mode. + decoding_chunk_size: -1 # decoding chunk size. Defaults to -1. + # <0: for decoding, use full chunk. + # >0: for decoding, use fixed chunk size as set. + # 0: used for training, it's prohibited here. + num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1. + simulate_streaming: False # simulate streaming inference. Defaults to False. + + diff --git a/examples/librispeech/s1/conf/transformer.yaml b/examples/librispeech/s1/conf/transformer.yaml new file mode 100644 index 000000000..3f3170bdf --- /dev/null +++ b/examples/librispeech/s1/conf/transformer.yaml @@ -0,0 +1,106 @@ +# https://yaml.org/type/float.html +data: + train_manifest: data/manifest.tiny + dev_manifest: data/manifest.tiny + test_manifest: data/manifest.tiny + vocab_filepath: data/vocab.txt + unit_type: 'spm' + spm_model_prefix: 'data/bpe_unigram_200' + mean_std_filepath: "" + augmentation_config: conf/augmentation.json + batch_size: 4 + min_input_len: 0.5 # second + max_input_len: 20.0 # second + min_output_len: 0.0 # tokens + max_output_len: 400.0 # tokens + min_output_input_ratio: 0.05 + max_output_input_ratio: 10.0 + raw_wav: True # use raw_wav or kaldi feature + specgram_type: fbank #linear, mfcc, fbank + feat_dim: 80 + delta_delta: False + dither: 1.0 + target_sample_rate: 16000 + max_freq: None + n_fft: None + stride_ms: 10.0 + window_ms: 25.0 + use_dB_normalization: True + target_dB: -20 + random_seed: 0 + keep_transcription_text: False + sortagrad: True + shuffle_method: batch_shuffle + num_workers: 2 + + +# network architecture +model: + cmvn_file: "data/mean_std.json" + cmvn_file_type: "json" + # encoder related + encoder: transformer + encoder_conf: + output_size: 256 # dimension of attention + attention_heads: 4 + linear_units: 2048 # the number of units of position-wise feed forward + num_blocks: 12 # the number of encoder blocks + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + attention_dropout_rate: 0.0 + input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8 + normalize_before: true + + # decoder related + decoder: transformer + decoder_conf: + attention_heads: 4 + linear_units: 2048 + num_blocks: 6 + dropout_rate: 0.1 + positional_dropout_rate: 0.1 + self_attention_dropout_rate: 0.0 + src_attention_dropout_rate: 0.0 + + # hybrid CTC/attention + model_conf: + ctc_weight: 0.3 + lsm_weight: 0.1 # label smoothing option + length_normalized_loss: false + + +training: + n_epoch: 20 + accum_grad: 1 + global_grad_clip: 5.0 + optim: adam + optim_conf: + lr: 0.002 + weight_decay: 1e-06 + scheduler: warmuplr # pytorch v1.1.0+ required + scheduler_conf: + warmup_steps: 25000 + lr_decay: 1.0 + log_interval: 1 + + +decoding: + batch_size: 64 + error_rate_type: wer + decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring' + lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm + alpha: 2.5 + beta: 0.3 + beam_size: 10 + cutoff_prob: 1.0 + cutoff_top_n: 0 + num_proc_bsearch: 8 + ctc_weight: 0.0 # ctc weight for attention rescoring decode mode. + decoding_chunk_size: -1 # decoding chunk size. Defaults to -1. + # <0: for decoding, use full chunk. + # >0: for decoding, use fixed chunk size as set. + # 0: used for training, it's prohibited here. + num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1. + simulate_streaming: False # simulate streaming inference. Defaults to False. + + diff --git a/examples/librispeech/s1/local/avg.sh b/examples/librispeech/s1/local/avg.sh new file mode 100755 index 000000000..8589e3530 --- /dev/null +++ b/examples/librispeech/s1/local/avg.sh @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +if [ $# != 2 ];then + echo "usage: ${0} ckpt_dir avg_num" + exit -1 +fi + +ckpt_dir=${1} +average_num=${2} +decode_checkpoint=${ckpt_dir}/avg_${average_num}.pdparams + +python3 -u ${MAIN_ROOT}/utils/avg_model.py \ +--dst_model ${decode_checkpoint} \ +--ckpt_dir ${ckpt_dir} \ +--num ${average_num} \ +--val_best + +if [ $? -ne 0 ]; then + echo "Failed in avg ckpt!" + exit 1 +fi + +exit 0 \ No newline at end of file diff --git a/examples/librispeech/s1/local/data.sh b/examples/librispeech/s1/local/data.sh new file mode 100755 index 000000000..bf3f1b85c --- /dev/null +++ b/examples/librispeech/s1/local/data.sh @@ -0,0 +1,90 @@ +#! /usr/bin/env bash + +stage=-1 +stop_stage=100 + +# bpemode (unigram or bpe) +nbpe=200 +bpemode=unigram +bpeprefix="data/bpe_${bpemode}_${nbpe}" + +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="False" + + if [ $? -ne 0 ]; then + echo "Prepare LibriSpeech failed. Terminated." + exit 1 + fi + + head -n 64 data/manifest.dev-clean > data/manifest.tiny.raw +fi + +if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; 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.tiny.raw" + + if [ $? -ne 0 ]; then + echo "Build vocabulary failed. Terminated." + exit 1 + fi +fi + + +if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then + # compute mean and stddev for normalizer + python3 ${MAIN_ROOT}/utils/compute_mean_std.py \ + --manifest_path="data/manifest.tiny.raw" \ + --num_samples=64 \ + --specgram_type="fbank" \ + --feat_dim=80 \ + --delta_delta=false \ + --sample_rate=16000 \ + --stride_ms=10.0 \ + --window_ms=25.0 \ + --num_workers=2 \ + --output_path="data/mean_std.json" + + if [ $? -ne 0 ]; then + echo "Compute mean and stddev failed. Terminated." + exit 1 + fi +fi + + +if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then + # format manifest with tokenids, vocab size + python3 ${MAIN_ROOT}/utils/format_data.py \ + --feat_type "raw" \ + --cmvn_path "data/mean_std.json" \ + --unit_type "spm" \ + --spm_model_prefix ${bpeprefix} \ + --vocab_path="data/vocab.txt" \ + --manifest_path="data/manifest.tiny.raw" \ + --output_path="data/manifest.tiny" + + + if [ $? -ne 0 ]; then + echo "Formt mnaifest failed. Terminated." + exit 1 + fi +fi + +echo "LibriSpeech Data preparation done." +exit 0 diff --git a/examples/librispeech/s1/local/download_lm_en.sh b/examples/librispeech/s1/local/download_lm_en.sh new file mode 100755 index 000000000..05ea793fb --- /dev/null +++ b/examples/librispeech/s1/local/download_lm_en.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env bash + +. ${MAIN_ROOT}/utils/utility.sh + +DIR=data/lm +mkdir -p ${DIR} + +URL=https://deepspeech.bj.bcebos.com/en_lm/common_crawl_00.prune01111.trie.klm +MD5="099a601759d467cd0a8523ff939819c5" +TARGET=${DIR}/common_crawl_00.prune01111.trie.klm + +echo "Download language model ..." +download $URL $MD5 $TARGET +if [ $? -ne 0 ]; then + echo "Fail to download the language model!" + exit 1 +fi + + +exit 0 diff --git a/examples/librispeech/s1/local/export.sh b/examples/librispeech/s1/local/export.sh new file mode 100755 index 000000000..b83a13a98 --- /dev/null +++ b/examples/librispeech/s1/local/export.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +if [ $# != 3 ];then + echo "usage: $0 config_path ckpt_prefix jit_model_path" + exit -1 +fi + +config_path=$1 +ckpt_path_prefix=$2 +jit_model_export_path=$3 + +python3 -u ${BIN_DIR}/export.py \ +--config ${config_path} \ +--checkpoint_path ${ckpt_path_prefix} \ +--export_path ${jit_model_export_path} + + +if [ $? -ne 0 ]; then + echo "Failed in export!" + exit 1 +fi + + +exit 0 diff --git a/examples/librispeech/s1/local/test.sh b/examples/librispeech/s1/local/test.sh new file mode 100755 index 000000000..c5e61bff7 --- /dev/null +++ b/examples/librispeech/s1/local/test.sh @@ -0,0 +1,37 @@ +#! /usr/bin/env bash + +if [ $# != 2 ];then + echo "usage: ${0} config_path ckpt_path_prefix" + exit -1 +fi + +ngpu=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}') +echo "using $ngpu gpus..." + +device=gpu +if [ ngpu != 0 ];then + device=cpu +fi +config_path=$1 +ckpt_prefix=$2 + +# download language model +#bash local/download_lm_en.sh +#if [ $? -ne 0 ]; then +# exit 1 +#fi + +python3 -u ${BIN_DIR}/test.py \ +--device ${device} \ +--nproc 1 \ +--config ${config_path} \ +--result_file ${ckpt_prefix}.rsl \ +--checkpoint_path ${ckpt_prefix} + +if [ $? -ne 0 ]; then + echo "Failed in evaluation!" + exit 1 +fi + + +exit 0 diff --git a/examples/librispeech/s1/local/train.sh b/examples/librispeech/s1/local/train.sh new file mode 100755 index 000000000..3ed533808 --- /dev/null +++ b/examples/librispeech/s1/local/train.sh @@ -0,0 +1,31 @@ +#! /usr/bin/env bash + +if [ $# != 2 ];then + echo "usage: CUDA_VISIBLE_DEVICES=0 ${0} config_path ckpt_name" + exit -1 +fi + +ngpu=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}') +echo "using $ngpu gpus..." + +config_path=$1 +ckpt_name=$2 +device=gpu +if [ ngpu != 0 ];then + device=cpu +fi + +mkdir -p exp + +python3 -u ${BIN_DIR}/train.py \ +--device ${device} \ +--nproc ${ngpu} \ +--config ${config_path} \ +--output exp/${ckpt_name} + +if [ $? -ne 0 ]; then + echo "Failed in training!" + exit 1 +fi + +exit 0 diff --git a/examples/librispeech/s1/path.sh b/examples/librispeech/s1/path.sh new file mode 100644 index 000000000..14e4fc3ec --- /dev/null +++ b/examples/librispeech/s1/path.sh @@ -0,0 +1,14 @@ +export MAIN_ROOT=${PWD}/../../../ + +export PATH=${MAIN_ROOT}:${PWD}/tools:${PATH} +export LC_ALL=C + +# Use UTF-8 in Python to avoid UnicodeDecodeError when LC_ALL=C +export PYTHONIOENCODING=UTF-8 +export PYTHONPATH=${MAIN_ROOT}:${PYTHONPATH} + +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/ + + +MODEL=u2 +export BIN_DIR=${MAIN_ROOT}/deepspeech/exps/${MODEL}/bin diff --git a/examples/librispeech/s1/run.sh b/examples/librispeech/s1/run.sh new file mode 100644 index 000000000..3ee16e3fc --- /dev/null +++ b/examples/librispeech/s1/run.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -e + +source path.sh +source ${MAIN_ROOT}/utils/parse_options.sh + +# prepare data +bash ./local/data.sh + +# train model, all `ckpt` under `exp` dir +CUDA_VISIBLE_DEVICES=0 ./local/train.sh conf/conformer.yaml test + +# test ckpt 1 +CUDA_VISIBLE_DEVICES=0 ./local/test.sh conf/conformer.yaml exp/test/checkpoints/1 + +# avg 1 best model +./local/avg.sh exp/test/checkpoints 1 + +# export ckpt 1 +./local/export.sh conf/conformer.yaml exp/test/checkpoints/1 exp/test/checkpoints/1.jit.model \ No newline at end of file diff --git a/examples/spm/.gitignore b/examples/spm/.gitignore new file mode 100644 index 000000000..1269488f7 --- /dev/null +++ b/examples/spm/.gitignore @@ -0,0 +1 @@ +data diff --git a/examples/spm/README.md b/examples/spm/README.md new file mode 100644 index 000000000..8b24b28e5 --- /dev/null +++ b/examples/spm/README.md @@ -0,0 +1,5 @@ +# SPM demo + +``` +bash run.sh +``` diff --git a/examples/spm/path.sh b/examples/spm/path.sh new file mode 100644 index 000000000..1617b592c --- /dev/null +++ b/examples/spm/path.sh @@ -0,0 +1,10 @@ +export MAIN_ROOT=${PWD}/../../ + +export PATH=${MAIN_ROOT}:${PWD}/tools:${PATH} +export LC_ALL=C + +# Use UTF-8 in Python to avoid UnicodeDecodeError when LC_ALL=C +export PYTHONIOENCODING=UTF-8 +export PYTHONPATH=${MAIN_ROOT}:${PYTHONPATH} + +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/ diff --git a/examples/spm/run.sh b/examples/spm/run.sh new file mode 100755 index 000000000..7dc96cbe2 --- /dev/null +++ b/examples/spm/run.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -e + +source path.sh + + +stage=0 +stop_stage=100 +# bpemode (unigram or bpe) +nbpe=100 +bpemode=unigram + + +source ${MAIN_ROOT}/utils/parse_options.sh || exit 1; + +train_set=train +dict=data/lang_char/${train_set}_${bpemode}${nbpe}_units.txt +bpemodel=data/lang_char/${train_set}_${bpemode}${nbpe} + +echo "dictionary: ${dict}" +if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then + ### Task dependent. You have to check non-linguistic symbols used in the corpus. + echo "stage 2: Dictionary and Json Data Preparation" + mkdir -p data/lang_char/ + + echo " 0" > ${dict} # 0 will be used for "blank" in CTC + echo " 1" >> ${dict} # must be 1 + + # we borrowed these code and scripts which are related bpe from ESPnet. + cut -f 2- -d" " text > data/lang_char/input.txt + ${MAIN_ROOT}/utils/spm_train --input=data/lang_char/input.txt --vocab_size=${nbpe} --model_type=${bpemode} --model_prefix=${bpemodel} --input_sentence_size=100000000 + ${MAIN_ROOT}/utils/spm_encode --model=${bpemodel}.model --output_format=piece < data/lang_char/input.txt | tr ' ' '\n' | sort | uniq | awk '{print $0 " " NR+1}' >> ${dict} + num_token=$(cat $dict | wc -l) + echo " $num_token" >> $dict # + wc -l ${dict} +fi + +${MAIN_ROOT}/utils/spm_encode --model=${bpemodel}.model --output_format=piece < data/lang_char/input.txt > data/lang_char/input.bpe +${MAIN_ROOT}/utils/spm_decode --model=${bpemodel}.model --input_format=piece < data/lang_char/input.bpe | sed -e "s/▁/ /g" > data/lang_char/input.decode diff --git a/examples/spm/text b/examples/spm/text new file mode 100644 index 000000000..10f8d4731 --- /dev/null +++ b/examples/spm/text @@ -0,0 +1,10 @@ +text-1 mister quilter is the apostle of the middle classes and we are glad to welcome his gospel +test-2 nor is mister quilter's manner less interesting than his matter +test-3 he tells us that at this festive season of the year with christmas and roast beef looming before us similes drawn from eating and its results occur most readily to the mind +test-4 he has grave doubts whether sir frederick leighton's work is really greek after all and can discover in it but little of rocky ithaca +test-5 linnell's pictures are a sort of up guards and at em paintings and mason's exquisite idylls are as national as a jingo poem mister birket foster's landscapes smile at one much in the same way that mister carker used to flash his teeth and mister john collier gives his sitter a cheerful slap on the back before he says like a shampooer in a turkish bath next man +test-6 it is obviously unnecessary for us to point out how luminous these criticisms are how delicate in expression +test-7 on the general principles of art mister quilter writes with equal lucidity +test-8 painting he tells us is of a different quality to mathematics and finish in art is adding more fact +test-9 as for etchings they are of two kinds british and foreign +test-10 he laments most bitterly the divorce that has been made between decorative art and what we usually call pictures makes the customary appeal to the last judgment and reminds us that in the great days of art michael angelo was the furnishing upholsterer diff --git a/examples/tiny/s0/local/data.sh b/examples/tiny/s0/local/data.sh index bf3f1b85c..513795784 100755 --- a/examples/tiny/s0/local/data.sh +++ b/examples/tiny/s0/local/data.sh @@ -10,7 +10,6 @@ bpeprefix="data/bpe_${bpemode}_${nbpe}" source ${MAIN_ROOT}/utils/parse_options.sh - mkdir -p data TARGET_DIR=${MAIN_ROOT}/examples/dataset mkdir -p ${TARGET_DIR} diff --git a/examples/tiny/s1/run.sh b/examples/tiny/s1/run.sh index 3ee16e3fc..3b0da66ca 100644 --- a/examples/tiny/s1/run.sh +++ b/examples/tiny/s1/run.sh @@ -2,7 +2,7 @@ set -e source path.sh -source ${MAIN_ROOT}/utils/parse_options.sh +source ${MAIN_ROOT}/utils/parse_options.sh || exit 1; # prepare data bash ./local/data.sh diff --git a/examples/tiny/s1/train.profile b/examples/tiny/s1/train.profile new file mode 100644 index 0000000000000000000000000000000000000000..08a9a8684e823195d23891f15ab5020bd407e3dc GIT binary patch literal 180556 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μ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 z%0A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 literal 0 HcmV?d00001