softcatala/wav2vec2-large-100k-voxpopuli-catala

🤗 Hugging Face sourceautomatic-speech-recognitionapache-2.03.8 GBother✓ 2 checksumsupdated today
Submit in one command

Run it next to your model folder. It makes the torrent, checks your files against Hugging Face, and submits it. You just start seeding and paste your key from your account. It only reads your files and never changes them. Read the script first if you like.

curl -fsSL https://pirateface.co/package.sh | bash -s -- --repo softcatala/wav2vec2-large-100k-voxpopuli-catala ./model-folder
Needs a seeder →

Wav2Vec2-Large-100k-VoxPopuli-Català

Fine-tuned facebook/wav2vec2-large-100k-voxpopuli on Catalan language using the Common Voice and ParlamentParla datasets.

Attention: The split train/dev/test used does not fully map with the CommonVoice 6.1 dataset. A custom split was used combining both the CommonVoice and ParlamentParla dataset and can be found here. Evaluating on the CV test dataset will produce a biased WER as 1144 audio files of that dataset were used in training/evaluation of this model. WER was calculated using this test.csv which was not seen by the model during training/evaluation.

You can find training and evaluation scripts in the github repository ccoreilly/wav2vec2-catala

When using this model, make sure that your speech input is sampled at 16kHz.

Results

Word error rate was evaluated on the following datasets unseen by the model:

Dataset WER
Test split CV+ParlamentParla 5.98%
Google Crowsourced Corpus 12.14%
Audiobook “La llegenda de Sant Jordi” 12.02%

Usage

The model can be used directly (without a language model) as follows:

import torch
import torchaudio
from datasets import load_dataset
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor

test_dataset = load_dataset("common_voice", "ca", split="test[:2%]")

processor = Wav2Vec2Processor.from_pretrained("ccoreilly/wav2vec2-large-100k-voxpopuli-catala") 
model = Wav2Vec2ForCTC.from_pretrained("ccoreilly/wav2vec2-large-100k-voxpopuli-catala")

resampler = torchaudio.transforms.Resample(48_000, 16_000)

# Preprocessing the datasets.
# We need to read the audio 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])