Meta AI 2021 সালের শেষে wav2vec2 XLS-R ("XLS-R") চালু করেছে। XLS-R হল একটি মেশিন লার্নিং ("ML") মডেল ক্রস-লিঙ্গুয়াল স্পিচ রিপ্রেজেন্টেশন শেখার জন্য; এবং এটি 128টি ভাষায় সর্বজনীনভাবে উপলব্ধ 400,000 ঘন্টার বেশি স্পিচ অডিওর উপর প্রশিক্ষিত হয়েছিল। প্রকাশের পর, মডেলটি মেটা এআই-এর XLSR-53 ক্রস-লিঙ্গুয়াল মডেলের ওপরে একটি লাফ দিয়েছিল যা 53টি ভাষায় প্রায় 50,000 ঘণ্টার স্পিচ অডিওতে প্রশিক্ষিত ছিল।
এই নির্দেশিকা একটি Kaggle নোটবুক ব্যবহার করে স্বয়ংক্রিয় স্পিচ রিকগনিশন ("ASR") এর জন্য XLS-R ফাইনটিউন করার পদক্ষেপগুলি ব্যাখ্যা করে৷ মডেলটি চিলির স্প্যানিশ ভাষায় ফাইনটিউন করা হবে, তবে আপনার পছন্দের বিভিন্ন ভাষায় XLS-R ফাইনটিউন করার জন্য সাধারণ পদক্ষেপগুলি অনুসরণ করা যেতে পারে।
ফাইনটিউন করা মডেলের উপর চলমান অনুমান একটি সহচর টিউটোরিয়ালে বর্ণনা করা হবে যা এই নির্দেশিকাটিকে দুটি অংশের প্রথমটি তৈরি করে। আমি একটি পৃথক অনুমান-নির্দিষ্ট গাইড তৈরি করার সিদ্ধান্ত নিয়েছি কারণ এই ফাইনটিউনিং গাইডটি একটু দীর্ঘ হয়ে গেছে।
এটা ধরে নেওয়া হয় যে আপনার একটি বিদ্যমান ML ব্যাকগ্রাউন্ড আছে এবং আপনি মৌলিক ASR ধারণাগুলি বোঝেন। নতুনদের বিল্ড ধাপ অনুসরণ/বুঝতে অসুবিধা হতে পারে।
2020 সালে প্রবর্তিত আসল wav2vec2 মডেলটি 960 ঘন্টার Librispeech ডেটাসেট স্পিচ অডিও এবং ~53,200 ঘন্টা LibriVox ডেটাসেট স্পিচ অডিওতে প্রশিক্ষিত ছিল। এটি প্রকাশের পর, দুটি মডেলের আকার উপলব্ধ ছিল: 95 মিলিয়ন প্যারামিটার সহ BASE মডেল এবং 317 মিলিয়ন প্যারামিটার সহ LARGE মডেল।
অন্যদিকে, XLS-R, 5টি ডেটাসেট থেকে বহুভাষিক বক্তৃতা অডিওতে প্রশিক্ষিত ছিল:
3টি XLS-R মডেল রয়েছে: 300 মিলিয়ন প্যারামিটার সহ XLS-R (0.3B) , 1 বিলিয়ন প্যারামিটার সহ XLS-R (1B) , এবং 2 বিলিয়ন প্যারামিটার সহ XLS-R (2B) ৷ এই গাইড XLS-R (0.3B) মডেল ব্যবহার করবে।
wav2vev2 মডেলগুলিকে কীভাবে ফাইনটিউন করা যায় সে সম্পর্কে কিছু দুর্দান্ত লেখা রয়েছে, সম্ভবত এটি এক ধরণের "গোল্ড স্ট্যান্ডার্ড"। অবশ্যই, সাধারণ পদ্ধতি এখানে অনুকরণ করে যা আপনি অন্যান্য গাইডগুলিতে পাবেন। আপনি করবেন:
যাইহোক, এই গাইড এবং অন্যদের মধ্যে তিনটি মূল পার্থক্য রয়েছে:
গাইডটি সম্পূর্ণ করতে, আপনার থাকতে হবে:
আপনি নোটবুক তৈরি করা শুরু করার আগে, সরাসরি নীচের দুটি উপ-বিভাগ পর্যালোচনা করা সহায়ক হতে পারে। তারা বর্ণনা করে:
ভূমিকায় উল্লিখিত হিসাবে, XLS-R মডেলটি চিলির স্প্যানিশ-এ ফাইনটিউন করা হবে। নির্দিষ্ট ডেটাসেট হল চিলির স্প্যানিশ স্পিচ ডেটা সেট যা গুয়েভারা-রুকোজ এট আল দ্বারা তৈরি করা হয়েছে৷ এটি OpenSLR এ ডাউনলোডের জন্য উপলব্ধ। ডেটাসেট দুটি উপ-ডেটাসেট নিয়ে গঠিত: (1) চিলির পুরুষ বক্তার 2,636টি অডিও রেকর্ডিং এবং (2) চিলির মহিলা স্পিকারের 1,738টি অডিও রেকর্ডিং৷
প্রতিটি উপ-ডেটাসেটে একটি line_index.tsv
সূচক ফাইল অন্তর্ভুক্ত থাকে। প্রতিটি সূচক ফাইলের প্রতিটি লাইনে একটি অডিও ফাইলের নাম এবং সংশ্লিষ্ট ফাইলের অডিওর একটি ট্রান্সক্রিপশন রয়েছে, যেমন:
clm_08421_01719502739 Es un viaje de negocios solamente voy por una noche clm_02436_02011517900 Se usa para incitar a alguien a sacar el mayor provecho del dia presente
আমি সুবিধার জন্য Kaggle এ চিলির স্প্যানিশ স্পিচ ডেটা সেট আপলোড করেছি। চিলির পুরুষ স্পিকারদের রেকর্ডিংয়ের জন্য একটি কাগল ডেটাসেট এবং চিলির মহিলা স্পিকারদের রেকর্ডিংয়ের জন্য একটি কাগল ডেটাসেট রয়েছে৷ এই Kaggle ডেটাসেটগুলি Kaggle নোটবুকে যোগ করা হবে যা আপনি এই গাইডের ধাপগুলি অনুসরণ করে তৈরি করবেন।
WER হল একটি মেট্রিক যা স্বয়ংক্রিয় বক্তৃতা শনাক্তকরণ মডেলগুলির কর্মক্ষমতা পরিমাপ করতে ব্যবহার করা যেতে পারে। WER একটি টেক্সট রেফারেন্সের সাথে একটি পাঠ্যের পূর্বাভাস কতটা কাছাকাছি তা পরিমাপ করার জন্য একটি প্রক্রিয়া প্রদান করে। WER 3 ধরনের ত্রুটি রেকর্ড করে এটি সম্পন্ন করে:
প্রতিস্থাপন ( S
): একটি প্রতিস্থাপন ত্রুটি রেকর্ড করা হয় যখন ভবিষ্যদ্বাণীতে এমন একটি শব্দ থাকে যা রেফারেন্সের অনুরূপ শব্দ থেকে আলাদা। উদাহরণস্বরূপ, এটি ঘটে যখন ভবিষ্যদ্বাণী রেফারেন্সে একটি শব্দের বানান ভুল করে।
মুছে ফেলা ( D
): একটি মুছে ফেলার ত্রুটি রেকর্ড করা হয় যখন ভবিষ্যদ্বাণীতে এমন একটি শব্দ থাকে যা রেফারেন্সে উপস্থিত নেই।
সন্নিবেশ ( I
): একটি সন্নিবেশ ত্রুটি রেকর্ড করা হয় যখন পূর্বাভাসে রেফারেন্সে উপস্থিত একটি শব্দ থাকে না।
স্পষ্টতই, WER শব্দ-স্তরে কাজ করে। WER মেট্রিকের সূত্রটি নিম্নরূপ:
WER = (S + D + I)/N where: S = number of substition errors D = number of deletion errors I = number of insertion errors N = number of words in the reference
স্প্যানিশ ভাষায় একটি সাধারণ WER উদাহরণ নিম্নরূপ:
prediction: "Él está saliendo." reference: "Él está saltando."
একটি টেবিল ভবিষ্যদ্বাণীতে ত্রুটিগুলি কল্পনা করতে সহায়তা করে:
টেক্সট | শব্দ 1 | শব্দ 2 | শব্দ 3 |
---|---|---|---|
ভবিষ্যদ্বাণী | ইল | está | saliendo |
রেফারেন্স | ইল | está | লবণাক্ত |
| সঠিক | সঠিক | প্রতিস্থাপন |
ভবিষ্যদ্বাণীটিতে 1টি প্রতিস্থাপন ত্রুটি, 0টি মুছে ফেলার ত্রুটি এবং 0টি সন্নিবেশ ত্রুটি রয়েছে৷ সুতরাং, এই উদাহরণের জন্য WER হল:
WER = 1 + 0 + 0 / 3 = 1/3 = 0.33
এটা স্পষ্ট হওয়া উচিত যে শব্দ ত্রুটি হার অগত্যা আমাদের বলে না যে কোন নির্দিষ্ট ত্রুটি বিদ্যমান। উপরের উদাহরণে, WER শনাক্ত করে যে WORD 3 ভবিষ্যদ্বাণী করা পাঠ্যে একটি ত্রুটি রয়েছে, কিন্তু এটি আমাদের বলে না যে i এবং e অক্ষরগুলি ভবিষ্যদ্বাণীতে ভুল। অন্যান্য মেট্রিক্স, যেমন ক্যারেক্টার এরর রেট ("CER"), আরো সুনির্দিষ্ট ত্রুটি বিশ্লেষণের জন্য ব্যবহার করা যেতে পারে।
আপনি এখন ফাইনটিউনিং নোটবুক তৈরি শুরু করতে প্রস্তুত৷
আপনার Kaggle নোটবুক আপনার WandB API কী ব্যবহার করে WandB-এ প্রশিক্ষণ চালানোর ডেটা পাঠাতে কনফিগার করা আবশ্যক। এটি করার জন্য, আপনাকে এটি অনুলিপি করতে হবে।
www.wandb.com
এ।www.wandb.ai/authorize
এ নেভিগেট করুন।
xls-r-300m-chilean-spanish-asr
ব্যবহার করে।আপনার WandB API কী নিরাপদে সংরক্ষণ করতে একটি Kaggle সিক্রেট ব্যবহার করা হবে।
WANDB_API_KEY
লেবেল লিখুন এবং মানটির জন্য আপনার WandB API কী লিখুন।WANDB_API_KEY
লেবেল ক্ষেত্রের বাম দিকে সংযুক্ত চেকবক্সটি চেক করা হয়েছে৷চিলির স্প্যানিশ স্পিচ ডেটা সেটটি 2টি স্বতন্ত্র ডেটাসেট হিসাবে Kaggle-এ আপলোড করা হয়েছে:
আপনার Kaggle নোটবুকে এই উভয় ডেটাসেট যোগ করুন।
নিচের 32টি উপ-পদক্ষেপগুলি প্রতিটি ফাইনটিউনিং নোটবুকের 32টি ঘরকে ক্রমানুসারে তৈরি করে।
ফাইনটিউনিং নোটবুকের প্রথম কক্ষটি নির্ভরতা ইনস্টল করে। প্রথম ঘর সেট করুন:
### CELL 1: Install Packages ### !pip install --upgrade torchaudio !pip install jiwer
torchaudio
প্যাকেজটিকে সর্বশেষ সংস্করণে আপগ্রেড করে। torchaudio
অডিও ফাইল লোড করতে এবং অডিও ডেটা পুনরায় নমুনা করতে ব্যবহার করা হবে।jiwer
প্যাকেজটি ইনস্টল করে যা পরে ব্যবহৃত HuggingFace Datasets
লাইব্রেরি load_metric
পদ্ধতি ব্যবহার করার জন্য প্রয়োজন।দ্বিতীয় সেল আমদানির জন্য পাইথন প্যাকেজ প্রয়োজন। দ্বিতীয় ঘরটি এতে সেট করুন:
### CELL 2: Import Python packages ### import wandb from kaggle_secrets import UserSecretsClient import math import re import numpy as np import pandas as pd import torch import torchaudio import json from typing import Any, Dict, List, Optional, Union from dataclasses import dataclass from datasets import Dataset, load_metric, load_dataset, Audio from transformers import Wav2Vec2CTCTokenizer from transformers import Wav2Vec2FeatureExtractor from transformers import Wav2Vec2Processor from transformers import Wav2Vec2ForCTC from transformers import TrainingArguments from transformers import Trainer
transformers
লাইব্রেরি এবং সংশ্লিষ্ট Wav2Vec2*
ক্লাসগুলি ফাইনটিউনিংয়ের জন্য ব্যবহৃত কার্যকারিতার মেরুদণ্ড প্রদান করে।তৃতীয় কক্ষ HuggingFace WER মূল্যায়ন মেট্রিক আমদানি করে। তৃতীয় কক্ষটি এতে সেট করুন:
### CELL 3: Load WER metric ### wer_metric = load_metric("wer")
চতুর্থ কক্ষটি আপনার WANDB_API_KEY
গোপনীয়তা পুনরুদ্ধার করে যা ধাপ 2.2 এ সেট করা হয়েছিল। চতুর্থ ঘর সেট করুন:
### CELL 4: Login to WandB ### user_secrets = UserSecretsClient() wandb_api_key = user_secrets.get_secret("WANDB_API_KEY") wandb.login(key = wandb_api_key)
পঞ্চম কক্ষ ধ্রুবক সেট করে যা পুরো নোটবুক জুড়ে ব্যবহার করা হবে। পঞ্চম ঘর সেট করুন:
### CELL 5: Constants ### # Training data TRAINING_DATA_PATH_MALE = "/kaggle/input/google-spanish-speakers-chile-male/" TRAINING_DATA_PATH_FEMALE = "/kaggle/input/google-spanish-speakers-chile-female/" EXT = ".wav" NUM_LOAD_FROM_EACH_SET = 1600 # Vocabulary VOCAB_FILE_PATH = "/kaggle/working/" SPECIAL_CHARS = r"[\d\,\-\;\!\¡\?\¿\।\'\'\"\–\'\:\/\.\“\”\৷\…\‚\॥\\]" # Sampling rates ORIG_SAMPLING_RATE = 48000 TGT_SAMPLING_RATE = 16000 # Training/validation data split SPLIT_PCT = 0.10 # Model parameters MODEL = "facebook/wav2vec2-xls-r-300m" USE_SAFETENSORS = False # Training arguments OUTPUT_DIR_PATH = "/kaggle/working/xls-r-300m-chilean-spanish-asr" TRAIN_BATCH_SIZE = 18 EVAL_BATCH_SIZE = 10 TRAIN_EPOCHS = 30 SAVE_STEPS = 3200 EVAL_STEPS = 100 LOGGING_STEPS = 100 LEARNING_RATE = 1e-4 WARMUP_STEPS = 800
ষষ্ঠ কক্ষটি ডেটাসেট সূচক ফাইলগুলি পড়ার জন্য উপযোগী পদ্ধতিগুলিকে সংজ্ঞায়িত করে (উপরের প্রশিক্ষণ ডেটাসেট উপ-বিভাগটি দেখুন), পাশাপাশি ট্রান্সক্রিপশন পাঠ্য পরিষ্কার করার এবং শব্দভাণ্ডার তৈরি করার জন্য। ষষ্ঠ কক্ষটি এতে সেট করুন:
### CELL 6: Utility methods for reading index files, cleaning text, and creating vocabulary ### 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 truncate_training_dataset(dataset: list) -> list: if type(NUM_LOAD_FROM_EACH_SET) == str and "all" == NUM_LOAD_FROM_EACH_SET.lower(): return else: return dataset[:NUM_LOAD_FROM_EACH_SET] def clean_text(text: str) -> str: cleaned_text = re.sub(SPECIAL_CHARS, "", text) cleaned_text = cleaned_text.lower() return cleaned_text def create_vocab(data): vocab_list = [] for index in range(len(data)): text = data[index][1] words = text.split(" ") for word in words: chars = list(word) for char in chars: if char not in vocab_list: vocab_list.append(char) return vocab_list
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"] ... ]
truncate_training_dataset
পদ্ধতিটি ধাপ 3.5 -এ NUM_LOAD_FROM_EACH_SET
ধ্রুবক সেট ব্যবহার করে একটি তালিকা সূচক ফাইল ডেটা ছেঁটে দেয়। বিশেষভাবে, NUM_LOAD_FROM_EACH_SET
ধ্রুবকটি প্রতিটি ডেটাসেট থেকে লোড হওয়া অডিও নমুনার সংখ্যা নির্দিষ্ট করতে ব্যবহৃত হয়। এই গাইডের উদ্দেশ্যে, সংখ্যাটি 1600
এ সেট করা হয়েছে যার মানে মোট 3200
অডিও নমুনা শেষ পর্যন্ত লোড করা হবে। সমস্ত নমুনা লোড করতে, স্ট্রিং মানের all
NUM_LOAD_FROM_EACH_SET
সেট করুন।clean_text
পদ্ধতিটি ধাপ 3.5 -এ SPECIAL_CHARS
এ নির্ধারিত রেগুলার এক্সপ্রেশন দ্বারা নির্দিষ্ট করা অক্ষরের প্রতিটি টেক্সট ট্রান্সক্রিপশন ফালাতে ব্যবহৃত হয়। এই অক্ষরগুলি, বিরাম চিহ্ন সহ, বাদ দেওয়া যেতে পারে কারণ তারা অডিও বৈশিষ্ট্য এবং পাঠ্য প্রতিলিপিগুলির মধ্যে ম্যাপিং শিখতে মডেলকে প্রশিক্ষণ দেওয়ার সময় কোনও শব্দার্থিক মান প্রদান করে না।create_vocab
পদ্ধতিটি পরিষ্কার পাঠের প্রতিলিপি থেকে একটি শব্দভাণ্ডার তৈরি করে। সহজভাবে, এটি পরিষ্কার করা পাঠ্য ট্রান্সক্রিপশনের সেট থেকে সমস্ত অনন্য অক্ষর বের করে। আপনি ধাপ 3.14 এ উত্পন্ন শব্দভান্ডারের একটি উদাহরণ দেখতে পাবেন। সপ্তম কক্ষ অডিও ডেটা লোড এবং পুনরায় নমুনা করার জন্য 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। এই "মূল" স্যাম্পলিং রেটটি ধাপ 3.5 -এ ধ্রুবক ORIG_SAMPLING_RATE
দ্বারা ধরা হয়েছে।resample
পদ্ধতিটি 48000
থেকে 16000
এর স্যাম্পলিং রেট থেকে অডিও ডেটার নমুনা কমাতে ব্যবহৃত হয়। wav2vec2 16000
Hz এ নমুনাকৃত অডিওতে প্রি-ট্রেন করা হয়েছে। তদনুসারে, ফাইনটিউনিংয়ের জন্য ব্যবহৃত যেকোনো অডিও একই নমুনা হার থাকতে হবে। এই ক্ষেত্রে, অডিও উদাহরণগুলি অবশ্যই 48000
Hz থেকে 16000
Hz-এ নামিয়ে আনতে হবে৷ ধাপ 3.5 -এ 16000
Hz ধ্রুবক TGT_SAMPLING_RATE
দ্বারা ক্যাপচার করা হয়েছে।অষ্টম কক্ষটি ইউটিলিটি পদ্ধতিগুলিকে সংজ্ঞায়িত করে যা অডিও এবং ট্রান্সক্রিপশন ডেটা প্রক্রিয়া করে। অষ্টম ঘর সেট করুন:
### CELL 8: Utility methods to prepare input data for training ### def process_speech_audio(speech_array, sampling_rate): input_values = processor(speech_array, sampling_rate = sampling_rate).input_values return input_values[0] def process_target_text(target_text): with processor.as_target_processor(): encoding = processor(target_text).input_ids return encoding
process_speech_audio
পদ্ধতি একটি সরবরাহকৃত প্রশিক্ষণ নমুনা থেকে ইনপুট মান প্রদান করে।process_target_text
পদ্ধতি প্রতিটি টেক্সট ট্রান্সক্রিপশনকে লেবেলের তালিকা হিসেবে এনকোড করে - অর্থাৎ শব্দভান্ডারের অক্ষর উল্লেখ করে সূচকের একটি তালিকা। আপনি ধাপ 3.15 এ একটি নমুনা এনকোডিং দেখতে পাবেন।নবম কক্ষটি চূড়ান্ত ইউটিলিটি পদ্ধতি সেল এবং এতে একটি রেফারেন্স ট্রান্সক্রিপশন এবং একটি পূর্বাভাসিত প্রতিলিপির মধ্যে শব্দ ত্রুটির হার গণনা করার পদ্ধতি রয়েছে। নবম কক্ষটি এতে সেট করুন:
### CELL 9: Utility method to calculate Word Error Rate def compute_wer(pred): pred_logits = pred.predictions pred_ids = np.argmax(pred_logits, axis = -1) pred.label_ids[pred.label_ids == -100] = processor.tokenizer.pad_token_id pred_str = processor.batch_decode(pred_ids) label_str = processor.batch_decode(pred.label_ids, group_tokens = False) wer = wer_metric.compute(predictions = pred_str, references = label_str) return {"wer": wer}
দশম কক্ষটি ধাপ 3.6 -এ সংজ্ঞায়িত read_index_file_data
পদ্ধতি ব্যবহার করে পুরুষ বক্তার রেকর্ডিং এবং মহিলা বক্তাদের রেকর্ডিংয়ের জন্য প্রশিক্ষণ ডেটা সূচক ফাইলগুলি পড়ে। দশম ঘর সেট করুন:
### CELL 10: Read training data ### training_samples_male_cl = read_index_file_data(TRAINING_DATA_PATH_MALE, "line_index.tsv") training_samples_female_cl = read_index_file_data(TRAINING_DATA_PATH_FEMALE, "line_index.tsv")
একাদশ কক্ষটি ধাপ 3.6 -এ সংজ্ঞায়িত truncate_training_dataset
পদ্ধতি ব্যবহার করে প্রশিক্ষণের ডেটা তালিকাগুলিকে ছেঁটে ফেলে। একাদশ ঘর সেট করুন:
### CELL 11: Truncate training data ### training_samples_male_cl = truncate_training_dataset(training_samples_male_cl) training_samples_female_cl = truncate_training_dataset(training_samples_female_cl)
NUM_LOAD_FROM_EACH_SET
ধ্রুবক সেট প্রতিটি ডেটাসেট থেকে রাখা নমুনার পরিমাণ নির্ধারণ করে৷ মোট 3200
নমুনার জন্য এই গাইডে ধ্রুবকটি 1600
এ সেট করা হয়েছে।দ্বাদশ কক্ষটি ছাঁটাই করা প্রশিক্ষণ ডেটা তালিকাগুলিকে একত্রিত করে। দ্বাদশ কক্ষটি এতে সেট করুন:
### CELL 12: Combine training samples data ### all_training_samples = training_samples_male_cl + training_samples_female_cl
ত্রয়োদশ সেল প্রতিটি প্রশিক্ষণ ডেটা নমুনার উপর পুনরাবৃত্তি করে এবং ধাপ 3.6 -এ সংজ্ঞায়িত clean_text
পদ্ধতি ব্যবহার করে সংশ্লিষ্ট ট্রান্সক্রিপশন পাঠ্যটি পরিষ্কার করে। ত্রয়োদশ সেল এতে সেট করুন:
for index in range(len(all_training_samples)): all_training_samples[index][1] = clean_text(all_training_samples[index][1])
চতুর্দশ কক্ষটি পূর্ববর্তী ধাপ থেকে পরিষ্কার করা ট্রান্সক্রিপশন এবং ধাপ 3.6 -এ সংজ্ঞায়িত create_vocab
পদ্ধতি ব্যবহার করে একটি শব্দভান্ডার তৈরি করে। চতুর্দশ কক্ষটি এতে সেট করুন:
### CELL 14: Create vocabulary ### vocab_list = create_vocab(all_training_samples) vocab_dict = {v: i for i, v in enumerate(vocab_list)}
শব্দভান্ডার একটি অভিধান হিসাবে সংরক্ষণ করা হয় কী হিসাবে অক্ষর এবং মান হিসাবে শব্দভান্ডার সূচকগুলি সহ।
আপনি vocab_dict
প্রিন্ট করতে পারেন যা নিম্নলিখিত আউটপুট তৈরি করবে:
{'l': 0, 'a': 1, 'v': 2, 'i': 3, 'g': 4, 'e': 5, 'n': 6, 'c': 7, 'd': 8, 't': 9, 'u': 10, 'r': 11, 'j': 12, 's': 13, 'o': 14, 'h': 15, 'm': 16, 'q': 17, 'b': 18, 'p': 19, 'y': 20, 'f': 21, 'z': 22, 'á': 23, 'ú': 24, 'í': 25, 'ó': 26, 'é': 27, 'ñ': 28, 'x': 29, 'k': 30, 'w': 31, 'ü': 32}
পঞ্চদশ কক্ষটি সীমাবদ্ধ অক্ষর শব্দটি যোগ করে |
শব্দভান্ডারে পঞ্চদশ সেল এতে সেট করুন:
### CELL 15: Add word delimiter to vocabulary ### vocab_dict["|"] = len(vocab_dict)
টেক্সট ট্রান্সক্রিপশনগুলিকে লেবেলের তালিকা হিসাবে টোকেনাইজ করার সময় ডিলিমিটার অক্ষর শব্দটি ব্যবহার করা হয়। বিশেষত, এটি একটি শব্দের শেষ সংজ্ঞায়িত করতে ব্যবহৃত হয় এবং এটি Wav2Vec2CTCTokenizer
ক্লাস শুরু করার সময় ব্যবহৃত হয়, যেমনটি ধাপ 3.17 এ দেখা যাবে।
উদাহরণস্বরূপ, নিম্নলিখিত তালিকাটি ধাপ 3.14 থেকে শব্দভাণ্ডার ব্যবহার করে no te entiendo nada
এনকোড করে:
# Encoded text [6, 14, 33, 9, 5, 33, 5, 6, 9, 3, 5, 6, 8, 14, 33, 6, 1, 8, 1] # Vocabulary {'l': 0, 'a': 1, 'v': 2, 'i': 3, 'g': 4, 'e': 5, 'n': 6, 'c': 7, 'd': 8, 't': 9, 'u': 10, 'r': 11, 'j': 12, 's': 13, 'o': 14, 'h': 15, 'm': 16, 'q': 17, 'b': 18, 'p': 19, 'y': 20, 'f': 21, 'z': 22, 'á': 23, 'ú': 24, 'í': 25, 'ó': 26, 'é': 27, 'ñ': 28, 'x': 29, 'k': 30, 'w': 31, 'ü': 32, '|': 33}
ষোড়শ কোষ একটি ফাইলে শব্দভাণ্ডার ডাম্প করে। ষোড়শ কক্ষটি এতে সেট করুন:
### CELL 16: Export vocabulary ### with open(VOCAB_FILE_PATH + "vocab.json", "w", encoding = "utf8") as vocab_file: json.dump(vocab_dict, vocab_file)
Wav2Vec2CTCTokenizer
ক্লাস শুরু করতে। সপ্তদশ কোষটি Wav2Vec2CTCTokenizer
এর একটি উদাহরণ শুরু করে। সপ্তদশ কক্ষটি এতে সেট করুন:
### CELL 17: Initialize tokenizer ### tokenizer = Wav2Vec2CTCTokenizer( VOCAB_FILE_PATH + "vocab.json", unk_token = "[UNK]", pad_token = "[PAD]", word_delimiter_token = "|", replace_word_delimiter_char = " " )
টোকেনাইজারটি টেক্সট ট্রান্সক্রিপশন এনকোডিং এবং টেক্সটে ফিরে লেবেলগুলির একটি তালিকা ডিকোড করার জন্য ব্যবহৃত হয়।
মনে রাখবেন যে tokenizer
unk_token
এ বরাদ্দ [UNK]
এবং pad_token
এ [PAD]
বরাদ্দ দিয়ে শুরু করা হয়, আগেরটি টেক্সট ট্রান্সক্রিপশনে অজানা টোকেনগুলিকে উপস্থাপন করতে ব্যবহৃত হয় এবং পরবর্তীটি বিভিন্ন দৈর্ঘ্যের ট্রান্সক্রিপশনের ব্যাচ তৈরি করার সময় প্যাড ট্রান্সক্রিপশনে ব্যবহৃত হয়। এই দুটি মান টোকেনাইজার দ্বারা শব্দভান্ডারে যোগ করা হবে।
এই ধাপে টোকেনাইজারের সূচনা শব্দভান্ডারে দুটি অতিরিক্ত টোকেন যোগ করবে, যথা <s>
এবং /</s>
যেটি যথাক্রমে বাক্যের শুরু এবং শেষ সীমাবদ্ধ করতে ব্যবহৃত হয়।
|
এই ধাপে স্পষ্টভাবে word_delimiter_token
এ বরাদ্দ করা হয়েছে যাতে প্রতিফলিত হয় যে পাইপ চিহ্নটি শব্দের শেষের সীমানা নির্ধারণের জন্য ব্যবহার করা হবে ধাপ 3.15- এর শব্দভাণ্ডারে আমাদের অক্ষর যোগ করার সাথে সাথে। |
চিহ্ন হল word_delimiter_token
এর ডিফল্ট মান। সুতরাং, এটি স্পষ্টভাবে সেট করার প্রয়োজন ছিল না তবে স্পষ্টতার জন্য এটি করা হয়েছিল।
একইভাবে word_delimiter_token
এর মতো, একটি একক স্থান স্পষ্টভাবে replace_word_delimiter_char
এর জন্য বরাদ্দ করা হয়েছে যা পাইপ প্রতীক |
টেক্সট ট্রান্সক্রিপশনে ফাঁকা স্থান অক্ষর প্রতিস্থাপন করতে ব্যবহার করা হবে। replace_word_delimiter_char
ডিফল্ট মান হল ফাঁকা স্থান। সুতরাং, এটি স্পষ্টভাবে সেট করার প্রয়োজন ছিল না তবে স্পষ্টতার জন্য এটি করা হয়েছিল।
আপনি tokenizer
get_vocab()
পদ্ধতিতে কল করে সম্পূর্ণ টোকেনাইজার শব্দভান্ডার প্রিন্ট করতে পারেন।
vocab = tokenizer.get_vocab() print(vocab) # Output: {'e': 0, 's': 1, 'u': 2, 'n': 3, 'v': 4, 'i': 5, 'a': 6, 'j': 7, 'd': 8, 'g': 9, 'o': 10, 'c': 11, 'l': 12, 'm': 13, 't': 14, 'y': 15, 'p': 16, 'r': 17, 'h': 18, 'ñ': 19, 'ó': 20, 'b': 21, 'q': 22, 'f': 23, 'ú': 24, 'z': 25, 'é': 26, 'í': 27, 'x': 28, 'á': 29, 'w': 30, 'k': 31, 'ü': 32, '|': 33, '<s>': 34, '</s>': 35, '[UNK]': 36, '[PAD]': 37}
অষ্টাদশ সেলটি Wav2Vec2FeatureExtractor
এর একটি উদাহরণ শুরু করে। অষ্টাদশ সেল এতে সেট করুন:
### CELL 18: Initialize feature extractor ### feature_extractor = Wav2Vec2FeatureExtractor( feature_size = 1, sampling_rate = 16000, padding_value = 0.0, do_normalize = True, return_attention_mask = True )
Wav2Vec2FeatureExtractor
ইনিশিয়েলাইজারে পাস করা পরামিতি মানগুলি সমস্ত ডিফল্ট মান, return_attention_mask
বাদ দিয়ে যা ডিফল্ট False
. স্বচ্ছতার জন্য ডিফল্ট মান দেখানো/পাস করা হয়।feature_size
প্যারামিটার ইনপুট বৈশিষ্ট্যের মাত্রা (যেমন অডিও ডেটা বৈশিষ্ট্য) নির্দিষ্ট করে। এই প্যারামিটারের এই ডিফল্ট মান হল 1
।sampling_rate
ফিচার এক্সট্র্যাক্টরকে বলে যে স্যাম্পলিং রেট যেখানে অডিও ডেটা ডিজিটালাইজ করা উচিত। ধাপ 3.7 -এ যেমন আলোচনা করা হয়েছে, wav2vec2 16000
Hz-এ নমুনা করা অডিওতে পূর্ব-প্রশিক্ষিত এবং তাই এই প্যারামিটারের জন্য 16000
হল ডিফল্ট মান।padding_value
প্যারামিটারটি বিভিন্ন দৈর্ঘ্যের অডিও নমুনা ব্যাচ করার সময় প্রয়োজনীয় অডিও ডেটা প্যাড করার সময় যে মান ব্যবহার করা হয় তা নির্দিষ্ট করে। ডিফল্ট মান হল 0.0
।do_normalize
ইনপুট ডেটা একটি আদর্শ স্বাভাবিক বিতরণে রূপান্তরিত করা উচিত কিনা তা নির্দিষ্ট করতে ব্যবহৃত হয়। প্রচলিত মূল্য True
. Wav2Vec2FeatureExtractor
ক্লাস ডকুমেন্টেশন নোট করে যে "[স্বাভাবিককরণ] কিছু মডেলের কর্মক্ষমতা উল্লেখযোগ্যভাবে উন্নত করতে সাহায্য করতে পারে।"return_attention_mask
প্যারামিটারগুলি নির্দিষ্ট করে যে মনোযোগের মুখোশটি পাস করা উচিত কিনা। এই ব্যবহারের ক্ষেত্রে মানটি True
সেট করা হয়েছে। উনিশতম সেলটি Wav2Vec2Processor
এর একটি উদাহরণ শুরু করে। উনিশতম ঘর সেট করুন:
### CELL 19: Initialize processor ### processor = Wav2Vec2Processor(feature_extractor = feature_extractor, tokenizer = tokenizer)
Wav2Vec2Processor
ক্লাসটি ধাপ 3.17 এবং ধাপ 3.18 থেকে যথাক্রমে একটি একক প্রসেসরে tokenizer
এবং feature_extractor
একত্রিত করে।
নোট করুন যে প্রসেসর কনফিগারেশন Wav2Vec2Processor
ক্লাস ইনস্ট্যান্সে save_pretrained
পদ্ধতিতে কল করে সংরক্ষণ করা যেতে পারে।
processor.save_pretrained(OUTPUT_DIR_PATH)
বিংশতম কক্ষ all_training_samples
তালিকায় নির্দিষ্ট করা প্রতিটি অডিও ফাইল লোড করে। বিংশতম সেল এতে সেট করুন:
### CELL 20: Load audio data ### all_input_data = [] for index in range(len(all_training_samples)): speech_array, sampling_rate = read_audio_data(all_training_samples[index][0]) all_input_data.append({ "input_values": speech_array, "labels": all_training_samples[index][1] })
torch.Tensor
হিসাবে ফেরত দেওয়া হয়৷ টেনসর এবং অভিধানগুলির একটি তালিকা হিসাবে all_input_data
এ সংরক্ষণ করা হয়৷ প্রতিটি অভিধানে অডিওর পাঠ্য প্রতিলিপি সহ একটি নির্দিষ্ট নমুনার জন্য অডিও ডেটা রয়েছে।read_audio_data
পদ্ধতিটি অডিও ডেটার স্যাম্পলিং রেটও প্রদান করে। যেহেতু আমরা জানি যে এই ব্যবহারের ক্ষেত্রে সমস্ত অডিও ফাইলের জন্য স্যাম্পলিং রেট 48000
Hz, তাই এই ধাপে স্যাম্পলিং রেট উপেক্ষা করা হয়েছে।all_input_data
পান্ডাস ডেটাফ্রেমে রূপান্তর করা একুশতম সেল all_input_data
তালিকাকে পান্ডাস ডেটাফ্রেমে রূপান্তর করে যাতে ডেটা ম্যানিপুলেট করা সহজ হয়। একুশতম সেল এতে সেট করুন:
### CELL 21: Convert audio training data list to Pandas DataFrame ### all_input_data_df = pd.DataFrame(data = all_input_data)
বাইশ-সেকেন্ড সেল প্রতিটি অডিও ডেটা নমুনা থেকে বৈশিষ্ট্যগুলি বের করতে এবং লেবেলের একটি তালিকা হিসাবে প্রতিটি টেক্সট ট্রান্সক্রিপশন এনকোড করতে ধাপ 3.19 -এ শুরু করা processor
ব্যবহার করে। বাইশতম সেলটি এতে সেট করুন:
### CELL 22: Process audio data and text transcriptions ### all_input_data_df["input_values"] = all_input_data_df["input_values"].apply(lambda x: process_speech_audio(resample(x), 16000)) all_input_data_df["labels"] = all_input_data_df["labels"].apply(lambda x: process_target_text(x))
তেইশতম সেল ধাপ 3.5 থেকে SPLIT_PCT
ধ্রুবক ব্যবহার করে প্রশিক্ষণ এবং মূল্যায়ন (বৈধকরণ) ডেটাসেটে all_input_data_df
ডেটাফ্রেমকে বিভক্ত করে। তেইশতম সেলটি এতে সেট করুন:
### CELL 23: Split input data into training and validation datasets ### split = math.floor((NUM_LOAD_FROM_EACH_SET * 2) * SPLIT_PCT) valid_data_df = all_input_data_df.iloc[-split:] train_data_df = all_input_data_df.iloc[:-split]
SPLIT_PCT
মান হল 0.10
যার অর্থ সমস্ত ইনপুট ডেটার 10% মূল্যায়নের জন্য রাখা হবে এবং 90% ডেটা প্রশিক্ষণ/ফাইনিং এর জন্য ব্যবহার করা হবে।Dataset
অবজেক্টে রূপান্তর করা চব্বিশতম সেল train_data_df
এবং valid_data_df
ডেটাফ্রেমকে Dataset
অবজেক্টে রূপান্তর করে। চব্বিশতম সেলটি এতে সেট করুন:
### CELL 24: Convert training and validation datasets to Dataset objects ### train_data = Dataset.from_pandas(train_data_df) valid_data = Dataset.from_pandas(valid_data_df)
Dataset
অবজেক্টগুলি HuggingFace Trainer
ক্লাসের দৃষ্টান্ত দ্বারা গ্রাস করা হয়, যেমন আপনি ধাপ 3.30 এ দেখতে পাবেন।
এই বস্তুগুলিতে ডেটাসেটের পাশাপাশি ডেটাসেট সম্পর্কে মেটাডেটা থাকে৷
উভয় Dataset
অবজেক্টের মেটাডেটা দেখতে আপনি train_data
এবং valid_data
প্রিন্ট করতে পারেন।
print(train_data) print(valid_data) # Output: Dataset({ features: ['input_values', 'labels'], num_rows: 2880 }) Dataset({ features: ['input_values', 'labels'], num_rows: 320 })
পঁচিশতম কোষটি পূর্বপ্রশিক্ষিত XLS-R (0.3) মডেলটিকে শুরু করে। পঁচিশতম সেলটি এতে সেট করুন:
### CELL 25: Initialize pretrained model ### model = Wav2Vec2ForCTC.from_pretrained( MODEL, ctc_loss_reduction = "mean", pad_token_id = processor.tokenizer.pad_token_id, vocab_size = len(processor.tokenizer) )
Wav2Vec2ForCTC
তে বলা from_pretrained
পদ্ধতিটি নির্দিষ্ট করে যে আমরা নির্দিষ্ট মডেলের জন্য পূর্বপ্রশিক্ষিত ওজন লোড করতে চাই।MODEL
ধ্রুবকটি ধাপ 3.5 -এ নির্দিষ্ট করা হয়েছে এবং XLS-R (0.3) মডেলকে প্রতিফলিত করে facebook/wav2vec2-xls-r-300m
এ সেট করা হয়েছে।ctc_loss_reduction
প্যারামিটারটি সংযোগবাদী টেম্পোরাল ক্লাসিফিকেশন ("CTC") ক্ষতি ফাংশনের আউটপুটে প্রয়োগ করার জন্য হ্রাসের ধরন নির্দিষ্ট করে। CTC ক্ষতি একটি ক্রমাগত ইনপুট, এই ক্ষেত্রে অডিও ডেটা এবং একটি লক্ষ্য ক্রম, এই ক্ষেত্রে পাঠ্য প্রতিলিপিগুলির মধ্যে ক্ষতি গণনা করতে ব্যবহৃত হয়। মান নির্ধারণ করে mean
, ইনপুটগুলির একটি ব্যাচের আউটপুট ক্ষতি লক্ষ্য দৈর্ঘ্য দ্বারা ভাগ করা হবে। ব্যাচের গড় তারপর গণনা করা হয় এবং হ্রাসটি ক্ষতির মানগুলিতে প্রয়োগ করা হয়।pad_token_id
ব্যাচ করার সময় প্যাডিংয়ের জন্য ব্যবহার করা টোকেন নির্দিষ্ট করে। ধাপ 3.17 -এ টোকেনাইজার শুরু করার সময় এটি [PAD]
আইডি সেটে সেট করা হয়।vocab_size
প্যারামিটার মডেলের শব্দভান্ডারের আকার নির্ধারণ করে। এটি ধাপ 3.17 -এ টোকেনাইজার শুরু করার পরে শব্দভান্ডারের আকার এবং নেটওয়ার্কের সামনের অংশের আউটপুট স্তর নোডের সংখ্যা প্রতিফলিত করে।ছাব্বিশতম কোষটি বৈশিষ্ট্য নিষ্কাশনকারীর পূর্ব-প্রশিক্ষিত ওজনকে হিমায়িত করে। ছাব্বিশতম ঘরটি এতে সেট করুন:
### CELL 26: Freeze feature extractor ### model.freeze_feature_extractor()
সাতাশতম কক্ষটি প্রশিক্ষণের আর্গুমেন্ট শুরু করে যা একজন Trainer
উদাহরণে পাস করা হবে। সাতাশতম সেল এতে সেট করুন:
### CELL 27: Set training arguments ### training_args = TrainingArguments( output_dir = OUTPUT_DIR_PATH, save_safetensors = False, group_by_length = True, per_device_train_batch_size = TRAIN_BATCH_SIZE, per_device_eval_batch_size = EVAL_BATCH_SIZE, num_train_epochs = TRAIN_EPOCHS, gradient_checkpointing = True, evaluation_strategy = "steps", save_strategy = "steps", logging_strategy = "steps", eval_steps = EVAL_STEPS, save_steps = SAVE_STEPS, logging_steps = LOGGING_STEPS, learning_rate = LEARNING_RATE, warmup_steps = WARMUP_STEPS )
TrainingArguments
ক্লাস 100 টিরও বেশি পরামিতি গ্রহণ করে।save_safetensors
প্যারামিটার যখন False
নির্দিষ্ট করে যে ফিনটিউন করা মডেলটিকে safetensors
ফরম্যাট ব্যবহার করার পরিবর্তে একটি pickle
ফাইলে সংরক্ষণ করা উচিত।group_by_length
প্যারামিটার যখন True
নির্দেশ করে যে প্রায় একই দৈর্ঘ্যের নমুনাগুলিকে একসাথে গোষ্ঠীবদ্ধ করা উচিত। এটি প্যাডিং কমিয়ে দেয় এবং প্রশিক্ষণের দক্ষতা উন্নত করে।per_device_train_batch_size
প্রতি প্রশিক্ষণ মিনি-ব্যাচের নমুনার সংখ্যা সেট করে। এই প্যারামিটারটি ধাপ 3.5 -এ নির্ধারিত TRAIN_BATCH_SIZE
ধ্রুবকের মাধ্যমে 18
এ সেট করা হয়েছে। এটি প্রতি যুগে 160টি ধাপ বোঝায়।per_device_eval_batch_size
প্রতি মূল্যায়ন (হোল্ডআউট) মিনি-ব্যাচ প্রতি নমুনার সংখ্যা সেট করে। এই প্যারামিটারটি ধাপ 3.5 -এ নির্ধারিত EVAL_BATCH_SIZE
ধ্রুবকের মাধ্যমে 10
এ সেট করা হয়েছে।num_train_epochs
প্রশিক্ষণ যুগের সংখ্যা সেট করে। এই প্যারামিটারটি ধাপ 3.5 এ নির্ধারিত TRAIN_EPOCHS
ধ্রুবকের মাধ্যমে 30
এ সেট করা হয়েছে। এটি প্রশিক্ষণের সময় মোট 4,800টি পদক্ষেপ বোঝায়।gradient_checkpointing
পরামিতি যখন True
গ্রেডিয়েন্ট গণনা চেকপয়েন্ট করে মেমরি সংরক্ষণ করতে সাহায্য করে, কিন্তু এর ফলে পশ্চাদগামী পাসগুলি ধীর হয়।evaluation_strategy
প্যারামিটার যখন steps
সেট করা হয় তার মানে হল মূল্যায়ন করা হবে এবং প্রশিক্ষণের সময় লগ করা হবে পরামিতি eval_steps
দ্বারা নির্দিষ্ট একটি ব্যবধানে।logging_strategy
প্যারামিটার যখন steps
সেট করা হয় মানে প্রশিক্ষণ চালানোর পরিসংখ্যান প্যারামিটার logging_steps
দ্বারা নির্দিষ্ট একটি ব্যবধানে লগ করা হবে।steps
এ সেট করা হলে save_strategy
প্যারামিটার মানে হল যে ফাইনটিউন করা মডেলের একটি চেকপয়েন্ট save_steps
প্যারামিটার দ্বারা নির্দিষ্ট একটি ব্যবধানে সংরক্ষণ করা হবে।eval_steps
হোল্ডআউট ডেটার মূল্যায়নের মধ্যে ধাপের সংখ্যা সেট করে। এই প্যারামিটারটি ধাপ 3.5 -এ নির্ধারিত EVAL_STEPS
ধ্রুবকের মাধ্যমে 100
এ সেট করা হয়েছে।save_steps
ধাপের সংখ্যা সেট করে যার পরে ফাইনটিউন করা মডেলের একটি চেকপয়েন্ট সংরক্ষণ করা হয়। এই প্যারামিটারটি ধাপ 3.5 -এ নির্ধারিত SAVE_STEPS
ধ্রুবকের মাধ্যমে 3200
এ সেট করা হয়েছে।logging_steps
প্রশিক্ষণের পরিসংখ্যানের লগের মধ্যে ধাপের সংখ্যা নির্ধারণ করে। এই প্যারামিটারটি ধাপ 3.5 -এ নির্ধারিত LOGGING_STEPS
ধ্রুবকের মাধ্যমে 100
এ সেট করা হয়েছে।learning_rate
প্যারামিটার প্রাথমিক শেখার হার সেট করে। এই প্যারামিটারটি ধাপ 3.5 এ নির্ধারিত LEARNING_RATE
ধ্রুবকের মাধ্যমে 1e-4
এ সেট করা হয়েছে।warmup_steps
প্যারামিটার রৈখিকভাবে লার্নিং রেটকে ০ থেকে learning_rate
দ্বারা সেট করা মান পর্যন্ত ধাপের সংখ্যা নির্ধারণ করে। এই প্যারামিটারটি ধাপ 3.5 -এ নির্ধারিত WARMUP_STEPS
ধ্রুবকের মাধ্যমে 800
এ সেট করা হয়েছে।আটাশতম কক্ষটি গতিশীলভাবে প্যাডিং ইনপুট এবং লক্ষ্য ক্রমগুলির জন্য যুক্তি সংজ্ঞায়িত করে। আটাশতম কক্ষটি এতে সেট করুন:
### CELL 28: Define data collator logic ### @dataclass class DataCollatorCTCWithPadding: processor: Wav2Vec2Processor padding: Union[bool, str] = True max_length: Optional[int] = None max_length_labels: Optional[int] = None pad_to_multiple_of: Optional[int] = None pad_to_multiple_of_labels: Optional[int] = None def __call__(self, features: List[Dict[str, Union[List[int], torch.Tensor]]]) -> Dict[str, torch.Tensor]: input_features = [{"input_values": feature["input_values"]} for feature in features] label_features = [{"input_ids": feature["labels"]} for feature in features] batch = self.processor.pad( input_features, padding = self.padding, max_length = self.max_length, pad_to_multiple_of = self.pad_to_multiple_of, return_tensors = "pt", ) with self.processor.as_target_processor(): labels_batch = self.processor.pad( label_features, padding = self.padding, max_length = self.max_length_labels, pad_to_multiple_of = self.pad_to_multiple_of_labels, return_tensors = "pt", ) labels = labels_batch["input_ids"].masked_fill(labels_batch.attention_mask.ne(1), -100) batch["labels"] = labels return batch
Trainer
দৃষ্টান্তে প্রেরণ করা হয় যা ধাপ 3.30 এ মুহূর্তের মধ্যে শুরু করা হবে। যেহেতু প্রতিটি মিনি-ব্যাচে ইনপুট সিকোয়েন্স এবং লেবেল সিকোয়েন্স দৈর্ঘ্যে পরিবর্তিত হয়, তাই কিছু সিকোয়েন্স প্যাড করা আবশ্যক যাতে সেগুলি একই দৈর্ঘ্যের হয়।DataCollatorCTCWithPadding
ক্লাস গতিশীলভাবে মিনি-ব্যাচ ডেটা প্যাড করে। padding
প্যারামেন্টার যখন True
তে সেট করা হয় তা নির্দিষ্ট করে যে ছোট অডিও ইনপুট ফিচার সিকোয়েন্স এবং লেবেল সিকোয়েন্সের দৈর্ঘ্য একটি মিনি-ব্যাচের দীর্ঘতম সিকোয়েন্সের সমান হওয়া উচিত।0.0
সেট মান দিয়ে প্যাড করা হয়।-100
দ্বারা প্রতিস্থাপিত হয় যাতে WER মেট্রিক গণনা করার সময় এই লেবেলগুলি উপেক্ষা করা হয়৷29তম কক্ষটি পূর্ববর্তী ধাপে সংজ্ঞায়িত ডেটা কোলেটরের একটি উদাহরণ শুরু করে। ঊনবিংশতম কক্ষটি এতে সেট করুন:
### CELL 29: Initialize instance of data collator ### data_collator = DataCollatorCTCWithPadding(processor = processor, padding = True)
ত্রিশতম কক্ষটি Trainer
শ্রেণীর একটি উদাহরণ শুরু করে। ত্রিশতম সেল এতে সেট করুন:
### CELL 30: Initialize trainer ### trainer = Trainer( model = model, data_collator = data_collator, args = training_args, compute_metrics = compute_wer, train_dataset = train_data, eval_dataset = valid_data, tokenizer = processor.feature_extractor )
Trainer
ক্লাস শুরু করা হয়:model
ধাপ 3.25 এ শুরু হয়েছে।train_data
Dataset
অবজেক্ট।valid_data
Dataset
অবজেক্ট।tokenizer
প্যারামিটারটি processor.feature_extractor
এ বরাদ্দ করা হয় এবং প্রতিটি মিনি-ব্যাচের সর্বোচ্চ দৈর্ঘ্যের ইনপুটে স্বয়ংক্রিয়ভাবে ইনপুট প্যাড করার জন্য data_collator
এর সাথে কাজ করে। একত্রিশতম সেল মডেলটিকে সূক্ষ্মভাবে তৈরি করতে Trainer
ক্লাসের উদাহরণে train
পদ্ধতিকে কল করে। একত্রিশতম সেল এতে সেট করুন:
### CELL 31: Finetune the model ### trainer.train()
ত্রিশ সেকেন্ড সেল হল শেষ নোটবুক সেল। এটি Trainer
দৃষ্টান্তে save_model
পদ্ধতিতে কল করে সূক্ষ্ম সুর করা মডেলটিকে সংরক্ষণ করে। ত্রিশ-দ্বিতীয় সেল এতে সেট করুন:
### CELL 32: Save the finetuned model ### trainer.save_model(OUTPUT_DIR_PATH)
এখন নোটবুকের সমস্ত ঘর তৈরি করা হয়েছে, এটি ফাইনটিউনিং শুরু করার সময়।
NVIDIA GPU P100 অ্যাক্সিলারেটরের সাথে চালানোর জন্য Kaggle নোটবুক সেট করুন।
Kaggle উপর নোটবুক প্রতিশ্রুতি.
আপনার WandB অ্যাকাউন্টে লগ ইন করে এবং সংশ্লিষ্ট রান সনাক্ত করে প্রশিক্ষণ চালানোর ডেটা নিরীক্ষণ করুন।
NVIDIA GPU P100 অ্যাক্সিলারেটর ব্যবহার করে 30 টিরও বেশি যুগের প্রশিক্ষণের জন্য ~5 ঘন্টা সময় নেওয়া উচিত। প্রশিক্ষণ শেষে হোল্ডআউট ডেটার WER ~0.15 এ নেমে যাওয়া উচিত। এটি একটি অত্যাধুনিক ফলাফল নয়, তবে সূক্ষ্ম সুর করা মডেলটি এখনও অনেক অ্যাপ্লিকেশনের জন্য যথেষ্ট কার্যকর।
ফাইনটিউন করা মডেলটি ধাপ 3.5 -এ নির্দিষ্ট স্থির OUTPUT_DIR_PATH
দ্বারা নির্দিষ্ট করা Kaggle ডিরেক্টরিতে আউটপুট হবে। মডেল আউটপুট নিম্নলিখিত ফাইল অন্তর্ভুক্ত করা উচিত:
pytorch_model.bin config.json preprocessor_config.json vocab.json training_args.bin
এই ফাইলগুলি স্থানীয়ভাবে ডাউনলোড করা যেতে পারে। উপরন্তু, আপনি মডেল ফাইল ব্যবহার করে একটি নতুন Kaggle মডেল তৈরি করতে পারেন। কাগল মডেলটি সঙ্গী অনুমান গাইডের সাথে ব্যবহার করা হবে যাতে সূক্ষ্ম সুর করা মডেলে অনুমান চালানো হয়।
wav2vec2 XLS-R ফাইনটিউনিংয়ের জন্য অভিনন্দন! মনে রাখবেন যে আপনি এই সাধারণ পদক্ষেপগুলি ব্যবহার করতে পারেন আপনার পছন্দসই অন্যান্য ভাষায় মডেলটি সুন্দর করতে। এই নির্দেশিকায় উত্পন্ন সূক্ষ্ম সুরে মডেলের উপর চলমান অনুমান মোটামুটি সহজবোধ্য। অনুমানের পদক্ষেপগুলি এটির জন্য একটি পৃথক সহচর গাইডে রূপরেখা দেওয়া হবে। অনুগ্রহ করে আমার HackerNoon ব্যবহারকারীর নাম অনুসন্ধান করুন সহচর নির্দেশিকা খুঁজে পেতে.