paint-brush
Wav2vec2 এর সাথে কাজ করা পার্ট 1: স্বয়ংক্রিয় বক্তৃতা স্বীকৃতির জন্য XLS-R ফাইনটিউনিংদ্বারা@pictureinthenoise
2,245 পড়া
2,245 পড়া

Wav2vec2 এর সাথে কাজ করা পার্ট 1: স্বয়ংক্রিয় বক্তৃতা স্বীকৃতির জন্য XLS-R ফাইনটিউনিং

দ্বারা Picture in the Noise29m2024/05/04
Read on Terminal Reader

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

এই নির্দেশিকাটি স্বয়ংক্রিয় বক্তৃতা শনাক্তকরণের ("ASR") জন্য Meta AI-এর wav2vec2 XLS-R মডেলকে ফাইনটিউন করার পদক্ষেপগুলি ব্যাখ্যা করে৷ গাইডটিতে ধাপে ধাপে নির্দেশাবলী অন্তর্ভুক্ত রয়েছে কিভাবে একটি কাগল নোটবুক তৈরি করতে হয় যা মডেলটিকে সুন্দর করতে ব্যবহার করা যেতে পারে। মডেলটিকে একটি চিলির স্প্যানিশ ডেটাসেটে প্রশিক্ষণ দেওয়া হয়।
featured image - Wav2vec2 এর সাথে কাজ করা পার্ট 1: স্বয়ংক্রিয় বক্তৃতা স্বীকৃতির জন্য XLS-R ফাইনটিউনিং
Picture in the Noise HackerNoon profile picture
0-item
1-item

ভূমিকা

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 ধারণাগুলি বোঝেন। নতুনদের বিল্ড ধাপ অনুসরণ/বুঝতে অসুবিধা হতে পারে।

XLS-R-এ কিছুটা পটভূমি

2020 সালে প্রবর্তিত আসল wav2vec2 মডেলটি 960 ঘন্টার Librispeech ডেটাসেট স্পিচ অডিও এবং ~53,200 ঘন্টা LibriVox ডেটাসেট স্পিচ অডিওতে প্রশিক্ষিত ছিল। এটি প্রকাশের পর, দুটি মডেলের আকার উপলব্ধ ছিল: 95 মিলিয়ন প্যারামিটার সহ BASE মডেল এবং 317 মিলিয়ন প্যারামিটার সহ LARGE মডেল।


অন্যদিকে, XLS-R, 5টি ডেটাসেট থেকে বহুভাষিক বক্তৃতা অডিওতে প্রশিক্ষিত ছিল:


  • ভক্সপপুলি : ইউরোপীয় পার্লামেন্ট থেকে সংসদীয় বক্তৃতার 23টি ইউরোপীয় ভাষায় মোট ~372,000 ঘন্টার বক্তৃতা অডিও।
  • বহুভাষিক লাইব্রিস্পিচ : ইংরেজিতে অডিও ডেটার সংখ্যাগরিষ্ঠ (~44,000 ঘন্টা) সহ আটটি ইউরোপীয় ভাষায় মোট ~50,000 ঘন্টার বক্তৃতা অডিও।
  • কমনভয়েস : 60টি ভাষায় মোট ~7,000 ঘণ্টার স্পিচ অডিও।
  • VoxLingua107 : YouTube বিষয়বস্তুর উপর ভিত্তি করে 107টি ভাষায় মোট ~6,600 ঘণ্টার স্পিচ অডিও।
  • BABEL : কথোপকথন টেলিফোন বক্তৃতার উপর ভিত্তি করে 17টি আফ্রিকান এবং এশিয়ান ভাষায় মোট 1,100 ঘন্টার বক্তৃতা অডিও।


3টি XLS-R মডেল রয়েছে: 300 মিলিয়ন প্যারামিটার সহ XLS-R (0.3B) , 1 বিলিয়ন প্যারামিটার সহ XLS-R (1B) , এবং 2 বিলিয়ন প্যারামিটার সহ XLS-R (2B) ৷ এই গাইড XLS-R (0.3B) মডেল ব্যবহার করবে।

