--- language: - km license: apache-2.0 tags: - automatic-speech-recognition - openslr - robust-speech-event - km - generated_from_trainer - hf-asr-leaderboard datasets: - openslr model-index: - name: wav2vec2-xls-r-1b-km results: - task: name: Speech Recognition type: automatic-speech-recognition dataset: name: OpenSLR km type: openslr args: km metrics: - name: Test WER type: wer value: 32.13 - name: Test CER type: cer value: 9.35 - task: name: Automatic Speech Recognition type: automatic-speech-recognition dataset: name: Robust Speech Event - Dev Data type: speech-recognition-community-v2/dev_data args: km metrics: - name: Test WER type: wer value: 32.13 - name: Test CER type: cer value: 9.35 --- # This model is a fine-tuned version of [facebook/wav2vec2-xls-r-1b](https://huggingface.co/facebook/wav2vec2-xls-r-1b) on the openslr dataset. It achieves the following results on the evaluation set: - Loss: 0.4239 - Wer: 0.4221 # Evaluation results on OpenSLR "test" (self-split 10%) (Running ./eval.py): - WER: 0.4490281634272114 - CER: 0.12198285179047481 # Evaluation results on OpenSLR "test" with LM ngram (self-split 10%) (Running ./eval.py): - WER: 0.32130107100357 - CER: 0.09345053678218891 # Note - Since this dataset is small (4 hours of voice recording), we decided not to train that for too long to avoid overfitting and under-generalization. - This model performs worse than its 300M-variant. Probably, we don't explore the hyper-parameter enough? ## Installation Install the following libraries on top of HuggingFace Transformers for the supports of language model. ``` pip install pyctcdecode pip install https://github.com/kpu/kenlm/archive/master.zip ``` ## Usage **Approach 1:** Using HuggingFace's pipeline, this will cover everything end-to-end from raw audio input to text output. ```python from transformers import pipeline # Load the model pipe = pipeline(model="vitouphy/wav2vec2-xls-r-300m-khmer") # Process raw audio output = pipe("sound_file.wav", chunk_length_s=10, stride_length_s=(4, 2)) ``` **Approach 2:** More custom way to predict phonemes. ```python from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC import librosa import torch # load model and processor processor = Wav2Vec2Processor.from_pretrained("vitouphy/wav2vec2-xls-r-300m-khmer") model = Wav2Vec2ForCTC.from_pretrained("vitouphy/wav2vec2-xls-r-300m-khmer") # Read and process the input speech_array, sampling_rate = librosa.load("sound_file.wav", sr=16_000) inputs = processor(speech_array, sampling_rate=16_000, return_tensors="pt", padding=True) with torch.no_grad(): logits = model(inputs.input_values, attention_mask=inputs.attention_mask).logits predicted_ids = torch.argmax(logits, axis=-1) predicted_sentences = processor.batch_decode(predicted_ids) print(predicted_sentences) ``` ## Intended uses & limitations The data used for this model is only around 4 hours of recordings. - We split into 80/10/10. Hence, the training hour is 3.2 hours, which is very very small. - Yet, its performance is not too bad. Quite interesting for such small dataset, actually. You can try it out. - Its limitation is: - Rare characters, e.g. ឬស្សី ឪឡឹក - Speech needs to be clear and articulate. - More data to cover more vocabulary and character may help improve this system. ## Training procedure ### Training hyperparameters The following hyperparameters were used during training: - learning_rate: 1e-05 - train_batch_size: 8 - eval_batch_size: 8 - seed: 42 - gradient_accumulation_steps: 4 - total_train_batch_size: 32 - optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08 - lr_scheduler_type: linear - lr_scheduler_warmup_steps: 2000 - num_epochs: 75 - mixed_precision_training: Native AMP ### Training results | Training Loss | Epoch | Step | Validation Loss | Wer | |:-------------:|:-----:|:----:|:---------------:|:------:| | 3.5671 | 5.47 | 400 | 12.0218 | 1.0 | | 3.5159 | 10.95 | 800 | 10.6337 | 1.0 | | 2.4543 | 16.43 | 1200 | 1.8256 | 0.9839 | | 1.9437 | 21.91 | 1600 | 1.1237 | 0.9173 | | 1.696 | 27.39 | 2000 | 0.8246 | 0.7700 | | 1.5342 | 32.87 | 2400 | 0.6433 | 0.6594 | | 1.4509 | 38.35 | 2800 | 0.5500 | 0.5787 | | 1.3478 | 43.83 | 3200 | 0.5070 | 0.4907 | | 1.3096 | 49.31 | 3600 | 0.4692 | 0.4726 | | 1.2532 | 54.79 | 4000 | 0.4448 | 0.4479 | | 1.2291 | 60.27 | 4400 | 0.4374 | 0.4366 | | 1.196 | 65.75 | 4800 | 0.4314 | 0.4310 | | 1.1862 | 71.23 | 5200 | 0.4239 | 0.4221 | ### Framework versions - Transformers 4.17.0.dev0 - Pytorch 1.10.2+cu102 - Datasets 1.18.2.dev0 - Tokenizers 0.11.0