paint-brush
wav2vec2 পার্ট 2-এর সাথে কাজ করা - Finetuned ASR মডেলগুলিতে অনুমান চালানোদ্বারা@pictureinthenoise
521 পড়া
521 পড়া

wav2vec2 পার্ট 2-এর সাথে কাজ করা - Finetuned ASR মডেলগুলিতে অনুমান চালানো

দ্বারা Picture in the Noise11m2024/05/07
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

এই সঙ্গী নির্দেশিকা একটি ফাইনটিউনড wav2vec2 XLS-R মডেলে অনুমান চালানোর পদক্ষেপগুলি ব্যাখ্যা করে। এটি "wav2vec2 অংশ 1 এর সাথে কাজ করা - স্বয়ংক্রিয় বক্তৃতা স্বীকৃতির জন্য XLS-R ফাইনটিউনিং" নির্দেশিকাকে পরিপূরক করে। গাইড একটি Kaggle নোটবুক তৈরি করার জন্য ধাপে ধাপে নির্দেশাবলী প্রদান করে যা অনুমান চালানোর জন্য ব্যবহার করা যেতে পারে।
featured image - wav2vec2 পার্ট 2-এর সাথে কাজ করা - Finetuned ASR মডেলগুলিতে অনুমান চালানো
Picture in the Noise HackerNoon profile picture
0-item
1-item

ভূমিকা

এটি wav2vec2 পার্ট 1-এর সাথে কাজ করার জন্য একটি সহচর নির্দেশিকা - স্বয়ংক্রিয় বক্তৃতা শনাক্তকরণের জন্য XLS-R ফাইনটিউনিং ("পার্ট 1 গাইড")। চিলির স্প্যানিশ ভাষায় Meta AI-এর wav2vec2 XLS-R ("XLS-R") মডেলকে কীভাবে ফাইনটিউন করা যায় সে বিষয়ে আমি পার্ট 1 গাইড লিখেছি। এটা ধরে নেওয়া হয় যে আপনি সেই গাইডটি সম্পূর্ণ করেছেন এবং আপনার নিজস্ব ফাইনটিউন করা XLS-R মডেল তৈরি করেছেন। এই গাইডটি একটি Kaggle নোটবুকের মাধ্যমে আপনার ফাইনটিউন করা XLS-R মডেলে অনুমান চালানোর পদক্ষেপগুলি ব্যাখ্যা করবে।

পূর্বশর্ত এবং আপনি শুরু করার আগে

গাইডটি সম্পূর্ণ করতে, আপনার থাকতে হবে:


  • স্প্যানিশ ভাষার জন্য একটি সুন্দর XLS-R মডেল।
  • একটি বিদ্যমান কাগল অ্যাকাউন্ট
  • পাইথনের মধ্যবর্তী জ্ঞান।
  • কাগল নোটবুকের সাথে কাজ করার মধ্যবর্তী জ্ঞান।
  • এমএল ধারণার মধ্যবর্তী জ্ঞান।
  • ASR ধারণার প্রাথমিক জ্ঞান।

ইনফারেন্স নোটবুক তৈরি করা

ধাপ 1 - আপনার কাগল এনভায়রনমেন্ট সেট আপ করা

ধাপ 1.1 - একটি নতুন কাগল নোটবুক তৈরি করা

  1. Kaggle লগ ইন করুন.
  2. একটি নতুন Kaggle নোটবুক তৈরি করুন.
  3. নোটবুকের নাম ইচ্ছেমতো পরিবর্তন করা যায়। এই নির্দেশিকাটি নোটবুকের নাম spanish-asr-inference ব্যবহার করে।

ধাপ 1.2 - টেস্ট ডেটাসেট যোগ করা

এই নির্দেশিকাটি পরীক্ষার ডেটার জন্য পেরুভিয়ান স্প্যানিশ স্পিচ ডেটা সেট ব্যবহার করে। চিলির স্প্যানিশ স্পিচ ডেটা সেটের মতো, পেরুভিয়ান স্পীচ ডেটাসেটেও দুটি সাব-ডেটাসেট রয়েছে: পুরুষ পেরুভিয়ান স্পিকারদের 2,918 রেকর্ডিং এবং মহিলা পেরুভিয়ান স্পিকারদের 2,529 রেকর্ডিং।


এই ডেটাসেটটি 2টি স্বতন্ত্র ডেটাসেট হিসাবে Kaggle-এ আপলোড করা হয়েছে:


Add Input- এ ক্লিক করে এই দুটি ডেটাসেট আপনার Kaggle নোটবুকে যোগ করুন।

