স্ক্র্যাচ থেকে কীভাবে একটি BERT মডেলকে প্রশিক্ষণ দেওয়া যায়

উত্স নোড: 1013329

স্ক্র্যাচ থেকে কীভাবে একটি BERT মডেলকে প্রশিক্ষণ দেওয়া যায়

BERT এর ইতালীয় কাজিন, FiliBERto এর সাথে দেখা করুন।


By জেমস ব্রিগস, ডেটা সায়েন্টিস্ট



BERT, কিন্তু ইতালিতে — লেখকের ছবি

 

আমার অনেক নিবন্ধ BERT-এর উপর দৃষ্টি নিবদ্ধ করা হয়েছে - যে মডেলটি এসেছে এবং প্রাকৃতিক ভাষা প্রক্রিয়াকরণের (NLP) জগতে আধিপত্য বিস্তার করেছে এবং ভাষা মডেলের জন্য একটি নতুন যুগ চিহ্নিত করেছে।

আপনারা যারা আগে ট্রান্সফরমার মডেল ব্যবহার করেননি (যেমন BERT কী) তাদের জন্য প্রক্রিয়াটি কিছুটা এরকম দেখাচ্ছে:

  • pip install transformers
  • একটি প্রাক-প্রশিক্ষিত ট্রান্সফরমার মডেল শুরু করুন - from_pretrained.
  • কিছু ডেটাতে এটি পরীক্ষা করুন।
  • হতে পারে মডেলটি সূক্ষ্ম সুর করুন (এটিকে আরও কিছু প্রশিক্ষণ দিন)।

এখন, এটি একটি দুর্দান্ত পদ্ধতি, তবে আমরা যদি এটি করি তবে আমাদের নিজস্ব ট্রান্সফরমার মডেল তৈরি করার পিছনে আমাদের বোঝার অভাব রয়েছে।

এবং, যদি আমরা আমাদের নিজস্ব ট্রান্সফরমার মডেলগুলি তৈরি করতে না পারি — আমাদের অবশ্যই একটি প্রাক-প্রশিক্ষিত মডেলের উপর নির্ভর করতে হবে যা আমাদের সমস্যার সাথে খাপ খায়, এটি সর্বদা হয় না:



নন-ইংরেজি BERT মডেল সম্পর্কে জিজ্ঞাসা করা কয়েকটি মন্তব্য

 

তাই এই নিবন্ধে, আমরা আমাদের নিজস্ব ট্রান্সফরমার মডেল তৈরি করার জন্য আমাদের যে পদক্ষেপগুলি গ্রহণ করতে হবে তা অন্বেষণ করব — বিশেষ করে BERT-এর আরও উন্নত সংস্করণ, যাকে বলা হয় RoBERTa।

একটি পর্যালোচনা

 
 
প্রক্রিয়াটির কয়েকটি ধাপ রয়েছে, তাই আমরা ডুব দেওয়ার আগে প্রথমে আমাদের কী করতে হবে তা সংক্ষিপ্ত করা যাক। মোট, চারটি মূল অংশ রয়েছে:

  • তথ্য পাওয়া যাচ্ছে
  • একটি টোকেনাইজার তৈরি করা
  • একটি ইনপুট পাইপলাইন তৈরি করা হচ্ছে
  • মডেল প্রশিক্ষণ

একবার আমরা এই প্রতিটি বিভাগে কাজ করার পরে, আমরা যে টোকেনাইজার এবং মডেলটি তৈরি করেছি তা নেব — এবং সেগুলিকে সংরক্ষণ করব যাতে আমরা সেগুলিকে আমরা সাধারণত যেভাবে ব্যবহার করি সেভাবে ব্যবহার করতে পারি। from_pretrained.

তথ্য পাওয়া

 
 
যে কোনো মেশিন লার্নিং প্রজেক্টের মতো, আমাদের ডেটা দরকার। একটি ট্রান্সফরমার মডেল প্রশিক্ষণের জন্য ডেটার পরিপ্রেক্ষিতে, আমরা সত্যিই পছন্দের জন্য নষ্ট হয়ে গেছি — আমরা প্রায় কোনও পাঠ্য ডেটা ব্যবহার করতে পারি।



HuggingFace এর ডেটাসেট লাইব্রেরি ব্যবহার করে OSCAR ডেটাসেট ডাউনলোড করার জন্য ভিডিও ওয়াকথ্রু

 

