Views
No views yet
1from transformers import WhisperForConditionalGeneration, WhisperProcessor
2from datasets import load_dataset
3import librosa
4import torch
5
6LANG_ID = "ja"
7MODEL_ID = "Ivydata/whisper-small-japanese"
8SAMPLES = 10
9
10test_dataset = load_dataset("common_voice", LANG_ID, split=f"test[:{SAMPLES}]")
11processor = WhisperProcessor.from_pretrained(MODEL_ID)
12model = WhisperForConditionalGeneration.from_pretrained(MODEL_ID)
13model.config.forced_decoder_ids = processor.get_decoder_prompt_ids(
14 language="ja", task="transcribe"
15)
16model.config.suppress_tokens = []
17
18# Preprocessing the datasets.
19# We need to read the audio files as arrays
20def speech_file_to_array_fn(batch):
21 speech_array, sampling_rate = librosa.load(batch["path"], sr=16_000)
22 batch["speech"] = speech_array
23 batch["sentence"] = batch["sentence"].upper()
24 batch["sampling_rate"] = sampling_rate
25 return batch
26
27test_dataset = test_dataset.map(speech_file_to_array_fn)
28sample = test_dataset[0]
29input_features = processor(sample["speech"], sampling_rate=sample["sampling_rate"], return_tensors="pt").input_features
30predicted_ids = model.generate(input_features)
31
32transcription = processor.batch_decode(predicted_ids, skip_special_tokens=False)
33# ['<|startoftranscript|><|ja|><|transcribe|><|notimestamps|>木村さんに電話を貸してもらいました。<|endoftext|>']
34
35transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
36# ['木村さんに電話を貸してもらいました。']
37| Model | CER |
|---|---|
| Ivydata/whisper-small-japanese | 23.10% |
| Ivydata/wav2vec2-large-xlsr-53-japanese | 27.87% |
| jonatasgrosman/wav2vec2-large-xlsr-53-japanese | 34.18% |