ধাপ 1.3 - ফাইনটিউনড মডেল যোগ করা

আপনি wav2vec2 এর সাথে কাজ করার ধাপ 4- এ আপনার ফাইনটিউন করা মডেলটি সংরক্ষণ করা উচিত ছিল পার্ট 1 - কাগল মডেল হিসাবে স্বয়ংক্রিয় স্পিচ রিকগনিশন গাইডের জন্য XLS-R ফাইনটিউনিং।


অ্যাড ইনপুট- এ ক্লিক করে আপনার কাগল নোটবুকে আপনার ফাইনটিউন করা মডেল যোগ করুন।

ধাপ 2 - ইনফারেন্স নোটবুক তৈরি করা

নিম্নলিখিত 16টি উপ-পদক্ষেপ অনুমান নোটবুকের প্রতিটি 16টি ঘরকে ক্রমানুসারে তৈরি করে। আপনি লক্ষ্য করবেন যে পার্ট 1 গাইডের অনেকগুলি একই ইউটিলিটি পদ্ধতি এখানে ব্যবহার করা হয়েছে।

ধাপ 2.1 - সেল 1: প্যাকেজ ইনস্টল করা

অনুমান নোটবুকের প্রথম কক্ষটি নির্ভরতা ইনস্টল করে। প্রথম ঘর সেট করুন:


 ### CELL 1: Install Packages ### !pip install --upgrade torchaudio !pip install jiwer

ধাপ 2.2 - সেল 2: পাইথন প্যাকেজ আমদানি করা

দ্বিতীয় সেল আমদানির জন্য পাইথন প্যাকেজ প্রয়োজন। দ্বিতীয় ঘরটি এতে সেট করুন:


 ### CELL 2: Import Python packages ### import re import math import random import pandas as pd import torchaudio from datasets import load_metric from transformers import pipeline

ধাপ 2.3 - সেল 3: WER মেট্রিক লোড হচ্ছে

তৃতীয় কক্ষ HuggingFace WER মূল্যায়ন মেট্রিক আমদানি করে। তৃতীয় কক্ষটি এতে সেট করুন:


 ### CELL 3: Load WER metric ### wer_metric = load_metric("wer")


  • পরীক্ষার ডেটাতে সূক্ষ্ম সুর করা মডেলের কর্মক্ষমতা পরিমাপ করতে WER ব্যবহার করা হবে।

ধাপ 2.4 - সেল 4: কনস্ট্যান্ট সেট করা

চতুর্থ কক্ষটি ধ্রুবক সেট করে যা পুরো নোটবুক জুড়ে ব্যবহার করা হবে। চতুর্থ ঘর সেট করুন:


 ### CELL 4: Constants ### # Testing data TEST_DATA_PATH_MALE = "/kaggle/input/google-spanish-speakers-peru-male/" TEST_DATA_PATH_FEMALE = "/kaggle/input/google-spanish-speakers-peru-female/" EXT = ".wav" NUM_LOAD_FROM_EACH_SET = 3 # Special characters SPECIAL_CHARS = r"[\d\,\-\;\!\¡\?\¿\।\'\'\"\–\'\:\/\.\“\”\৷\…\‚\॥\\]" # Sampling rates ORIG_SAMPLING_RATE = 48000 TGT_SAMPLING_RATE = 16000

ধাপ 2.5 - সেল 5: ইনডেক্স ফাইল পড়া, টেক্সট পরিষ্কার করা এবং শব্দভান্ডার তৈরি করার জন্য ইউটিলিটি পদ্ধতি