এপ্রোচ

wav2vev2 মডেলগুলিকে কীভাবে ফাইনটিউন করা যায় সে সম্পর্কে কিছু দুর্দান্ত লেখা রয়েছে, সম্ভবত এটি এক ধরণের "গোল্ড স্ট্যান্ডার্ড"। অবশ্যই, সাধারণ পদ্ধতি এখানে অনুকরণ করে যা আপনি অন্যান্য গাইডগুলিতে পাবেন। আপনি করবেন:


  • অডিও ডেটা এবং সংশ্লিষ্ট পাঠ্য প্রতিলিপিগুলির একটি প্রশিক্ষণ ডেটাসেট লোড করুন।
  • ডেটাসেটে টেক্সট ট্রান্সক্রিপশন থেকে একটি শব্দভান্ডার তৈরি করুন।
  • একটি wav2vec2 প্রসেসর শুরু করুন যা ইনপুট ডেটা থেকে বৈশিষ্ট্যগুলি বের করবে, সেইসাথে টেক্সট ট্রান্সক্রিপশনগুলিকে লেবেলের ক্রমগুলিতে রূপান্তর করবে৷
  • প্রক্রিয়াকৃত ইনপুট ডেটাতে ফাইনটিউন wav2vec2 XLS-R।


যাইহোক, এই গাইড এবং অন্যদের মধ্যে তিনটি মূল পার্থক্য রয়েছে:


  1. গাইড প্রাসঙ্গিক ML এবং ASR ধারণাগুলির উপর যতটা "ইনলাইন" আলোচনা প্রদান করে না।
    • স্বতন্ত্র নোটবুক কক্ষের প্রতিটি উপ-বিভাগে নির্দিষ্ট কক্ষের ব্যবহার/উদ্দেশ্য সম্পর্কে বিশদ বিবরণ অন্তর্ভুক্ত করা হলেও, মনে করা হয় আপনার একটি বিদ্যমান ML ব্যাকগ্রাউন্ড আছে এবং আপনি মৌলিক ASR ধারণাগুলি বোঝেন।
  2. আপনি যে Kaggle নোটবুকটি তৈরি করবেন তা শীর্ষ-স্তরের কক্ষগুলিতে ইউটিলিটি পদ্ধতিগুলি সংগঠিত করে৷
    • যেখানে অনেক ফাইনটিউনিং নোটবুকে এক ধরণের "স্ট্রিম-অফ-চেতনা"-টাইপ লেআউট থাকে, আমি সমস্ত ইউটিলিটি পদ্ধতি একসাথে সংগঠিত করার জন্য নির্বাচন করেছি। আপনি wav2vec2 এ নতুন হলে, আপনি এই পদ্ধতিটি বিভ্রান্তিকর খুঁজে পেতে পারেন। যাইহোক, পুনরাবৃত্ত করার জন্য, প্রতিটি সেলের ডেডিকেটেড সাব-সেকশনে প্রতিটি কক্ষের উদ্দেশ্য ব্যাখ্যা করার সময় আমি স্পষ্ট হওয়ার জন্য যথাসাধ্য চেষ্টা করি। আপনি যদি এইমাত্র wav2vec2 সম্পর্কে শিখছেন, তাহলে আপনি আমার হ্যাকারনুন নিবন্ধটি wav2vec2-এ স্বয়ংক্রিয় স্পীচ রিকগনিশনের জন্য সরল ইংরেজিতে এক নজরে দেখে উপকৃত হতে পারেন।
  3. এই নির্দেশিকা শুধুমাত্র ফাইনটিউনিংয়ের জন্য পদক্ষেপগুলি বর্ণনা করে।
    • ভূমিকায় উল্লিখিত হিসাবে, আমি আপনার তৈরি করা ফাইনটিউন করা XLS-R মডেলে অনুমান চালানোর বিষয়ে একটি পৃথক সহচর গাইড তৈরি করতে বেছে নিয়েছি। এই নির্দেশিকাটিকে অত্যধিক দীর্ঘ হতে না দেওয়ার কারণে এটি করা হয়েছিল।

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

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


  • একটি বিদ্যমান কাগল অ্যাকাউন্ট । আপনার যদি একটি বিদ্যমান Kaggle অ্যাকাউন্ট না থাকে, তাহলে আপনাকে একটি তৈরি করতে হবে।
  • একটি বিদ্যমান ওজন এবং বায়েস অ্যাকাউন্ট ("WandB") । আপনার যদি বিদ্যমান ওজন এবং বায়েস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে একটি তৈরি করতে হবে।
  • একটি WandB API কী। যদি আপনার কাছে একটি WandB API কী না থাকে তবে এখানে পদক্ষেপগুলি অনুসরণ করুন৷
  • পাইথনের মধ্যবর্তী জ্ঞান।
  • কাগল নোটবুকের সাথে কাজ করার মধ্যবর্তী জ্ঞান।
  • এমএল ধারণার মধ্যবর্তী জ্ঞান।
  • ASR ধারণার প্রাথমিক জ্ঞান।


