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
7!pip install parsivar
8!pip install num2fawords1# Normalizer
2!wget -O normalizer.py https://huggingface.co/m3hrdadfi/"wav2vec2-large-xlsr-persian-v3/raw/main/dictionary.py
3!wget -O normalizer.py https://huggingface.co/m3hrdadfi/"wav2vec2-large-xlsr-persian-v3/raw/main/normalizer.py1wget https://voice-prod-bundler-ee1969a6ce8178826482b88e843c335139bd3fb4.s3.amazonaws.com/cv-corpus-6.1-2020-12-11/fa.tar.gz
2
3tar -xzf fa.tar.gz
4rm -rf fa.tar.gz1from normalizer import normalizer
2
3def cleaning(text):
4 if not isinstance(text, str):
5 return None
6
7 return normalizer({"sentence": text}, return_dict=False)
8
9data_dir = "/content/cv-corpus-6.1-2020-12-11/fa"
10
11test = pd.read_csv(f"{data_dir}/test.tsv", sep=" ")
12test["path"] = data_dir + "/clips/" + test["path"]
13print(f"Step 0: {len(test)}")
14
15test["status"] = test["path"].apply(lambda path: True if os.path.exists(path) else None)
16test = test.dropna(subset=["path"])
17test = test.drop("status", 1)
18print(f"Step 1: {len(test)}")
19
20test["sentence"] = test["sentence"].apply(lambda t: cleaning(t))
21test = test.dropna(subset=["sentence"])
22print(f"Step 2: {len(test)}")
23
24test = test.reset_index(drop=True)
25print(test.head())
26
27test = test[["path", "sentence"]]
28test.to_csv("/content/test.csv", sep=" ", encoding="utf-8", index=False)1import numpy as np
2import pandas as pd
3
4import librosa
5import torch
6import torchaudio
7from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
8from datasets import load_dataset, load_metric
9
10import IPython.display as ipd
11
12model_name_or_path = "m3hrdadfi/wav2vec2-large-xlsr-persian-v3"
13device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
14print(model_name_or_path, device)
15
16processor = Wav2Vec2Processor.from_pretrained(model_name_or_path)
17model = Wav2Vec2ForCTC.from_pretrained(model_name_or_path).to(device)
18
19
20def speech_file_to_array_fn(batch):
21 speech_array, sampling_rate = torchaudio.load(batch["path"])
22 speech_array = speech_array.squeeze().numpy()
23 speech_array = librosa.resample(np.asarray(speech_array), sampling_rate, processor.feature_extractor.sampling_rate)
24
25 batch["speech"] = speech_array
26 return batch
27
28
29def predict(batch):
30 features = processor(
31 batch["speech"],
32 sampling_rate=processor.feature_extractor.sampling_rate,
33 return_tensors="pt",
34 padding=True
35 )
36
37 input_values = features.input_values.to(device)
38 attention_mask = features.attention_mask.to(device)
39
40 with torch.no_grad():
41 logits = model(input_values, attention_mask=attention_mask).logits
42
43 pred_ids = torch.argmax(logits, dim=-1)
44
45 batch["predicted"] = processor.batch_decode(pred_ids)
46 return batch
47
48
49dataset = load_dataset("csv", data_files={"test": "/content/test.csv"}, delimiter=" ")["test"]
50dataset = dataset.map(speech_file_to_array_fn)
51result = dataset.map(predict, batched=True, batch_size=4)1wer = load_metric("wer")
2print("WER: {:.2f}".format(100 * wer.compute(predictions=result["predicted"], references=result["sentence"])))1max_items = np.random.randint(0, len(result), 20).tolist()
2for i in max_items:
3 reference, predicted = result["sentence"][i], result["predicted"][i]
4 print("reference:", reference)
5 print("predicted:", predicted)
6 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---