পঞ্চম কক্ষটি ডেটাসেট সূচক ফাইলগুলি পড়ার পাশাপাশি ট্রান্সক্রিপশন পাঠ্য পরিষ্কার করার জন্য এবং পরীক্ষার ডেটা থেকে নমুনার একটি এলোমেলো সেট তৈরি করার জন্য ইউটিলিটি পদ্ধতিগুলিকে সংজ্ঞায়িত করে৷ পঞ্চম ঘর সেট করুন:


 ### CELL 5: Utility methods for reading index files, cleaning text, random indices generator ### def read_index_file_data(path: str, filename: str): data = [] with open(path + filename, "r", encoding = "utf8") as f: lines = f.readlines() for line in lines: file_and_text = line.split("\t") data.append([path + file_and_text[0] + EXT, file_and_text[1].replace("\n", "")]) return data def clean_text(text: str) -> str: cleaned_text = re.sub(SPECIAL_CHARS, "", text) cleaned_text = cleaned_text.lower() return cleaned_text def get_random_samples(dataset: list, num: int) -> list: used = [] samples = [] for i in range(num): a = -1 while a == -1 or a in used: a = math.floor(len(dataset) * random.random()) samples.append(dataset[a]) used.append(a) return samples


  • read_index_file_data পদ্ধতি একটি line_index.tsv ডেটাসেট সূচক ফাইল পড়ে এবং অডিও ফাইলের নাম এবং ট্রান্সক্রিপশন ডেটা সহ তালিকার একটি তালিকা তৈরি করে, যেমন:


 [ ["/kaggle/input/google-spanish-speakers-chile-male/clm_08421_01719502739", "Es un viaje de negocios solamente voy por una noche"] ... ]


  • clean_text পদ্ধতিটি স্টেপ 2.4 -এ SPECIAL_CHARS এর জন্য নির্ধারিত রেগুলার এক্সপ্রেশন দ্বারা নির্দিষ্ট করা অক্ষরের প্রতিটি টেক্সট ট্রান্সক্রিপশন বাদ দিতে ব্যবহৃত হয়। এই অক্ষরগুলি, বিরাম চিহ্ন সহ, বাদ দেওয়া যেতে পারে কারণ তারা মডেলটিকে অডিও বৈশিষ্ট্য এবং পাঠ্য ট্রান্সক্রিপশনগুলির মধ্যে ম্যাপিং শিখতে প্রশিক্ষণ দেওয়ার সময় কোনও শব্দার্থিক মান প্রদান করে না।
  • get_random_samples পদ্ধতিটি 2.4 ধাপে ধ্রুবক NUM_LOAD_FROM_EACH_SET দ্বারা সেট করা পরিমাণ সহ র্যান্ডম পরীক্ষার নমুনার একটি সেট প্রদান করে।

ধাপ 2.6 - সেল 6: অডিও ডেটা লোড এবং পুনরায় নমুনা করার জন্য ইউটিলিটি পদ্ধতি

ষষ্ঠ কক্ষ অডিও ডেটা লোড এবং পুনরায় নমুনা করার জন্য torchaudio ব্যবহার করে ইউটিলিটি পদ্ধতি সংজ্ঞায়িত করে। ষষ্ঠ কক্ষটি এতে সেট করুন:


 ### CELL 7: Utility methods for loading and resampling audio data ### def read_audio_data(file): speech_array, sampling_rate = torchaudio.load(file, normalize = True) return speech_array, sampling_rate def resample(waveform): transform = torchaudio.transforms.Resample(ORIG_SAMPLING_RATE, TGT_SAMPLING_RATE) waveform = transform(waveform) return waveform[0]


  • read_audio_data পদ্ধতি একটি নির্দিষ্ট অডিও ফাইল লোড করে এবং একটি torch.Tensor প্রদান করে। অডিওর নমুনা হার সহ অডিও ডেটার টেনসর মাল্টি-ডাইমেনশনাল ম্যাট্রিক্স। ট্রেনিং ডেটার সমস্ত অডিও ফাইলের স্যাম্পলিং রেট 48000 Hz। এই "আসল" স্যাম্পলিং রেট 2.4 ধাপে স্থির ORIG_SAMPLING_RATE দ্বারা ধরা হয়েছে।
  • resample পদ্ধতিটি 48000 এর স্যাম্পলিং রেট থেকে 16000 এর টার্গেট স্যাম্পলিং রেট পর্যন্ত অডিও ডেটার নমুনা কমাতে ব্যবহৃত হয়।

ধাপ 2.7 - সেল 7: পরীক্ষার ডেটা পড়া

সপ্তম কক্ষটি 2.5 ধাপে সংজ্ঞায়িত read_index_file_data পদ্ধতি ব্যবহার করে পুরুষ স্পিকারের রেকর্ডিং এবং মহিলা বক্তাদের রেকর্ডিংয়ের জন্য পরীক্ষার ডেটা সূচক ফাইলগুলি পড়ে। সপ্তম ঘর সেট করুন:


 ### CELL 7: Read test data ### test_data_male = read_index_file_data(TEST_DATA_PATH_MALE, "line_index.tsv") test_data_female = read_index_file_data(TEST_DATA_PATH_FEMALE, "line_index.tsv")

ধাপ 2.8 - সেল 8: এলোমেলো পরীক্ষার নমুনার তালিকা তৈরি করা

অষ্টম সেল ধাপ 2.5 এ সংজ্ঞায়িত get_random_samples পদ্ধতি ব্যবহার করে এলোমেলো পরীক্ষার নমুনার সেট তৈরি করে। অষ্টম ঘর সেট করুন:


 ### CELL 8: Generate lists of random test samples ### random_test_samples_male = get_random_samples(test_data_male, NUM_LOAD_FROM_EACH_SET) random_test_samples_female = get_random_samples(test_data_female, NUM_LOAD_FROM_EACH_SET)