আপনি নোটবুক তৈরি করা শুরু করার আগে, সরাসরি নীচের দুটি উপ-বিভাগ পর্যালোচনা করা সহায়ক হতে পারে। তারা বর্ণনা করে:


  1. প্রশিক্ষণ ডেটাসেট।
  2. প্রশিক্ষণের সময় ব্যবহৃত শব্দ ত্রুটি হার ("WER") মেট্রিক।

প্রশিক্ষণ ডেটাসেট

ভূমিকায় উল্লিখিত হিসাবে, 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 একটি টেক্সট রেফারেন্সের সাথে একটি পাঠ্যের পূর্বাভাস কতটা কাছাকাছি তা পরিমাপ করার জন্য একটি প্রক্রিয়া প্রদান করে। 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"), আরো সুনির্দিষ্ট ত্রুটি বিশ্লেষণের জন্য ব্যবহার করা যেতে পারে।

ফাইনটিউনিং নোটবুক তৈরি করা

আপনি এখন ফাইনটিউনিং নোটবুক তৈরি শুরু করতে প্রস্তুত৷


  • ধাপ 1 এবং ধাপ 2 আপনার Kaggle নোটবুক পরিবেশ সেট আপ করার মাধ্যমে আপনাকে গাইড করে।
  • ধাপ 3 নোটবুক নিজেই তৈরির মাধ্যমে আপনাকে গাইড করে। এটিতে 32টি উপ-পদক্ষেপ রয়েছে যা ফাইনটিউনিং নোটবুকের 32টি কোষের প্রতিনিধিত্ব করে।
  • ধাপ 4 আপনাকে নোটবুক চালানো, প্রশিক্ষণ পর্যবেক্ষণ এবং মডেল সংরক্ষণের মাধ্যমে গাইড করে।

ধাপ 1 - আপনার WandB API কী আনুন

আপনার Kaggle নোটবুক আপনার WandB API কী ব্যবহার করে WandB-এ প্রশিক্ষণ চালানোর ডেটা পাঠাতে কনফিগার করা আবশ্যক। এটি করার জন্য, আপনাকে এটি অনুলিপি করতে হবে।


  1. WandB এ লগ ইন করুন www.wandb.com এ।
  2. www.wandb.ai/authorize এ নেভিগেট করুন।
  3. পরবর্তী ধাপে ব্যবহারের জন্য আপনার API কী কপি করুন।

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

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


  1. Kaggle লগ ইন করুন.
  2. একটি নতুন Kaggle নোটবুক তৈরি করুন.
  3. অবশ্যই, নোটবুকের নাম ইচ্ছামতো পরিবর্তন করা যেতে পারে। এই নির্দেশিকাটি নোটবুকের নাম xls-r-300m-chilean-spanish-asr ব্যবহার করে।

ধাপ 2.2 - আপনার WandB API কী সেট করা

