|
--- |
|
language: |
|
- ro |
|
license: apache-2.0 |
|
tags: |
|
- whisper-event |
|
datasets: |
|
- mozilla-foundation/common_voice_11_0 |
|
- gigant/romanian_speech_synthesis_0_8_1 |
|
model-index: |
|
- name: Whisper Medium Romanian |
|
results: |
|
- task: |
|
name: Automatic Speech Recognition |
|
type: automatic-speech-recognition |
|
dataset: |
|
name: mozilla-foundation/common_voice_11_0 ro |
|
type: mozilla-foundation/common_voice_11_0 |
|
config: ro |
|
split: test |
|
args: ro |
|
metrics: |
|
- name: Wer |
|
type: wer |
|
value: 4.73 |
|
- task: |
|
name: Automatic Speech Recognition |
|
type: automatic-speech-recognition |
|
dataset: |
|
name: google/fleurs ro |
|
type: google/fleurs |
|
config: ro |
|
split: test |
|
args: ro |
|
metrics: |
|
- name: Wer |
|
type: wer |
|
value: 19.64 |
|
metrics: |
|
- wer |
|
--- |
|
|
|
# Whisper Medium Romanian |
|
|
|
This model is a fine-tuned version of [openai/whisper-medium](https://huggingface.co/openai/whisper-medium) on the Common Voice 11.0 dataset, and the Romanian speech synthesis corpus. |
|
It achieves the following results on the evaluation set: |
|
- eval_loss: 0.06453 |
|
- eval_wer: 4.717 |
|
- epoch: 7.03 |
|
- step: 3500 |
|
|
|
## Model description |
|
|
|
The architecture is the same as [openai/whisper-medium](https://huggingface.co/openai/whisper-medium). |
|
|
|
## Training and evaluation data |
|
|
|
The model was trained on the Common Voice 11.0 dataset (`train+validation+other` splits) and the Romanian speech synthesis corpus, and was tested on the `test` split of the Common Voice 11.0 dataset. |
|
|
|
## Usage |
|
Inference with 🤗 Pipeline |
|
```python |
|
import torch |
|
from datasets import load_dataset |
|
from transformers import pipeline |
|
|
|
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") |
|
# Load pipeline |
|
pipe = pipeline("automatic-speech-recognition", model="gigant/whisper-medium-romanian", device=device) |
|
# NB: set forced_decoder_ids for generation utils |
|
pipe.model.config.forced_decoder_ids = pipe.tokenizer.get_decoder_prompt_ids(language="ro", task="transcribe") |
|
|
|
# Load data |
|
ds_mcv_test = load_dataset("mozilla-foundation/common_voice_11_0", "ro", split="test", streaming=True) |
|
test_segment = next(iter(ds_mcv_test)) |
|
waveform = test_segment["audio"] |
|
|
|
# NB: decoding option |
|
# limit the maximum number of generated tokens to 225 |
|
pipe.model.config.max_length = 225 + 1 |
|
# sampling |
|
# pipe.model.config.do_sample = True |
|
# beam search |
|
# pipe.model.config.num_beams = 5 |
|
# return |
|
# pipe.model.config.return_dict_in_generate = True |
|
# pipe.model.config.output_scores = True |
|
# pipe.model.config.num_return_sequences = 5 |
|
# Run |
|
generated_sentences = pipe(waveform)["text"] |
|
``` |
|
Inference with 🤗 low-level APIs |
|
```python |
|
import torch |
|
import torchaudio |
|
|
|
from datasets import load_dataset |
|
from transformers import AutoProcessor, AutoModelForSpeechSeq2Seq |
|
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") |
|
|
|
# Load model |
|
model = AutoModelForSpeechSeq2Seq.from_pretrained("gigant/whisper-medium-romanian").to(device) |
|
processor = AutoProcessor.from_pretrained("gigant/whisper-medium-romanian", language="romanian", task="transcribe") |
|
|
|
# NB: set forced_decoder_ids for generation utils |
|
model.config.forced_decoder_ids = processor.get_decoder_prompt_ids(language="ro", task="transcribe") |
|
# 16_000 |
|
model_sample_rate = processor.feature_extractor.sampling_rate |
|
|
|
# Load data |
|
ds_mcv_test = load_dataset("mozilla-foundation/common_voice_11_0", "ro", split="test", streaming=True) |
|
test_segment = next(iter(ds_mcv_test)) |
|
waveform = torch.from_numpy(test_segment["audio"]["array"]) |
|
sample_rate = test_segment["audio"]["sampling_rate"] |
|
# Resample |
|
if sample_rate != model_sample_rate: |
|
resampler = torchaudio.transforms.Resample(sample_rate, model_sample_rate) |
|
waveform = resampler(waveform) |
|
# Get feat |
|
inputs = processor(waveform, sampling_rate=model_sample_rate, return_tensors="pt") |
|
input_features = inputs.input_features |
|
input_features = input_features.to(device) |
|
|
|
# Generate |
|
generated_ids = model.generate(inputs=input_features, max_new_tokens=225) # greedy |
|
# generated_ids = model.generate(inputs=input_features, max_new_tokens=225, num_beams=5) # beam search |
|
# Detokenize |
|
generated_sentences = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] |
|
|
|
# Normalise predicted sentences if necessary |
|
``` |
|
|
|
The code was adapted from [bofenghuang/deprecated-whisper-large-v2-cv11-french-punct-plus](https://huggingface.co/bofenghuang/deprecated-whisper-large-v2-cv11-french-punct-plus). |
|
|
|
## Training procedure |
|
|
|
### Training hyperparameters |
|
|
|
The following hyperparameters were used during training: |
|
- learning_rate: 1e-05 |
|
- train_batch_size: 32 |
|
- eval_batch_size: 32 |
|
- seed: 42 |
|
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08 |
|
- lr_scheduler_type: linear |
|
- lr_scheduler_warmup_steps: 500 |
|
- training_steps: 5000 |
|
- mixed_precision_training: Native AMP |
|
|
|
### Framework versions |
|
|
|
- Transformers 4.26.0.dev0 |
|
- Pytorch 1.13.0+cu117 |
|
- Datasets 2.7.1.dev0 |
|
- Tokenizers 0.13.2 |