ধাপ 2.9 - সেল 9: পরীক্ষার ডেটা একত্রিত করা

নবম কোষ পুরুষ পরীক্ষার নমুনা এবং মহিলা পরীক্ষার নমুনাগুলিকে একক তালিকায় একত্রিত করে। নবম কক্ষটি এতে সেট করুন:


 ### CELL 9: Combine test data ### all_test_samples = random_test_samples_male + random_test_samples_female

ধাপ 2.10 - সেল 10: ক্লিনিং ট্রান্সক্রিপশন টেস্ট

দশম কোষটি প্রতিটি পরীক্ষার ডেটা নমুনার উপর পুনরাবৃত্তি করে এবং ধাপ 2.5- এ সংজ্ঞায়িত clean_text পদ্ধতি ব্যবহার করে সংশ্লিষ্ট ট্রান্সক্রিপশন পাঠ্যটি পরিষ্কার করে। দশম ঘর সেট করুন:


 ### CELL 10: Clean text transcriptions ### for index in range(len(all_test_samples)): all_test_samples[index][1] = clean_text(all_test_samples[index][1])

ধাপ 2.11 - সেল 11: অডিও ডেটা লোড হচ্ছে

একাদশ কক্ষটি all_test_samples তালিকায় নির্দিষ্ট করা প্রতিটি অডিও ফাইল লোড করে। একাদশ ঘর সেট করুন:


 ### CELL 11: Load audio data ### all_test_data = [] for index in range(len(all_test_samples)): speech_array, sampling_rate = read_audio_data(all_test_samples[index][0]) all_test_data.append({ "raw": speech_array, "sampling_rate": sampling_rate, "target_text": all_test_samples[index][1] })


  • অডিও ডেটা torch.Tensor হিসাবে ফেরত দেওয়া হয়৷ টেনসর এবং অভিধানের একটি তালিকা হিসাবে all_test_data এ সংরক্ষণ করা হয়৷ প্রতিটি অভিধানে একটি নির্দিষ্ট নমুনার জন্য অডিও ডেটা, নমুনার হার এবং অডিওর পাঠ্য প্রতিলিপি রয়েছে।

ধাপ 2.12 - সেল 12: অডিও ডেটা পুনরায় নমুনা করা

দ্বাদশ কক্ষটি 16000 এর লক্ষ্য নমুনা হারে অডিও ডেটাকে পুনরায় নমুনা দেয়। দ্বাদশ কক্ষটি এতে সেট করুন:


 ### CELL 12: Resample audio data and cast to NumPy arrays ### all_test_data = [{"raw": resample(sample["raw"]).numpy(), "sampling_rate": TGT_SAMPLING_RATE, "target_text": sample["target_text"]} for sample in all_test_data]

ধাপ 2.13 - সেল 13: স্বয়ংক্রিয় স্পিচ রিকগনিশন পাইপলাইনের ইনস্ট্যান্স শুরু করা

ত্রয়োদশ সেলটি HuggingFace transformer লাইব্রেরি pipeline ক্লাসের একটি উদাহরণ শুরু করে। ত্রয়োদশ সেল এতে সেট করুন:


 ### CELL 13: Initialize instance of Automatic Speech Recognition Pipeline ### transcriber = pipeline("automatic-speech-recognition", model = "YOUR_FINETUNED_MODEL_PATH")


  • model প্যারামিটারটি অবশ্যই 1.3 ধাপে কাগল নোটবুকে যোগ করা আপনার ফাইনটিউন করা মডেলের পথে সেট করতে হবে, যেমন:


 transcriber = pipeline("automatic-speech-recognition", model = "/kaggle/input/xls-r-300m-chilean-spanish/transformers/hardy-pine/1")

ধাপ 2.14 - সেল 14: পূর্বাভাস তৈরি করা

চতুর্দশ কক্ষটি টেক্সট ভবিষ্যদ্বাণী তৈরি করতে পরীক্ষার ডেটার পূর্ববর্তী ধাপে transcriber কল করে। চতুর্দশ কক্ষটি এতে সেট করুন:


 ### CELL 14: Generate transcriptions ### transcriptions = transcriber(all_test_data)

ধাপ 2.15 - সেল 15: WER মেট্রিক্স গণনা করা

