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-georgian")
42model = Wav2Vec2ForCTC.from_pretrained("m3hrdadfi/wav2vec2-large-xlsr-georgian").to(device)
43
44dataset = load_dataset("common_voice", "ka", 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: პრეზიდენტობისას ბუში საქართველოს და უკრაინის დემოკრატიულ მოძრაობების და ნატოში გაწევრიანების აქტიური მხარდამჭერი იყო
2predicted: პრეზიდენტო ვისას ბუში საქართველოს და უკრაინის დემოკრატიულ მოძრაობების და ნატიში დაწევრიანების აქტიური მხარდამჭერი იყო
3---
4reference: შესაძლებელია მისი დამონება და მსახურ დემონად გადაქცევა
5predicted: შესაძლებელია მისი დამონებათ და მსახურდემანად გადაქცევა
6---
7reference: ეს გამოსახულებები აღბეჭდილი იყო მოსკოვის დიდი მთავრებისა და მეფეების ბეჭდებზე
8predicted: ეს გამოსახულებები აღბეჭდილი იყო მოსკოვის დიდი მთავრებისა და მეფეების ბეჭდებზე
9---
10reference: ჯოლიმ ოქროს გლობუსისა და კინომსახიობთა გილდიის ნომინაციები მიიღო
11predicted: ჯოლი მოქროს გლობუსისა და კინამსახიობთა გილდიის ნომინაციები მიიღო
12---
13reference: შემდგომში საქალაქო ბიბლიოთეკა სარაიონო ბიბლიოთეკად გადაკეთდა გაიზარდა წიგნადი ფონდი
14predicted: შემდღომში საქალაქო ბიბლიოთეკა სარაიონო ბიბლიოთეკად გადაკეთა გაიზარდა წიგნადი ფოვდი
15---
16reference: აბრამსი დაუკავშირდა მირანდას და ორი თვის განმავლობაში ისინი მუშაობდნენ აღნიშნული სცენის თანმხლებ მელოდიაზე
17predicted: აბრამში და უკავშირდა მირანდეს და ორითვის განმავლობაში ისინი მუშაობდნენა აღნიშნულის ჩენის მთამხლევით მელოდიაში
18---
19reference: ამჟამად თემთა პალატის ოპოზიციის ლიდერია ლეიბორისტული პარტიის ლიდერი ჯერემი კორბინი
20predicted: ამჟამად თემთა პალატის ოპოზიციის ლიდერია ლეიბურისტული პარტიის ლიდერი ჯერემი კორვინი
21---
22reference: ორი
23predicted: ორი
24---
25reference: მას შემდეგ იგი კოლექტივის მუდმივი წევრია
26predicted: მას შემდეგ იგი კოლექტივის ფუდ მივი წევრია
27---
28reference: აზერბაიჯანულ ფილოსოფიას შეიძლება მივაკუთვნოთ რუსეთის საზოგადო მოღვაწე ჰეიდარ ჯემალი
29predicted: აზერგვოიჯანალ ფილოსოფიას შეიძლება მივაკუთვნოთ რუსეთის საზოგადო მოღვაწე ჰეიდარ ჯემალი
30---
31reference: ბრონქსში ჯერომის ავენიუ ჰყოფს გამჭოლ ქუჩებს აღმოსავლეთ და დასავლეთ ნაწილებად
32predicted: რონგში დერომიწ ავენილ პოფს გამ დოლფურქებს აღმოსავლეთ და დასავლეთ ნაწილებად
33---
34reference: ჰაერი არის ჟანგბადის ის ძირითადი წყარო რომელსაც საჭიროებს ყველა ცოცხალი ორგანიზმი
35predicted: არი არის ჯამუბადესის ძირითადი წყარო რომელსაც საჭიროოებს ყველა ცოცხალი ორგანიზმი
36---
37reference: ჯგუფი უმეტესწილად ასრულებს პოპმუსიკის ჟანრის სიმღერებს
38predicted: ჯგუფიუმეტესწევად ასრულებს პოპნუსიკის ჟანრის სიმრერებს
39---
40reference: ბაბილინა მუდმივად ცდილობდა შესაძლებლობების ფარგლებში მიეღო ცოდნა და ახალი ინფორმაცია
41predicted: ბაბილინა მუდმივა ცდილობდა შესაძლებლობების ფარგლებში მიიღო ცოტნა და ახალი ინფორმაცია
42---
43reference: მრევლის რწმენით რომელი ჯგუფიც გაიმარჯვებდა მთელი წლის მანძილზე სიუხვე და ბარაქა არ მოაკლდებოდა
44predicted: მრევრის რწმენით რომელიჯგუფის გაიმარჯვებდა მთელიჭლის მანძილზა სიუყვეტაბარაქა არ მოაკლდებოდა
45---
46reference: ნინო ჩხეიძეს განსაკუთრებული ღვაწლი მიუძღვის ქუთაისისა და რუსთაველის თეატრების შემოქმედებით ცხოვრებაში
47predicted: მინო ჩხეიძეს განსაკუთრებული ღოვაწლი მიოცხვის ქუთაისისა და რუსთაველის თეატრების შემოქმედებით ცხოვრებაში
48---
49reference: იგი სამი დიალექტისგან შედგება
50predicted: იგი სამი დიალეთის გან შედგება
51---
52reference: ფორმით სირაქლემებს წააგვანან
53predicted: ომიცი რაქლემებს ააგვანამ
54---
55reference: დანი დაიბადა კოლუმბუსში ოჰაიოში
56predicted: დონი დაიბაოდა კოლუმბუსში ოხვაიოში
57---
58reference: მშენებლობისათვის გამოიყო ადგილი ყოფილი აეროპორტის რაიონში
59predicted: შენებლობისათვის გამოიყო ადგილი ყოფილი აეროპორტის რაიონში
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-georgian")
40model = Wav2Vec2ForCTC.from_pretrained("m3hrdadfi/wav2vec2-large-xlsr-georgian").to(device)
41
42dataset = load_dataset("common_voice", "ka", 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.