Views
No views yet
1# requirement packages
2!pip install git+https://github.com/huggingface/datasets.git
3!pip install git+https://github.com/huggingface/transformers.git
4!pip install torchaudio
5!pip install librosa
6!pip install jiwer!wget -O normalizer.py https://huggingface.co/m3hrdadfi/wav2vec2-large-xlsr-lithuanian/raw/main/normalizer.py1import librosa
2import torch
3import torchaudio
4from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
5from datasets import load_dataset
6
7import numpy as np
8import re
9import string
10
11import IPython.display as ipd
12
13from normalizer import normalizer
14
15
16def speech_file_to_array_fn(batch):
17 speech_array, sampling_rate = torchaudio.load(batch["path"])
18 speech_array = speech_array.squeeze().numpy()
19 speech_array = librosa.resample(np.asarray(speech_array), sampling_rate, 16_000)
20
21 batch["speech"] = speech_array
22 return batch
23
24
25def predict(batch):
26 features = processor(batch["speech"], sampling_rate=16_000, return_tensors="pt", padding=True)
27
28 input_values = features.input_values.to(device)
29 attention_mask = features.attention_mask.to(device)
30
31 with torch.no_grad():
32 logits = model(input_values, attention_mask=attention_mask).logits
33
34 pred_ids = torch.argmax(logits, dim=-1)
35
36 batch["predicted"] = processor.batch_decode(pred_ids)[0]
37 return batch
38
39
40device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
41processor = Wav2Vec2Processor.from_pretrained("m3hrdadfi/wav2vec2-large-xlsr-lithuanian")
42model = Wav2Vec2ForCTC.from_pretrained("m3hrdadfi/wav2vec2-large-xlsr-lithuanian").to(device)
43
44dataset = load_dataset("common_voice", "lt", split="test[:1%]")
45dataset = dataset.map(
46 normalizer,
47 fn_kwargs={"remove_extra_space": True},
48 remove_columns=list(set(dataset.column_names) - set(['sentence', 'path']))
49)
50
51dataset = dataset.map(speech_file_to_array_fn)
52result = dataset.map(predict)
53
54max_items = np.random.randint(0, len(result), 20).tolist()
55for i in max_items:
56 reference, predicted = result["sentence"][i], result["predicted"][i]
57 print("reference:", reference)
58 print("predicted:", predicted)
59 print('---')1reference: jos tikslas buvo rasti kelią į ramųjį vandenyną šiaurės amerikoje
2predicted: jos tikstas buvo rasikelia į ramų į vandenyna šiaurės amerikoje
3---
4reference: pietrytinėje dalyje likusių katalikų kapinių teritorija po antrojo pasaulinio karo dar padidėjo
5predicted: pietrytinė daljelikusių gatalikų kapinių teritoriją pontro pasaulnio karo dar padidėjo
6---
7reference: koplyčioje pakabintas aušros vartų marijos paveikslas
8predicted: koplyčioje pakagintas aušos fortų marijos paveikslas
9---
10reference: yra politinių debatų vedėjas
11predicted: yra politinių debatų vedėjas
12---
13reference: žmogui taip pat gali būti mirtinai pavojingi
14predicted: žmogui taip pat gali būti mirtinai pavojingi
15---
16reference: tuo pačiu metu kijeve nuverstas netekęs vokietijos paramos skoropadskis
17predicted: tuo pačiu metu kiei venų verstas netekės vokietijos paramos kropadskis
18---
19reference: visos dvylika komandų tarpusavyje sužaidžia po dvi rungtynes
20predicted: visos dvylika komandų tarpuso vysų žaidžia po dvi rungtynės
21---
22reference: kaukazo regioną sudaro kaukazo kalnai ir gretimos žemumos
23predicted: kau kazo regioną sudaro kaukazo kalnai ir gretimos žemumus
24---
25reference: tarptautinių ir rusiškų šaškių kandidatas į sporto meistrus
26predicted: tarptautinio ir rusiškos šaškių kandidatus į sporto meistrus
27---
28reference: prasideda putorano plynaukštės pietiniame pakraštyje
29predicted: prasideda futorano prynaukštės pietiniame pakraštyje
30---
31reference: miestas skirstomas į senamiestį ir naujamiestį
32predicted: miestas skirstomas į senamėsti ir naujamiestė
33---
34reference: tais pačiais metais pelnė bronzą pasaulio taurės kolumbijos etape komandinio sprinto rungtyje
35predicted: tais pačiais metais pelnį mronsa pasaulio taurės kolumbijos etape komandinio sprento rungtyje
36---
37reference: prasideda putorano plynaukštės pietiniame pakraštyje
38predicted: prasideda futorano prynaukštės pietiniame pakraštyje
39---
40reference: moterų tarptautinės meistrės vardas yra viena pakopa žemesnis už moterų tarptautinės korespondencinių šachmatų didmeistrės
41predicted: moterų tarptautinės meistrės vardas yra gana pakopo žymesnis už moterų tarptautinės kūrespondencinių šachmatų didmesčias
42---
43reference: teritoriją dengia tropinės džiunglės
44predicted: teritorija dengia tropinės žiunglės
45---
46reference: pastaroji dažnai pereina į nimcovičiaus gynybą arba bogoliubovo gynybą
47predicted: pastaruoji dažnai pereina nimcovičiaus gynyba arba bogalių buvo gymyba
48---
49reference: už tai buvo suimtas ir tris mėnesius sėdėjo butyrkų kalėjime
50predicted: užtai buvo sujumtas ir tris mėne susiedėjo butirkų kalėjime
51---
52reference: tai didžiausias pagal gyventojų skaičių regionas
53predicted: tai didžiausias pagal gyventojų skaičių redionus
54---
55reference: vilkyškių miške taip pat auga raganų eglė
56predicted: vilkiškimiškė taip pat auga ragano eglė
57---
58reference: kitas gavo skaraitiškės dvarą su palivarkais
59predicted: kitas gavos karaitiškės dvarą spolivarkais
60---1import librosa
2import torch
3import torchaudio
4from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
5from datasets import load_dataset, load_metric
6
7import numpy as np
8import re
9import string
10
11from normalizer import normalizer
12
13
14def speech_file_to_array_fn(batch):
15 speech_array, sampling_rate = torchaudio.load(batch["path"])
16 speech_array = speech_array.squeeze().numpy()
17 speech_array = librosa.resample(np.asarray(speech_array), sampling_rate, 16_000)
18
19 batch["speech"] = speech_array
20 return batch
21
22
23def predict(batch):
24 features = processor(batch["speech"], sampling_rate=16_000, return_tensors="pt", padding=True)
25
26 input_values = features.input_values.to(device)
27 attention_mask = features.attention_mask.to(device)
28
29 with torch.no_grad():
30 logits = model(input_values, attention_mask=attention_mask).logits
31
32 pred_ids = torch.argmax(logits, dim=-1)
33
34 batch["predicted"] = processor.batch_decode(pred_ids)[0]
35 return batch
36
37
38device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
39processor = Wav2Vec2Processor.from_pretrained("m3hrdadfi/wav2vec2-large-xlsr-lithuanian")
40model = Wav2Vec2ForCTC.from_pretrained("m3hrdadfi/wav2vec2-large-xlsr-lithuanian").to(device)
41
42dataset = load_dataset("common_voice", "lt", split="test")
43dataset = dataset.map(
44 normalizer,
45 fn_kwargs={"remove_extra_space": True},
46 remove_columns=list(set(dataset.column_names) - set(['sentence', 'path']))
47)
48
49dataset = dataset.map(speech_file_to_array_fn)
50result = dataset.map(predict)
51
52wer = load_metric("wer")
53
54print("WER: {:.2f}".format(100 * wer.compute(predictions=result["predicted"], references=result["sentence"])))train, validation datasets were used for training.