मेटा एआई ने 2021 के अंत में wav2vec2 XLS-R ("XLS-R") पेश किया। XLS-R क्रॉस-लिंगुअल स्पीच रिप्रेजेंटेशन लर्निंग के लिए एक मशीन लर्निंग ("ML") मॉडल है; और इसे 128 भाषाओं में सार्वजनिक रूप से उपलब्ध स्पीच ऑडियो के 400,000 से अधिक घंटों पर प्रशिक्षित किया गया था। अपनी रिलीज़ के बाद, मॉडल ने मेटा एआई के XLSR-53 क्रॉस-लिंगुअल मॉडल पर एक छलांग का प्रतिनिधित्व किया, जिसे 53 भाषाओं में लगभग 50,000 घंटों के स्पीच ऑडियो पर प्रशिक्षित किया गया था।
यह मार्गदर्शिका एक कागल नोटबुक का उपयोग करके स्वचालित वाक् पहचान ("ASR") के लिए XLS-R को फ़ाइनट्यून करने के चरणों की व्याख्या करती है। मॉडल को चिली स्पैनिश पर फ़ाइनट्यून किया जाएगा, लेकिन सामान्य चरणों का पालन करके आप अपनी इच्छानुसार विभिन्न भाषाओं पर XLS-R को फ़ाइनट्यून कर सकते हैं।
फ़ाइनट्यून्ड मॉडल पर अनुमान चलाने का वर्णन एक साथी ट्यूटोरियल में किया जाएगा, जिससे यह गाइड दो भागों में से पहला भाग बन जाएगा। मैंने एक अलग अनुमान-विशिष्ट गाइड बनाने का फैसला किया क्योंकि यह फ़ाइनट्यूनिंग गाइड थोड़ी लंबी हो गई थी।
यह माना जाता है कि आपके पास पहले से ही एमएल पृष्ठभूमि है और आप बुनियादी एएसआर अवधारणाओं को समझते हैं। शुरुआती लोगों को बिल्ड चरणों का पालन करने/समझने में मुश्किल हो सकती है।
2020 में पेश किए गए मूल wav2vec2 मॉडल को 960 घंटों के Librispeech डेटासेट स्पीच ऑडियो और ~53,200 घंटों के LibriVox डेटासेट स्पीच ऑडियो पर प्रीट्रेन किया गया था। इसके रिलीज़ होने पर, दो मॉडल आकार उपलब्ध थे: 95 मिलियन पैरामीटर वाला BASE मॉडल और 317 मिलियन पैरामीटर वाला LARGE मॉडल।
दूसरी ओर, XLS-R को 5 डेटासेट से बहुभाषी भाषण ऑडियो पर पूर्व-प्रशिक्षित किया गया था:
3 XLS-R मॉडल हैं: XLS-R (0.3B) 300 मिलियन पैरामीटर के साथ, XLS-R (1B) 1 बिलियन पैरामीटर के साथ, और XLS-R (2B) 2 बिलियन पैरामीटर के साथ। यह गाइड XLS-R (0.3B) मॉडल का उपयोग करेगा।
wav2vev2 मॉडल को कैसे फ़ाइनट्यून किया जाए, इस पर कुछ बेहतरीन लेख हैं, जिनमें से शायद यह एक तरह का "गोल्ड स्टैंडर्ड" हो। बेशक, यहाँ सामान्य दृष्टिकोण वही है जो आपको अन्य गाइड में मिलेगा। आप:
हालाँकि, इस गाइड और अन्य के बीच तीन प्रमुख अंतर हैं:
गाइड को पूरा करने के लिए आपके पास ये चीजें होनी चाहिए:
इससे पहले कि आप नोटबुक बनाना शुरू करें, नीचे दिए गए दो उप-अनुभागों की समीक्षा करना उपयोगी हो सकता है। वे वर्णन करते हैं:
जैसा कि परिचय में बताया गया है, XLS-R मॉडल को चिली स्पैनिश पर फाइनट्यून किया जाएगा। विशिष्ट डेटासेट ग्वेरा-रुकोज़ एट अल द्वारा विकसित चिली स्पैनिश स्पीच डेटा सेट है। यह ओपनएसएलआर पर डाउनलोड के लिए उपलब्ध है। डेटासेट में दो उप-डेटासेट शामिल हैं: (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
मैंने सुविधा के लिए चिली स्पैनिश स्पीच डेटा सेट को कागल पर अपलोड कर दिया है। चिली के पुरुष वक्ताओं की रिकॉर्डिंग के लिए एक कागल डेटासेट और चिली की महिला वक्ताओं की रिकॉर्डिंग के लिए एक कागल डेटासेट है। ये कागल डेटासेट कागल नोटबुक में जोड़े जाएँगे जिसे आप इस गाइड में दिए गए चरणों का पालन करके बनाएंगे।
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 |
---|---|---|---|
भविष्यवाणी | एल | मैं हूँ | सैलिएन्डो |
संदर्भ | एल | मैं हूँ | साल्टांडो |
| सही | सही | प्रतिस्थापन |
पूर्वानुमान में 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 Secret का उपयोग किया जाएगा।
WANDB_API_KEY
दर्ज करें और मान के लिए अपनी WandB API कुंजी दर्ज करें।WANDB_API_KEY
लेबल फ़ील्ड के बाईं ओर संलग्न चेकबॉक्स चेक किया गया है।चिली स्पैनिश भाषण डेटा सेट को कागल पर 2 अलग-अलग डेटासेट के रूप में अपलोड किया गया है:
इन दोनों डेटासेट को अपने कागल नोटबुक में जोड़ें।
निम्नलिखित 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
ऑडियो नमूने लोड किए जाएंगे। सभी नमूनों को लोड करने के लिए, NUM_LOAD_FROM_EACH_SET
को स्ट्रिंग मान all
पर सेट करें।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
हर्ट्ज है। यह "मूल" नमूना दर चरण 3.5 में स्थिर ORIG_SAMPLING_RATE
द्वारा कैप्चर की जाती है।resample
विधि का उपयोग ऑडियो डेटा को 48000
से 16000
की सैंपलिंग दर से डाउनसैंपल करने के लिए किया जाता है। wav2vec2 को 16000
हर्ट्ज पर सैंपल किए गए ऑडियो पर प्रीट्रेन किया जाता है। तदनुसार, फ़ाइनट्यूनिंग के लिए उपयोग किए जाने वाले किसी भी ऑडियो में समान सैंपलिंग दर होनी चाहिए। इस मामले में, ऑडियो उदाहरणों को 48000
हर्ट्ज से 16000
हर्ट्ज तक डाउनसैंपल किया जाना चाहिए। 16000
हर्ट्ज को चरण 3.5 में स्थिरांक 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]
के साथ आरंभ किया जाता है जिसे unk_token
को और [PAD]
pad_token
को सौंपा जाता है, जिसमें पहला टेक्स्ट ट्रांसक्रिप्शन में अज्ञात टोकन को दर्शाने के लिए उपयोग किया जाता है और दूसरा अलग-अलग लंबाई वाले ट्रांसक्रिप्शन के बैच बनाते समय पैड ट्रांसक्रिप्शन के लिए उपयोग किया जाता है। ये दोनों मान टोकनाइज़र द्वारा शब्दावली में जोड़े जाएँगे।
इस चरण में टोकेनाइजर को आरंभ करने से शब्दावली में दो अतिरिक्त टोकेन भी जुड़ जाएंगे, अर्थात् <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
हर्ट्ज पर सैंपल किए गए ऑडियो पर प्रीट्रेन्ड है और इसलिए 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
हर्ट्ज़ है, इसलिए इस चरण में सैंपलिंग दर को अनदेखा किया जाता है।all_input_data
Pandas डेटाफ़्रेम में परिवर्तित करना इक्कीसवाँ सेल all_input_data
सूची को Pandas DataFrame में परिवर्तित करता है, जिससे डेटा में हेरफेर करना आसान हो जाता है। इक्कीसवाँ सेल इस प्रकार सेट करें:
### 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
ऑब्जेक्ट्स का उपयोग हगिंगफेस 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
पैरामीटर द्वारा निर्दिष्ट अंतराल पर लॉग किए जाएंगे।save_strategy
पैरामीटर को steps
पर सेट किया जाता है, तो इसका अर्थ है कि फाइनट्यून्ड मॉडल का चेकपॉइंट, 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
पैरामीटर लर्निंग दर को 0 से 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 मीट्रिक की गणना करते समय इन लेबलों को अनदेखा किया जा सके।उनतीसवाँ सेल पिछले चरण में परिभाषित डेटा कोलेटर के इंस्टेंस को आरंभ करता है। उनतीसवें सेल को इस पर सेट करें:
### 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)
अब जबकि नोटबुक के सभी सेल बन चुके हैं, तो अब समय है फाइनट्यूनिंग शुरू करने का।
Kaggle नोटबुक को NVIDIA GPU P100 एक्सिलरेटर के साथ चलाने के लिए सेट करें।
नोटबुक को Kaggle पर सबमिट करें।
अपने WandB खाते में लॉग इन करके और संबंधित रन का पता लगाकर प्रशिक्षण रन डेटा की निगरानी करें।
NVIDIA GPU P100 त्वरक का उपयोग करके 30 युगों से अधिक प्रशिक्षण में ~5 घंटे लगने चाहिए। प्रशिक्षण के अंत में होल्डआउट डेटा पर WER ~0.15 तक गिर जाना चाहिए। यह बिल्कुल अत्याधुनिक परिणाम नहीं है, लेकिन फ़ाइनट्यून्ड मॉडल अभी भी कई अनुप्रयोगों के लिए पर्याप्त रूप से उपयोगी है।
फ़ाइनट्यून्ड मॉडल को चरण 3.5 में निर्दिष्ट स्थिरांक OUTPUT_DIR_PATH
द्वारा निर्दिष्ट कागल निर्देशिका में आउटपुट किया जाएगा। मॉडल आउटपुट में निम्नलिखित फ़ाइलें शामिल होनी चाहिए:
pytorch_model.bin config.json preprocessor_config.json vocab.json training_args.bin
इन फ़ाइलों को स्थानीय रूप से डाउनलोड किया जा सकता है। इसके अतिरिक्त, आप मॉडल फ़ाइलों का उपयोग करके एक नया कागल मॉडल बना सकते हैं। फ़ाइनट्यून्ड मॉडल पर अनुमान चलाने के लिए कागल मॉडल का उपयोग साथी अनुमान गाइड के साथ किया जाएगा।
wav2vec2 XLS-R को फ़ाइनट्यून करने के लिए बधाई! याद रखें कि आप अपनी इच्छानुसार अन्य भाषाओं पर मॉडल को फ़ाइनट्यून करने के लिए इन सामान्य चरणों का उपयोग कर सकते हैं। इस गाइड में जेनरेट किए गए फ़ाइनट्यून मॉडल पर अनुमान लगाना काफी सरल है। अनुमान के चरणों को इस गाइड के लिए एक अलग साथी गाइड में रेखांकित किया जाएगा। साथी गाइड को खोजने के लिए कृपया मेरे HackerNoon उपयोगकर्ता नाम पर खोजें।