আপনার WandB API কী নিরাপদে সংরক্ষণ করতে একটি Kaggle সিক্রেট ব্যবহার করা হবে।


  1. কাগল নোটবুকের প্রধান মেনুতে অ্যাড-অনগুলিতে ক্লিক করুন।
  2. পপ-আপ মেনু থেকে সিক্রেট নির্বাচন করুন।
  3. লেবেল ক্ষেত্রে WANDB_API_KEY লেবেল লিখুন এবং মানটির জন্য আপনার WandB API কী লিখুন।
  4. নিশ্চিত করুন যে WANDB_API_KEY লেবেল ক্ষেত্রের বাম দিকে সংযুক্ত চেকবক্সটি চেক করা হয়েছে৷
  5. সম্পন্ন ক্লিক করুন.

ধাপ 2.3 - প্রশিক্ষণ ডেটাসেট যোগ করা

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


আপনার Kaggle নোটবুকে এই উভয় ডেটাসেট যোগ করুন।

ধাপ 3 - ফাইনটিউনিং নোটবুক তৈরি করা

নিচের 32টি উপ-পদক্ষেপগুলি প্রতিটি ফাইনটিউনিং নোটবুকের 32টি ঘরকে ক্রমানুসারে তৈরি করে।

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

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


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


  • প্রথম লাইন torchaudio প্যাকেজটিকে সর্বশেষ সংস্করণে আপগ্রেড করে। torchaudio অডিও ফাইল লোড করতে এবং অডিও ডেটা পুনরায় নমুনা করতে ব্যবহার করা হবে।
  • দ্বিতীয় লাইনটি jiwer প্যাকেজটি ইনস্টল করে যা পরে ব্যবহৃত HuggingFace Datasets লাইব্রেরি load_metric পদ্ধতি ব্যবহার করার জন্য প্রয়োজন।

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

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


 ### 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


  • আপনি সম্ভবত ইতিমধ্যেই এই প্যাকেজের বেশিরভাগের সাথে পরিচিত। নোটবুকে তাদের ব্যবহার ব্যাখ্যা করা হবে কারণ পরবর্তী কোষগুলি তৈরি করা হয়েছে।
  • এটি উল্লেখ করার মতো যে HuggingFace transformers লাইব্রেরি এবং সংশ্লিষ্ট Wav2Vec2* ক্লাসগুলি ফাইনটিউনিংয়ের জন্য ব্যবহৃত কার্যকারিতার মেরুদণ্ড প্রদান করে।

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

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


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


  • পূর্বে উল্লিখিত হিসাবে, WER মূল্যায়ন/হোল্ডআউট ডেটাতে মডেলের কর্মক্ষমতা পরিমাপ করতে ব্যবহার করা হবে।

ধাপ 3.4 - সেল 4: WandB-এ লগ ইন করা

চতুর্থ কক্ষটি আপনার 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)


  • API কীটি Kaggle নোটবুক কনফিগার করতে ব্যবহৃত হয় যাতে প্রশিক্ষণ চালানোর ডেটা WandB-তে পাঠানো হয়।

ধাপ 3.5 - সেল 5: কনস্ট্যান্ট সেট করা

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


 ### 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


  • নোটবুক এই কক্ষে প্রতিটি অনুমেয় ধ্রুবককে পৃষ্ঠ করে না। কিছু মান যা ধ্রুবক দ্বারা উপস্থাপিত হতে পারে ইনলাইনে রেখে দেওয়া হয়েছে।
  • উপরের অনেকগুলি ধ্রুবকের ব্যবহার স্ব-স্পষ্ট হওয়া উচিত। তাদের জন্য নয়, তাদের ব্যবহার নিম্নলিখিত উপ-পদক্ষেপে ব্যাখ্যা করা হবে।

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

