--- language: id license: apache-2.0 tags: - icefall - phoneme-recognition - automatic-speech-recognition datasets: - mozilla-foundation/common_voice_13_0 - indonesian-nlp/librivox-indonesia - google/fleurs --- # Pruned Stateless Zipformer RNN-T Streaming ID Pruned Stateless Zipformer RNN-T Streaming ID is an automatic speech recognition model trained on the following datasets: - [Common Voice ID](https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0) - [LibriVox Indonesia](https://huggingface.co/datasets/indonesian-nlp/librivox-indonesia) - [FLEURS ID](https://huggingface.co/datasets/google/fleurs) Instead of being trained to predict sequences of words, this model was trained to predict sequence of phonemes, e.g. `['p', 'ə', 'r', 'b', 'u', 'a', 't', 'a', 'n', 'ɲ', 'a']`. Therefore, the model's [vocabulary](https://huggingface.co/bookbot/pruned-transducer-stateless7-streaming-id/blob/main/data/lang_phone/tokens.txt) contains the different IPA phonemes found in [g2p ID](https://github.com/bookbot-kids/g2p_id). This model was trained using [icefall](https://github.com/k2-fsa/icefall) framework. All training was done on a Google Cloud Engine VM with a Tesla A100 GPU. All necessary scripts used for training could be found in the [Files and versions](https://huggingface.co/bookbot/pruned-transducer-stateless7-streaming-id/tree/main) tab, as well as the [Training metrics](https://huggingface.co/bookbot/pruned-transducer-stateless7-streaming-id/tensorboard) logged via Tensorboard. ## Evaluation Results ### Simulated Streaming ```sh for m in greedy_search fast_beam_search modified_beam_search; do ./pruned_transducer_stateless7_streaming/decode.py \ --epoch 30 \ --avg 9 \ --exp-dir ./pruned_transducer_stateless7_streaming/exp \ --max-duration 600 \ --decode-chunk-len 32 \ --decoding-method $m done ``` The model achieves the following phoneme error rates on the different test sets: | Decoding | LibriVox | FLEURS | Common Voice | | -------------------- | :------: | :----: | :----------: | | Greedy Search | 4.87% | 11.45% | 14.97% | | Modified Beam Search | 4.71% | 11.25% | 14.31% | | Fast Beam Search | 4.85% | 12.55% | 14.89% | ### Chunk-wise Streaming ```sh for m in greedy_search fast_beam_search modified_beam_search; do ./pruned_transducer_stateless7_streaming/streaming_decode.py \ --epoch 30 \ --avg 9 \ --exp-dir ./pruned_transducer_stateless7_streaming/exp \ --decoding-method $m \ --decode-chunk-len 32 \ --num-decode-streams 1500 done ``` The model achieves the following phoneme error rates on the different test sets: | Decoding | LibriVox | FLEURS | Common Voice | | -------------------- | :------: | :----: | :----------: | | Greedy Search | 5.12% | 12.74% | 15.78% | | Modified Beam Search | 4.78% | 11.83% | 14.54% | | Fast Beam Search | 4.81% | 12.93% | 14.96% | ## Usage ### Download Pre-trained Model ```sh cd egs/bookbot/ASR mkdir tmp cd tmp git lfs install git clone https://huggingface.co/bookbot/pruned-transducer-stateless7-streaming-id ``` ### Inference To decode with greedy search, run: ```sh ./pruned_transducer_stateless7_streaming/jit_pretrained.py \ --nn-model-filename ./tmp/pruned-transducer-stateless7-streaming-id/exp/cpu_jit.pt \ --lang-dir ./tmp/pruned-transducer-stateless7-streaming-id/data/lang_phone \ ./tmp/pruned-transducer-stateless7-streaming-id/test_waves/sample1.wav ```
Decoding Output ``` 2023-06-21 10:19:18,563 INFO [jit_pretrained.py:217] device: cpu 2023-06-21 10:19:19,231 INFO [lexicon.py:168] Loading pre-compiled tmp/pruned-transducer-stateless7-streaming-id/data/lang_phone/Linv.pt 2023-06-21 10:19:19,232 INFO [jit_pretrained.py:228] Constructing Fbank computer 2023-06-21 10:19:19,233 INFO [jit_pretrained.py:238] Reading sound files: ['./tmp/pruned-transducer-stateless7-streaming-id/test_waves/sample1.wav'] 2023-06-21 10:19:19,234 INFO [jit_pretrained.py:244] Decoding started 2023-06-21 10:19:20,090 INFO [jit_pretrained.py:271] ./tmp/pruned-transducer-stateless7-streaming-id/test_waves/sample1.wav: p u l a ŋ | s ə k o l a h | p i t ə r i | s a ŋ a t | l a p a r 2023-06-21 10:19:20,090 INFO [jit_pretrained.py:273] Decoding Done ```
## Training procedure ### Install icefall ```sh git clone https://github.com/bookbot-hive/icefall cd icefall export PYTHONPATH=`pwd`:$PYTHONPATH ``` ### Prepare Data ```sh cd egs/bookbot_id/ASR ./prepare.sh ``` ### Train ```sh export CUDA_VISIBLE_DEVICES="0" ./pruned_transducer_stateless7_streaming/train.py \ --num-epochs 30 \ --use-fp16 1 \ --max-duration 400 ``` ## Frameworks - [k2](https://github.com/k2-fsa/k2) - [icefall](https://github.com/bookbot-hive/icefall) - [lhotse](https://github.com/bookbot-hive/lhotse)