এবং, যদি একটি জিনিস থাকে যা আমাদের ইন্টারনেটে প্রচুর আছে - তা হল অসংগঠিত পাঠ্য ডেটা।

ইন্টারনেট থেকে স্ক্র্যাপ করা পাঠ্যের ডোমেনের বৃহত্তম ডেটাসেটগুলির মধ্যে একটি হল OSCAR ডেটাসেট৷

OSCAR ডেটাসেট বিপুল সংখ্যক বিভিন্ন ভাষার গর্ব করে — এবং স্ক্র্যাচ থেকে প্রশিক্ষণের জন্য সবচেয়ে পরিষ্কার ব্যবহারের ক্ষেত্রে একটি হল যাতে আমরা তেলুগু বা নাভাজোর মতো কিছু কম ব্যবহৃত ভাষাগুলিতে BERT প্রয়োগ করতে পারি।

দুর্ভাগ্যবশত, আমি যে কোন ডিগ্রির দক্ষতার সাথে একমাত্র ভাষা বলতে পারি তা হল ইংরেজি — কিন্তু আমার বান্ধবী হল ইতালীয়, এবং তাই সে — লরা, আমাদের ইতালীয়-ভাষী BERT মডেল — FiliBERto-এর ফলাফল মূল্যায়ন করবে৷

সুতরাং, OSCAR ডেটাসেটের ইতালীয় সেগমেন্ট ডাউনলোড করতে আমরা HuggingFace ব্যবহার করব datasets লাইব্রেরি - যা আমরা ইনস্টল করতে পারি pip install datasets. তারপরে আমরা OSCAR_IT এর সাথে ডাউনলোড করুন:

চলুন শুরু করা যাক dataset অবজেক্ট।

দুর্দান্ত, এখন আসুন আমাদের ডেটাকে একটি বিন্যাসে সংরক্ষণ করি যা আমরা আমাদের টোকেনাইজার তৈরি করার সময় ব্যবহার করতে পারি। আমাদেরকে সমতল টেক্সট ফাইলের একটি সেট তৈরি করতে হবে যার মধ্যে রয়েছে text আমাদের ডেটাসেট থেকে বৈশিষ্ট্য, এবং আমরা প্রতিটি বিভক্ত করব প্রসঙ্গ একটি নতুন লাইন ব্যবহার করে n.

আমাদের মধ্যে ওভার data/text/oscar_it ডিরেক্টরি আমরা খুঁজে পাব:


.txt ফাইলে পূর্ণ একটি উইন্ডোজ এক্সপ্লোরার উইন্ডো প্রদর্শন করা একটি স্ক্রিনশট — প্লেইনটেক্সট OSCAR ডেটা উপস্থাপন করে
আমাদের প্লেইনটেক্সট OSCAR ফাইল ধারণকারী ডিরেক্টরি

 

একটি টোকেনাইজার তৈরি করা

 
 
পরবর্তীতে টোকেনাইজার! ট্রান্সফরমার ব্যবহার করার সময় আমরা সাধারণত একটি টোকেনাইজার লোড করি, তার নিজ নিজ ট্রান্সফরমার মডেলের পাশাপাশি - টোকেনাইজার প্রক্রিয়াটির একটি মূল উপাদান।



আমাদের কাস্টম টোকেনাইজার তৈরির জন্য ভিডিও ওয়াকথ্রু

 

আমাদের টোকেনাইজার তৈরি করার সময় আমরা এটিকে আমাদের সমস্ত OSCAR ডেটা ফিড করব, আমাদের শব্দভান্ডারের আকার (টোকেনাইজারে টোকেনের সংখ্যা), এবং কোনও বিশেষ টোকেন নির্দিষ্ট করব।

এখন, RoBERta বিশেষ টোকেনগুলি দেখতে এইরকম:

সুতরাং, আমরা তাদের মধ্যে অন্তর্ভুক্ত করা নিশ্চিত special_tokens আমাদের টোকেনাইজারের প্যারামিটার train পদ্ধতি কল।

আমাদের টোকেনাইজার এখন প্রস্তুত, এবং আমরা পরবর্তী ব্যবহারের জন্য এটি ফাইল সংরক্ষণ করতে পারি:

এখন আমাদের কাছে দুটি ফাইল রয়েছে যা আমাদের নতুন সংজ্ঞায়িত করে ফিলিবারটো টোকেনাইজার:

  • merges.txt — টোকেনগুলিতে পাঠ্যের প্রাথমিক ম্যাপিং সম্পাদন করে
  • vocab.json — টোকেনকে টোকেন আইডিতে ম্যাপ করে