ষষ্ঠ কক্ষটি ডেটাসেট সূচক ফাইলগুলি পড়ার জন্য উপযোগী পদ্ধতিগুলিকে সংজ্ঞায়িত করে (উপরের প্রশিক্ষণ ডেটাসেট উপ-বিভাগটি দেখুন), পাশাপাশি ট্রান্সক্রিপশন পাঠ্য পরিষ্কার করার এবং শব্দভাণ্ডার তৈরি করার জন্য। ষষ্ঠ কক্ষটি এতে সেট করুন:


 ### 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 এ উত্পন্ন শব্দভান্ডারের একটি উদাহরণ দেখতে পাবেন।

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

সপ্তম কক্ষ অডিও ডেটা লোড এবং পুনরায় নমুনা করার জন্য 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 দ্বারা ক্যাপচার করা হয়েছে।

ধাপ 3.8 - সেল 8: প্রশিক্ষণের জন্য ডেটা প্রস্তুত করার উপযোগী পদ্ধতি

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


 ### 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 এ একটি নমুনা এনকোডিং দেখতে পাবেন।

ধাপ 3.9 - সেল 9: শব্দ ত্রুটির হার গণনা করার জন্য ইউটিলিটি পদ্ধতি

নবম কক্ষটি চূড়ান্ত ইউটিলিটি পদ্ধতি সেল এবং এতে একটি রেফারেন্স ট্রান্সক্রিপশন এবং একটি পূর্বাভাসিত প্রতিলিপির মধ্যে শব্দ ত্রুটির হার গণনা করার পদ্ধতি রয়েছে। নবম কক্ষটি এতে সেট করুন:


 ### 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.10 - সেল 10: প্রশিক্ষণের ডেটা পড়া

দশম কক্ষটি ধাপ 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.12 ধাপে ডেটা একত্রিত করা হবে।

ধাপ 3.11 - সেল 11: ট্রেনিং ডেটা ছেঁটে ফেলা

একাদশ কক্ষটি ধাপ 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)


  • একটি অনুস্মারক হিসাবে, ধাপ 3.5 -এ NUM_LOAD_FROM_EACH_SET ধ্রুবক সেট প্রতিটি ডেটাসেট থেকে রাখা নমুনার পরিমাণ নির্ধারণ করে৷ মোট 3200 নমুনার জন্য এই গাইডে ধ্রুবকটি 1600 এ সেট করা হয়েছে।

ধাপ 3.12 - সেল 12: প্রশিক্ষণের নমুনা ডেটা একত্রিত করা

দ্বাদশ কক্ষটি ছাঁটাই করা প্রশিক্ষণ ডেটা তালিকাগুলিকে একত্রিত করে। দ্বাদশ কক্ষটি এতে সেট করুন:


 ### CELL 12: Combine training samples data ### all_training_samples = training_samples_male_cl + training_samples_female_cl

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

ত্রয়োদশ সেল প্রতিটি প্রশিক্ষণ ডেটা নমুনার উপর পুনরাবৃত্তি করে এবং ধাপ 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.14 - সেল 14: শব্দভান্ডার তৈরি করা

চতুর্দশ কক্ষটি পূর্ববর্তী ধাপ থেকে পরিষ্কার করা ট্রান্সক্রিপশন এবং ধাপ 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}

ধাপ 3.15 - সেল 15: শব্দভান্ডারে ওয়ার্ড ডিলিমিটার যোগ করা

পঞ্চদশ কক্ষটি সীমাবদ্ধ অক্ষর শব্দটি যোগ করে | শব্দভান্ডারে পঞ্চদশ সেল এতে সেট করুন:


 ### 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}


  • একটি প্রশ্ন যা স্বাভাবিকভাবেই উঠতে পারে তা হল: "কেন একটি শব্দ বিভেদকারী অক্ষর সংজ্ঞায়িত করা প্রয়োজন?" উদাহরণ স্বরূপ, লিখিত ইংরেজি এবং স্প্যানিশ শব্দের শেষে হোয়াইটস্পেস দ্বারা চিহ্নিত করা হয়েছে তাই স্পেস অক্ষরটিকে একটি শব্দ বিভেদক হিসাবে ব্যবহার করা একটি সহজ বিষয় হওয়া উচিত। মনে রাখবেন যে হাজার হাজারের মধ্যে ইংরেজি এবং স্প্যানিশ দুটি ভাষা মাত্র; এবং সমস্ত লিখিত ভাষা শব্দ সীমানা চিহ্নিত করার জন্য একটি স্থান ব্যবহার করে না।

