
# Sharif-wav2vec2

This is a fine-tuned version of Sharif Wav2vec2 for Farsi. The base model went through a fine-tuning process in which 108 hours of Commonvoice's Farsi samples with a sampling rate equal to 16kHz. Afterward, we trained a 5gram using [kenlm](https://github.com/kpu/kenlm) toolkit and used it in the processor which increased our accuracy on online ASR.

## Usage 

When using the model, ensure that your speech input is sampled at 16Khz. Prior to the usage, you may need to install the below dependencies:

```shell
pip install pyctcdecode
pip install pypi-kenlm
```

For testing, you can use the hosted inference API at the hugging face (There are provided examples from common-voice). It may take a while to transcribe the given voice; Or you can use the bellow code for a local run:

```python
import tensorflow
import torchaudio
import torch
import numpy as np

from transformers import AutoProcessor, AutoModelForCTC

processor = AutoProcessor.from_pretrained("SLPL/Sharif-wav2vec2")
model = AutoModelForCTC.from_pretrained("SLPL/Sharif-wav2vec2")

speech_array, sampling_rate = torchaudio.load("path/to/your.wav")
speech_array = speech_array.squeeze().numpy()

features = processor(
    speech_array,
    sampling_rate=processor.feature_extractor.sampling_rate,
    return_tensors="pt",
    padding=True)

with torch.no_grad():
    logits = model(
        features.input_values,
        attention_mask=features.attention_mask).logits
    prediction = processor.batch_decode(logits.numpy()).text

print(prediction[0])
# تست
```

## Evaluation

For the evaluation, you can use the code below. Ensure your dataset to be in following form in order to avoid any further conflict:

| path | reference|
|:----:|:--------:|
| path/to/audio_file.wav | "TRANSCRIPTION" |

also, make sure you have installed `pip install jiwer` prior to running.

```python
import tensorflow
import torchaudio
import torch
import librosa
from datasets import load_dataset,load_metric
import numpy as np
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
from transformers import Wav2Vec2ProcessorWithLM

model = Wav2Vec2ForCTC.from_pretrained("SLPL/Sharif-wav2vec2") 
processor = Wav2Vec2ProcessorWithLM.from_pretrained("SLPL/Sharif-wav2vec2") 

def speech_file_to_array_fn(batch):
    speech_array, sampling_rate = torchaudio.load(batch["path"])
    speech_array = speech_array.squeeze().numpy()
    speech_array = librosa.resample(
        np.asarray(speech_array),
        sampling_rate,
        processor.feature_extractor.sampling_rate)
    batch["speech"] = speech_array
    return batch

def predict(batch):
    features = processor(
        batch["speech"], 
        sampling_rate=processor.feature_extractor.sampling_rate, 
        return_tensors="pt", 
        padding=True
    )

    with torch.no_grad():
        logits = model(
            features.input_values,
            attention_mask=features.attention_mask).logits
    batch["prediction"] = processor.batch_decode(logits.numpy()).text
    return batch
    
dataset = load_dataset(
    "csv",
    data_files={"test":"dataset.eval.csv"},
    delimiter=",")["test"]
dataset = dataset.map(speech_file_to_array_fn)

result = dataset.map(predict, batched=True, batch_size=4)
wer = load_metric("wer")

print("WER: {:.2f}".format(wer.compute(
    predictions=result["prediction"],
    references=result["reference"])))
```

*Result (WER) on common-voice 6.1*:

| cleaned | other |
|:---:|:---:|
| 0.06 | 0.16 |


## Citation
If you want to cite this model you can use this:

```bibtex
?
```

### Contributions

Thanks to [@sarasadeghii](https://github.com/Sarasadeghii) and [@sadrasabouri](https://github.com/sadrasabouri) for adding this model.

{"language": "fa", "license": "mit", "tags": ["audio", "automatic-speech-recognition"], "datasets": ["common_voice_6_1"], "widget": [{"example_title": "Common Voice Sample 1", "src": "https://datasets-server.huggingface.co/assets/common_voice/--/fa/train/0/audio/audio.mp3"}, {"example_title": "Common Voice Sample 2", "src": "https://datasets-server.huggingface.co/assets/common_voice/--/fa/train/1/audio/audio.mp3"}], "model-index": [{"name": "Sharif-wav2vec2", "results": [{"task": {"type": "automatic-speech-recognition", "name": "Automatic Speech Recognition"}, "dataset": {"name": "Common Voice Corpus 6.1 (clean)", "type": "common_voice_6_1", "config": "clean", "split": "test", "args": {"language": "fa"}}, "metrics": [{"type": "wer", "value": 6.0, "name": "Test WER"}]}]}]}
transformers pytorch wav2vec2 automatic-speech-recognition audio fa dataset:common_voice_6_1 license:mit model-index endpoints_compatible has_space region:us
TAGS
#transformers #pytorch #wav2vec2 #automatic-speech-recognition #audio #fa #dataset-common_voice_6_1 #license-mit #model-index #endpoints_compatible #has_space #region-us 

Sharif-wav2vec2
===============


This is a fine-tuned version of Sharif Wav2vec2 for Farsi. The base model went through a fine-tuning process in which 108 hours of Commonvoice's Farsi samples with a sampling rate equal to 16kHz. Afterward, we trained a 5gram using kenlm toolkit and used it in the processor which increased our accuracy on online ASR.


Usage
-----


When using the model, ensure that your speech input is sampled at 16Khz. Prior to the usage, you may need to install the below dependencies:


For testing, you can use the hosted inference API at the hugging face (There are provided examples from common-voice). It may take a while to transcribe the given voice; Or you can use the bellow code for a local run:


Evaluation
----------


For the evaluation, you can use the code below. Ensure your dataset to be in following form in order to avoid any further conflict:



also, make sure you have installed 'pip install jiwer' prior to running.


*Result (WER) on common-voice 6.1*:



If you want to cite this model you can use this:


### Contributions


Thanks to @sarasadeghii and @sadrasabouri for adding this model.



### Contributions


Thanks to @sarasadeghii and @sadrasabouri for adding this model.
TAGS
#transformers #pytorch #wav2vec2 #automatic-speech-recognition #audio #fa #dataset-common_voice_6_1 #license-mit #model-index #endpoints_compatible #has_space #region-us 
 ### Contributions


Thanks to @sarasadeghii and @sadrasabouri for adding this model.
passage: TAGS
#transformers #pytorch #wav2vec2 #automatic-speech-recognition #audio #fa #dataset-common_voice_6_1 #license-mit #model-index #endpoints_compatible #has_space #region-us 
### Contributions


Thanks to @sarasadeghii and @sadrasabouri for adding this model.