এবং সেগুলির সাথে, আমরা আমাদের টোকেনাইজার শুরু করার দিকে এগিয়ে যেতে পারি যাতে আমরা এটি ব্যবহার করতে পারি যেমন আমরা অন্য কোনও ব্যবহার করব from_pretrained টোকেনাইজার

টোকেনাইজার শুরু করা হচ্ছে

 
 
আমরা প্রথমে টোকেনাইজারটি শুরু করি যে দুটি ফাইল আমরা আগে তৈরি করেছি - একটি সাধারণ ব্যবহার করে from_pretrained:

এখন আমাদের টোকেনাইজার প্রস্তুত, আমরা এটির সাথে কিছু পাঠ্য এনকোড করার চেষ্টা করতে পারি। এনকোডিংয়ের সময় আমরা একই দুটি পদ্ধতি ব্যবহার করি যা আমরা সাধারণত ব্যবহার করব, encode এবং encode_batch.

এনকোডিং অবজেক্ট থেকে tokens আমরা নিষ্কাশন করা হবে input_ids এবং attention_mask FiliBERto এর সাথে ব্যবহারের জন্য টেনসর।

ইনপুট পাইপলাইন তৈরি করা হচ্ছে

 
 
আমাদের প্রশিক্ষণ প্রক্রিয়ার ইনপুট পাইপলাইন পুরো প্রক্রিয়ার আরও জটিল অংশ। এর মধ্যে রয়েছে আমাদের কাঁচা OSCAR প্রশিক্ষণের ডেটা নেওয়া, এটিকে রূপান্তর করা এবং এটিকে একটি তে লোড করা DataLoader প্রশিক্ষণের জন্য প্রস্তুত।



MLM ইনপুট পাইপলাইনের ভিডিও ওয়াকথ্রু

 

ডেটা প্রস্তুত করা হচ্ছে

 
 
আমরা একটি একক নমুনা দিয়ে শুরু করব এবং প্রস্তুতির যুক্তি দিয়ে কাজ করব।

প্রথমত, আমাদের ফাইল খুলতে হবে — যে ফাইলগুলি আমরা সংরক্ষণ করেছি .txt আগে ফাইল। আমরা প্রতিটি নতুন লাইনের অক্ষরের উপর ভিত্তি করে বিভক্ত করি n এটি পৃথক নমুনা নির্দেশ করে।

তারপর আমরা ব্যবহার করে আমাদের তথ্য এনকোড tokenizer - এর মতো কী প্যারামিটার অন্তর্ভুক্ত করা নিশ্চিত করা max_lengthpadding, এবং truncation.

এবং এখন আমরা আমাদের টেনসর তৈরির দিকে এগিয়ে যেতে পারি — আমরা মুখোশ-ভাষা মডেলিং (এমএলএম) এর মাধ্যমে আমাদের মডেলকে প্রশিক্ষণ দেব। সুতরাং, আমাদের তিনটি টেনসর দরকার:

  • input_ids — আমাদের token_ids মাস্ক টোকেন ব্যবহার করে ~15% টোকেন মাস্ক করা হয়েছে <mask>.
  • মনোযোগ_মাস্ক — একটি টেনসর 1এস এবং 0s, 'বাস্তব' টোকেন/প্যাডিং টোকেনের অবস্থান চিহ্নিত করা — মনোযোগের গণনায় ব্যবহৃত হয়।
  • লেবেল — আমাদের token_ids সঙ্গে না। মাস্কিং

আপনি যদি MLM এর সাথে পরিচিত না হন তবে আমি এটি ব্যাখ্যা করেছি এখানে.

আমাদের attention_mask এবং labels tensors সহজভাবে আমাদের থেকে বের করা হয় batch. দ্য input_ids তবে টেনসরগুলির জন্য আরও মনোযোগের প্রয়োজন, এই টেনসরের জন্য আমরা টোকেনের ~15% মাস্ক করি — তাদের টোকেন আইডি বরাদ্দ করে 3.

চূড়ান্ত আউটপুটে, আমরা একটি এনকোড করা অংশ দেখতে পারি input_ids টেনসর খুব প্রথম টোকেন আইডি হয় 1 - দ্য [CLS] টোকেন. টেনসরের চারপাশে ডটেড আমাদের বেশ কয়েকটি আছে 3 টোকেন আইডি - এগুলি আমাদের নতুন যোগ করা হয়েছে [MASK] টি টোকেন।