পঞ্চদশ সেল প্রতিটি ভবিষ্যদ্বাণীর জন্য WER স্কোর এবং সেইসাথে সমস্ত ভবিষ্যদ্বাণীর জন্য একটি সামগ্রিক WER স্কোর গণনা করে। পঞ্চদশ সেল এতে সেট করুন:


 ### CELL 15: Calculate WER metrics ### predictions = [transcription["text"] for transcription in transcriptions] references = [transcription["target_text"][0] for transcription in transcriptions] wers = [] for p in range(len(predictions)): wer = wer_metric.compute(predictions = [predictions[p]], references = [references[p]]) wers.append(wer) zipped = list(zip(predictions, references, wers)) df = pd.DataFrame(zipped, columns=["Prediction", "Reference", "WER"]) wer = wer_metric.compute(predictions = predictions, references = references)

ধাপ 2.16 - সেল 16: WER মেট্রিক্স প্রিন্ট করা

ষোড়শ এবং শেষ কক্ষটি কেবল পূর্ববর্তী ধাপ থেকে WER গণনাগুলি প্রিন্ট করে। ষোড়শ কক্ষটি এতে সেট করুন:


 ### CELL 16: Output WER metrics ### pd.set_option("display.max_colwidth", None) print(f"Overall WER: {wer}") print(df)

WER বিশ্লেষণ

যেহেতু নোটবুক পরীক্ষার ডেটার এলোমেলো নমুনার উপর ভবিষ্যদ্বাণী তৈরি করে, তাই প্রতিবার নোটবুক চালানোর সময় আউটপুট পরিবর্তিত হবে। মোট 6টি পরীক্ষার নমুনার জন্য NUM_LOAD_FROM_EACH_SET সেট করে 3 এ সেট করা নোটবুকের একটি দৌড়ে নিম্নলিখিত আউটপুট তৈরি হয়েছিল:


 Overall WER: 0.013888888888888888 Prediction \ 0 quiero que me reserves el mejor asiento del teatro 1 el llano en llamas es un clásico de juan rulfo 2 el cuadro de los alcatraces es una de las pinturas más famosas de diego rivera 3 hay tres cafés que están abiertos hasta las once de la noche 4 quiero que me recomiendes una dieta pero donde uno pueda comer algo no puras verduras 5 cuántos albergues se abrieron después del terremoto del diecinueve de setiembre Reference \ 0 quiero que me reserves el mejor asiento del teatro 1 el llano en llamas es un clásico de juan rulfo 2 el cuadro de los alcatraces es una de las pinturas más famosas de diego rivera 3 hay tres cafés que están abiertos hasta las once de la noche 4 quiero que me recomiendes una dieta pero donde uno pueda comer algo no puras verduras 5 cuántos albergues se abrieron después del terremoto del diecinueve de septiembre WER 0 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.090909


দেখা যায়, মডেল একটি চমৎকার কাজ করেছেন! এটি ষষ্ঠ নমুনা (সূচী 5 ) দিয়ে শুধুমাত্র একটি ত্রুটি করেছে, septiembre শব্দটিকে setiembre হিসাবে ভুল বানান করেছে। অবশ্যই, বিভিন্ন পরীক্ষার নমুনা এবং আরও গুরুত্বপূর্ণভাবে, একটি বৃহত্তর সংখ্যক পরীক্ষার নমুনা সহ নোটবুকটি আবার চালানোর ফলে বিভিন্ন এবং আরও তথ্যপূর্ণ ফলাফল পাওয়া যাবে। তা সত্ত্বেও, এই সীমিত তথ্য থেকে বোঝা যায় মডেলটি স্প্যানিশের বিভিন্ন উপভাষায় ভালো পারফর্ম করতে পারে - অর্থাৎ এটি চিলির স্প্যানিশ ভাষায় প্রশিক্ষিত ছিল, কিন্তু পেরুভিয়ান স্প্যানিশ ভাষায় ভালো পারফর্ম করতে দেখা যাচ্ছে।

উপসংহার

আপনি যদি wav2vec2 মডেলের সাথে কাজ করতে শিখছেন তবে আমি আশা করি যে wav2vec2 এর সাথে কাজ করা পার্ট 1 - স্বয়ংক্রিয় বক্তৃতা শনাক্তকরণের জন্য XLS-R নির্দেশিকা এবং এই নির্দেশিকাটি আপনার জন্য উপযোগী ছিল। উল্লিখিত হিসাবে, পার্ট 1 গাইড দ্বারা উত্পন্ন সূক্ষ্ম সুর করা মডেলটি অত্যাধুনিক নয়, তবে এটি এখনও অনেক অ্যাপ্লিকেশনের জন্য কার্যকর প্রমাণিত হওয়া উচিত। শুভ বিল্ডিং!