ধাপ 3.16 - সেল 16: শব্দভান্ডার রপ্তানি করা

ষোড়শ কোষ একটি ফাইলে শব্দভাণ্ডার ডাম্প করে। ষোড়শ কক্ষটি এতে সেট করুন:


 ### CELL 16: Export vocabulary ### with open(VOCAB_FILE_PATH + "vocab.json", "w", encoding = "utf8") as vocab_file: json.dump(vocab_dict, vocab_file)


  • শব্দভান্ডার ফাইলটি পরবর্তী ধাপে ব্যবহার করা হবে, ধাপ 3.17 , Wav2Vec2CTCTokenizer ক্লাস শুরু করতে।

ধাপ 3.17 - সেল 17: টোকেনাইজার শুরু করুন

সপ্তদশ কোষটি 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}

ধাপ 3.18 - সেল 18: ফিচার এক্সট্র্যাক্টর শুরু করা

অষ্টাদশ সেলটি 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 )


  • ফিচার এক্সট্র্যাক্টর ব্যবহার করা হয় ইনপুট ডেটা থেকে ফিচার বের করতে যা এই ব্যবহারের ক্ষেত্রে অবশ্যই অডিও ডেটা। আপনি ধাপ 3.20 -এ প্রতিটি প্রশিক্ষণ ডেটা নমুনার জন্য অডিও ডেটা লোড করবেন।
  • 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 সেট করা হয়েছে।

ধাপ 3.19 - সেল 19: প্রসেসর শুরু করা

উনিশতম সেলটি 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)

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

বিংশতম কক্ষ 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, তাই এই ধাপে স্যাম্পলিং রেট উপেক্ষা করা হয়েছে।

ধাপ 3.21 - সেল 21: 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.22 - সেল 22: অডিও ডেটা এবং টেক্সট ট্রান্সক্রিপশন প্রক্রিয়াকরণ

বাইশ-সেকেন্ড সেল প্রতিটি অডিও ডেটা নমুনা থেকে বৈশিষ্ট্যগুলি বের করতে এবং লেবেলের একটি তালিকা হিসাবে প্রতিটি টেক্সট ট্রান্সক্রিপশন এনকোড করতে ধাপ 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.23 - সেল 23: প্রশিক্ষণ এবং বৈধতা ডেটাসেটে ইনপুট ডেটা বিভক্ত করা

তেইশতম সেল ধাপ 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% ডেটা প্রশিক্ষণ/ফাইনিং এর জন্য ব্যবহার করা হবে।
  • যেহেতু মোট 3,200টি প্রশিক্ষণের নমুনা রয়েছে, তাই 320টি নমুনা মূল্যায়নের জন্য ব্যবহার করা হবে বাকি 2,880টি নমুনা মডেলটিকে সুন্দর করার জন্য ব্যবহার করা হবে৷

ধাপ 3.24 - সেল 24: প্রশিক্ষণ এবং বৈধকরণ ডেটাসেটকে 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 })

ধাপ 3.25 - সেল 25: পূর্বপ্রশিক্ষিত মডেল শুরু করা

পঁচিশতম কোষটি পূর্বপ্রশিক্ষিত 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 -এ টোকেনাইজার শুরু করার পরে শব্দভান্ডারের আকার এবং নেটওয়ার্কের সামনের অংশের আউটপুট স্তর নোডের সংখ্যা প্রতিফলিত করে।

ধাপ 3.26 - সেল 26: ফ্রিজিং ফিচার এক্সট্র্যাক্টর ওজন

ছাব্বিশতম কোষটি বৈশিষ্ট্য নিষ্কাশনকারীর পূর্ব-প্রশিক্ষিত ওজনকে হিমায়িত করে। ছাব্বিশতম ঘরটি এতে সেট করুন:


 ### CELL 26: Freeze feature extractor ### model.freeze_feature_extractor()