ডেটালোডার তৈরি করা

 
 
পরবর্তী, আমরা আমাদের সংজ্ঞায়িত Dataset ক্লাস — যা আমরা পাইটর্চ হিসাবে আমাদের তিনটি এনকোডেড টেনসর শুরু করতে ব্যবহার করি torch.utils.data.Dataset অবজেক্ট।

অবশেষে, আমাদের dataset একটি PyTorch মধ্যে লোড করা হয় DataLoader অবজেক্ট - যা আমরা প্রশিক্ষণের সময় আমাদের মডেলে আমাদের ডেটা লোড করতে ব্যবহার করি।

মডেল প্রশিক্ষণ

 
 
প্রশিক্ষণের জন্য আমাদের দুটি জিনিস দরকার, আমাদের DataLoader এবং একটি মডেল। দ্য DataLoader আমাদের আছে - কিন্তু কোন মডেল নেই।



মডেলটি শুরু করা হচ্ছে

 
 
প্রশিক্ষণের জন্য, আমাদের একটি কাঁচা প্রয়োজন (প্রাক-প্রশিক্ষিত নয়) BERTLMHeadModel. এটি তৈরি করার জন্য, আমাদের প্রথমে একটি RoBERTa কনফিগার অবজেক্ট তৈরি করতে হবে যে প্যারামিটারগুলি দিয়ে আমরা FiliBERto আরম্ভ করতে চাই।

তারপর, আমরা একটি ভাষা মডেলিং (LM) হেড সহ আমাদের RoBERta মডেল আমদানি এবং শুরু করি।

প্রশিক্ষণ প্রস্তুতি

 
 
আমাদের প্রশিক্ষণ লুপে যাওয়ার আগে আমাদের কয়েকটি জিনিস সেট আপ করতে হবে। প্রথমত, আমরা GPU/CPU ব্যবহার সেট আপ করি। তারপরে আমরা আমাদের মডেলের প্রশিক্ষণ মোড সক্রিয় করি — এবং অবশেষে, আমাদের অপ্টিমাইজার শুরু করি।

প্রশিক্ষণ

 
 
অবশেষে - প্রশিক্ষণের সময়! PyTorch-এর মাধ্যমে প্রশিক্ষণের সময় আমরা সাধারণত যেভাবে প্রশিক্ষণ দিই, ঠিক সেভাবেই প্রশিক্ষণ দিই।

আমরা যদি টেনসরবোর্ডে যাই তবে সময়ের সাথে সাথে আমরা আমাদের ক্ষতি খুঁজে পাব — এটি আশাব্যঞ্জক দেখাচ্ছে।



ক্ষতি/সময় — একাধিক প্রশিক্ষণ সেশন এই চার্টে একসাথে থ্রেড করা হয়েছে

 

রিয়াল টেস্ট

 
 
এবার আসল পরীক্ষার পালা। আমরা একটি MLM পাইপলাইন সেট আপ করি — এবং লরাকে ফলাফলগুলি মূল্যায়ন করতে বলি৷ আপনি এখানে 22:44 এ ভিডিও পর্যালোচনা দেখতে পারেন:



আমরা প্রথমে একটি শুরু করি pipeline বস্তু, ব্যবহার করে 'fill-mask' যুক্তি. তারপরে আমাদের মডেলটি এভাবে পরীক্ষা করা শুরু করুন:

"ciao আসা va?" সঠিক উত্তর! এটি আমার ইতালীয় যতটা উন্নত - তাই, আসুন এটি লরার কাছে হস্তান্তর করি।

আমরা সঙ্গে শুরু "বুওঙ্গিওরনো, আসো?" - বা "শুভ দিন তুমি কেমন আছো?":

প্রথম উত্তর, "বুওঙ্গিওরনো, চি ভা?" মানে "শুভ দিন, কে আছে?" — যেমন অর্থহীন। কিন্তু, আমাদের দ্বিতীয় উত্তর সঠিক!

পরবর্তীতে, একটু কঠিন বাক্যাংশ, "ciao, dove ci incontriamo oggi pomeriggio?" - বা "হাই, আমরা আজ বিকেলে কোথায় দেখা করতে যাচ্ছি?":

এবং আমরা আরও কিছু ইতিবাচক ফলাফল ফিরিয়ে দিই:

✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"

