readme: ---
  language: vi 
  datasets:
  - common_voice, infore_25h
  metrics:
  - wer
  tags:
  - audio
  - automatic-speech-recognition
  - speech
  - xlsr-fine-tuning-week
  license: apache-2.0
  model-index:
  - name: Cuong-Cong XLSR Wav2Vec2 Large 53
    results:
    - task: 
        name: Speech Recognition
        type: automatic-speech-recognition
      dataset:
        name: Common Voice vi 
        type: common_voice
        args: vi 
      metrics:
         - name: Test WER
           type: wer
           value: 58.63 
  ---
  
  # Wav2Vec2-Large-XLSR-53-Vietnamese 
  
  Fine-tuned [facebook/wav2vec2-large-xlsr-53](https://huggingface.co/facebook/wav2vec2-large-xlsr-53) on Vietnamese using the [Common Voice](https://huggingface.co/datasets/common_voice), [Infore_25h dataset](https://files.huylenguyen.com/25hours.zip) (Password: BroughtToYouByInfoRe)
    
  When using this model, make sure that your speech input is sampled at 16kHz.
  
  ## Usage
  
  The model can be used directly (without a language model) as follows:
  
  ```python
  import torch
  import torchaudio
  from datasets import load_dataset
  from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
  
  test_dataset = load_dataset("common_voice", "vi", split="test[:2%]") 
  processor = Wav2Vec2Processor.from_pretrained("CuongLD/wav2vec2-large-xlsr-vietnamese") 
  model = Wav2Vec2ForCTC.from_pretrained("CuongLD/wav2vec2-large-xlsr-vietnamese")
  
  resampler = torchaudio.transforms.Resample(48_000, 16_000)
  
  # Preprocessing the datasets.
  # We need to read the aduio files as arrays
  def speech_file_to_array_fn(batch):
    speech_array, sampling_rate = torchaudio.load(batch["path"])
  	batch["speech"] = resampler(speech_array).squeeze().numpy()
  	return batch
  
  test_dataset = test_dataset.map(speech_file_to_array_fn)
  inputs = processor(test_dataset["speech"][:2], 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, dim=-1)
  
  print("Prediction:", processor.batch_decode(predicted_ids))
  print("Reference:", test_dataset["sentence"][:2])
  ```
  
  
  ## Evaluation
  
  The model can be evaluated as follows on the Vietnamese test data of Common Voice.  
  
  ```python
  import torch
  import torchaudio
  from datasets import load_dataset, load_metric
  from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
  import re
  
  test_dataset = load_dataset("common_voice", "vi", split="test")
  wer = load_metric("wer")
  
  processor = Wav2Vec2Processor.from_pretrained("CuongLD/wav2vec2-large-xlsr-vietnamese") 
  model = Wav2Vec2ForCTC.from_pretrained("CuongLD/wav2vec2-large-xlsr-vietnamese") 
  model.to("cuda")
  
  chars_to_ignore_regex = '[\,\?\.\!\-\;\:\"\“]' 
  resampler = torchaudio.transforms.Resample(48_000, 16_000)
  
  # Preprocessing the datasets.
  # We need to read the aduio files as arrays
  def speech_file_to_array_fn(batch):
  	batch["sentence"] = re.sub(chars_to_ignore_regex, '', batch["sentence"]).lower()
  	speech_array, sampling_rate = torchaudio.load(batch["path"])
  	batch["speech"] = resampler(speech_array).squeeze().numpy()
  	return batch
  
  test_dataset = test_dataset.map(speech_file_to_array_fn)
  
  # Preprocessing the datasets.
  # We need to read the aduio files as arrays
  def evaluate(batch):
  	inputs = processor(batch["speech"], sampling_rate=16_000, return_tensors="pt", padding=True)
  
  	with torch.no_grad():
  		logits = model(inputs.input_values.to("cuda"), attention_mask=inputs.attention_mask.to("cuda")).logits
  
  	pred_ids = torch.argmax(logits, dim=-1)
  	batch["pred_strings"] = processor.batch_decode(pred_ids)
  	return batch
  
  result = test_dataset.map(evaluate, batched=True, batch_size=8)
  
  print("WER: {:2f}".format(100 * wer.compute(predictions=result["pred_strings"], references=result["sentence"])))
  ```
  
  **Test Result**: 58.63 % 
  
  ## Training
  
  The Common Voice `train`, `validation`, and `Infore_25h` datasets were used for training 
  
  The script used for training can be found [here](https://drive.google.com/file/d/1AW9R8IlsapiSGh9n3aECf23t-zhk3wUh/view?usp=sharing) 
  
  =======================To here===============================>
  
  Your model in then available under *huggingface.co/CuongLD/wav2vec2-large-xlsr-vietnamese* for everybody to use 🎉.
  
  ## How to evaluate my trained checkpoint
  
  Having uploaded your model, you should now evaluate your model in a final step. This should be as simple as 
  copying the evaluation code of your model card into a python script and running it. Make sure to note 
  the final result on the model card **both** under the YAML tags at the very top **and** below your evaluation code under "Test Results".
  
  ## Rules of training and evaluation
  
  In this section, we will quickly go over what data is allowed to be used as training 
  data, what kind of data preprocessing is allowed be used, and how the model should be evaluated.
  
  To make it very simple regarding the first point: **All data except the official common voice `test` data set can be used as training data**. For models trained in a language that is not included in Common Voi