ধাপ 3.27 - সেল 27: প্রশিক্ষণ আর্গুমেন্ট সেট করা

সাতাশতম কক্ষটি প্রশিক্ষণের আর্গুমেন্ট শুরু করে যা একজন 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 এ সেট করা হয়েছে।

ধাপ 3.28 - সেল 28: ডেটা কোলেটর লজিক সংজ্ঞায়িত করা

আটাশতম কক্ষটি গতিশীলভাবে প্যাডিং ইনপুট এবং লক্ষ্য ক্রমগুলির জন্য যুক্তি সংজ্ঞায়িত করে। আটাশতম কক্ষটি এতে সেট করুন:


 ### 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 তে সেট করা হয় তা নির্দিষ্ট করে যে ছোট অডিও ইনপুট ফিচার সিকোয়েন্স এবং লেবেল সিকোয়েন্সের দৈর্ঘ্য একটি মিনি-ব্যাচের দীর্ঘতম সিকোয়েন্সের সমান হওয়া উচিত।
  • ধাপ 3.18 -এ ফিচার এক্সট্র্যাক্টর আরম্ভ করার সময় অডিও ইনপুট বৈশিষ্ট্য 0.0 সেট মান দিয়ে প্যাড করা হয়।
  • ধাপ 3.17 -এ টোকেনাইজার শুরু করার সময় লেবেল ইনপুটগুলি প্রথমে প্যাডিং মান সেট করে প্যাড করা হয়। এই মানগুলি -100 দ্বারা প্রতিস্থাপিত হয় যাতে WER মেট্রিক গণনা করার সময় এই লেবেলগুলি উপেক্ষা করা হয়৷

ধাপ 3.29 - সেল 29: ডেটা কোলেটরের ইনস্ট্যান্স শুরু করা

29তম কক্ষটি পূর্ববর্তী ধাপে সংজ্ঞায়িত ডেটা কোলেটরের একটি উদাহরণ শুরু করে। ঊনবিংশতম কক্ষটি এতে সেট করুন:


 ### CELL 29: Initialize instance of data collator ### data_collator = DataCollatorCTCWithPadding(processor = processor, padding = True)

ধাপ 3.30 - সেল 30: প্রশিক্ষক শুরু করা

ত্রিশতম কক্ষটি 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 এ শুরু হয়েছে।
    • ডেটা সংগ্রাহক ধাপ 3.29 -এ শুরু হয়েছে।
    • প্রশিক্ষণের আর্গুমেন্টগুলি ধাপ 3.27 এ শুরু হয়েছে।
    • WER মূল্যায়ন পদ্ধতি ধাপ 3.9 এ সংজ্ঞায়িত করা হয়েছে।
    • ধাপ 3.24 থেকে train_data Dataset অবজেক্ট।
    • ধাপ 3.24 থেকে valid_data Dataset অবজেক্ট।
  • tokenizer প্যারামিটারটি processor.feature_extractor এ বরাদ্দ করা হয় এবং প্রতিটি মিনি-ব্যাচের সর্বোচ্চ দৈর্ঘ্যের ইনপুটে স্বয়ংক্রিয়ভাবে ইনপুট প্যাড করার জন্য data_collator এর সাথে কাজ করে।

ধাপ 3.31 - সেল 31: মডেলটি ফাইনটিউন করা

একত্রিশতম সেল মডেলটিকে সূক্ষ্মভাবে তৈরি করতে Trainer ক্লাসের উদাহরণে train পদ্ধতিকে কল করে। একত্রিশতম সেল এতে সেট করুন:


 ### CELL 31: Finetune the model ### trainer.train()

ধাপ 3.32 - সেল 32: সুন্দর মডেলটি সংরক্ষণ করুন