অবশেষে, আরও একটি, কঠিন বাক্য, "কোসা সারাবে উত্তরোত্তর সে আভেসিমো স্কেলটো আন আলট্রো জিওর্নো?" - অথবা "আমরা যদি অন্য একটি দিন বেছে নিতাম তাহলে কি হতো?":

আমরা এখানে আরও কয়েকটি ভাল আরও ভাল উত্তর ফিরিয়ে দিই:

✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"

সামগ্রিকভাবে, দেখে মনে হচ্ছে আমাদের মডেল লরার পরীক্ষায় উত্তীর্ণ হয়েছে — এবং আমাদের কাছে এখন ফিলিবারটো নামে একটি দক্ষ ইতালীয় ভাষার মডেল রয়েছে!

এটি স্ক্র্যাচ থেকে একটি BERT মডেল প্রশিক্ষণের এই ওয়াকথ্রু জন্য!

আমরা আমাদের ডেটা পাওয়ার এবং ফর্ম্যাট করা থেকে শুরু করে আমাদের কাঁচা BERT মডেলকে প্রশিক্ষিত করার জন্য ভাষা মডেলিং ব্যবহার করে অনেক কিছু কভার করেছি।

আমি আপনি এই নিবন্ধ আস্বাদিত, আশা করি! যদি আপনার কোন প্রশ্ন থাকে, আমাকে মাধ্যমে জানান Twitter অথবা নীচের মন্তব্যে. আপনি এই মত আরো কন্টেন্ট চান, আমি পোস্ট ইউটিউব খুব.

পড়ার জন্য ধন্যবাদ!

 

70% ছাড়! প্রাকৃতিক ভাষা প্রক্রিয়াকরণ: পাইথনে ট্রান্সফরমার সহ NLP

আধুনিক এনএলপিতে ট্রান্সফরমার মডেলগুলি ডি-ফ্যাক্টো স্ট্যান্ডার্ড। তারা নিজেদেরকে সবচেয়ে অভিব্যক্তিপূর্ণ হিসেবে প্রমাণ করেছে...
 

*সমস্ত ছবি লেখকের ব্যতীত যেখানে অন্যথায় বলা হয়েছে

 
বায়ো: জেমস ব্রিগস প্রাকৃতিক ভাষা প্রক্রিয়াকরণে বিশেষজ্ঞ এবং লন্ডন, যুক্তরাজ্যে অবস্থিত ফিনান্স সেক্টরে কাজ করা একজন ডেটা বিজ্ঞানী। এছাড়াও তিনি একজন ফ্রিল্যান্স পরামর্শদাতা, লেখক এবং বিষয়বস্তু নির্মাতা। আপনি ইমেলের মাধ্যমে লেখকের কাছে পৌঁছাতে পারেন (jamescalam94@gmail.com).

মূল। অনুমতি নিয়ে পোস্ট করা।

সম্পর্কিত:



শীর্ষ গল্পগুলি গত 30 দিন
সবচেয়ে জনপ্রিয়
  1. 6 সালে শীর্ষ 2021 ডেটা সায়েন্স অনলাইন কোর্স
  2. ডেটা সায়েন্টিস্ট এবং এমএল ইঞ্জিনিয়াররা বিলাসবহুল কর্মচারী
  3. গুগলের গবেষণা পরিচালক থেকে ডেটা সায়েন্স শেখার পরামর্শ
  4. গিটহাব কপিলট ওপেন সোর্স বিকল্প
  5. গভীর শিক্ষার জ্যামিতিক ভিত্তি
সর্বাধিক ভাগ করা
  1. কেন এবং কীভাবে আপনার "উত্পাদনশীল ডেটা সায়েন্স" শিখতে হবে?
  2. শুধু গভীর শিক্ষার জন্য নয়: কিভাবে GPUs ডেটা সায়েন্স এবং ডেটা অ্যানালিটিক্সকে ত্বরান্বিত করে
  3. টেরাফর্মের সাহায্যে 5 মিনিটের মধ্যে একটি আধুনিক ডেটা স্ট্যাক বুটস্ট্র্যাপ করুন
  4. RAPIDS সহ GPU- চালিত ডেটা সায়েন্স (গভীর শিক্ষা নয়)
  5. 90 দিনের মধ্যে একটি বিশ্লেষণ প্রকৌশলী হন

সূত্র: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html

সময় স্ট্যাম্প:

থেকে আরো কেডনুগেটস