ত্রিশ সেকেন্ড সেল হল শেষ নোটবুক সেল। এটি Trainer দৃষ্টান্তে save_model পদ্ধতিতে কল করে সূক্ষ্ম সুর করা মডেলটিকে সংরক্ষণ করে। ত্রিশ-দ্বিতীয় সেল এতে সেট করুন:


 ### CELL 32: Save the finetuned model ### trainer.save_model(OUTPUT_DIR_PATH)

ধাপ 4 - প্রশিক্ষণ এবং মডেল সংরক্ষণ

ধাপ 4.1 - মডেল প্রশিক্ষণ

এখন নোটবুকের সমস্ত ঘর তৈরি করা হয়েছে, এটি ফাইনটিউনিং শুরু করার সময়।


  1. NVIDIA GPU P100 অ্যাক্সিলারেটরের সাথে চালানোর জন্য Kaggle নোটবুক সেট করুন।

  2. Kaggle উপর নোটবুক প্রতিশ্রুতি.

  3. আপনার WandB অ্যাকাউন্টে লগ ইন করে এবং সংশ্লিষ্ট রান সনাক্ত করে প্রশিক্ষণ চালানোর ডেটা নিরীক্ষণ করুন।


NVIDIA GPU P100 অ্যাক্সিলারেটর ব্যবহার করে 30 টিরও বেশি যুগের প্রশিক্ষণের জন্য ~5 ঘন্টা সময় নেওয়া উচিত। প্রশিক্ষণ শেষে হোল্ডআউট ডেটার WER ~0.15 এ নেমে যাওয়া উচিত। এটি একটি অত্যাধুনিক ফলাফল নয়, তবে সূক্ষ্ম সুর করা মডেলটি এখনও অনেক অ্যাপ্লিকেশনের জন্য যথেষ্ট কার্যকর।

ধাপ 4.2 - মডেল সংরক্ষণ

ফাইনটিউন করা মডেলটি ধাপ 3.5 -এ নির্দিষ্ট স্থির OUTPUT_DIR_PATH দ্বারা নির্দিষ্ট করা Kaggle ডিরেক্টরিতে আউটপুট হবে। মডেল আউটপুট নিম্নলিখিত ফাইল অন্তর্ভুক্ত করা উচিত:


 pytorch_model.bin config.json preprocessor_config.json vocab.json training_args.bin


এই ফাইলগুলি স্থানীয়ভাবে ডাউনলোড করা যেতে পারে। উপরন্তু, আপনি মডেল ফাইল ব্যবহার করে একটি নতুন Kaggle মডেল তৈরি করতে পারেন। কাগল মডেলটি সঙ্গী অনুমান গাইডের সাথে ব্যবহার করা হবে যাতে সূক্ষ্ম সুর করা মডেলে অনুমান চালানো হয়।


  1. আপনার Kaggle অ্যাকাউন্টে লগ ইন করুন. মডেল > নতুন মডেল -এ ক্লিক করুন।
  2. মডেল শিরোনাম ক্ষেত্রে আপনার সুন্দর মডেলের জন্য একটি শিরোনাম যোগ করুন।
  3. Create Model এ ক্লিক করুন।
  4. Go to model detail পৃষ্ঠাতে ক্লিক করুন।
  5. মডেল বৈচিত্রের অধীনে নতুন বৈচিত্র যোগ করুন- এ ক্লিক করুন।
  6. ফ্রেমওয়ার্ক সিলেক্ট মেনু থেকে ট্রান্সফরমার নির্বাচন করুন।
  7. Add new variation- এ ক্লিক করুন।
  8. আপলোড ডেটা উইন্ডোতে আপনার ফাইনটিউন করা মডেল ফাইলগুলিকে টেনে আনুন এবং ফেলে দিন৷ বিকল্পভাবে, ফাইল এক্সপ্লোরার উইন্ডো খুলতে ব্রাউজ ফাইল বোতামে ক্লিক করুন এবং আপনার ফাইনটিউন করা মডেল ফাইলগুলি নির্বাচন করুন।
  9. ফাইলগুলি Kaggle এ আপলোড হয়ে গেলে, Kaggle মডেল তৈরি করতে Create এ ক্লিক করুন।

উপসংহার

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