स्क्रैच से BERT मॉडल को कैसे प्रशिक्षित करें

स्रोत नोड: 1013329

स्क्रैच से BERT मॉडल को कैसे प्रशिक्षित करें

BERT के इतालवी चचेरे भाई, FiliBERTo से मिलें।


By जेम्स ब्रिग्स, आँकड़े वाला वैज्ञानिक



बर्ट, लेकिन इटली में - छवि लेखक द्वारा

 

मेरे कई लेख बीईआरटी पर केंद्रित हैं - वह मॉडल जो आया और प्राकृतिक भाषा प्रसंस्करण (एनएलपी) की दुनिया पर हावी हो गया और भाषा मॉडल के लिए एक नए युग को चिह्नित किया।

आपमें से उन लोगों के लिए जिन्होंने पहले ट्रांसफार्मर मॉडल (उदाहरण के लिए 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 डेटा को फीड करेंगे, अपनी शब्दावली का आकार (टोकनाइज़र में टोकन की संख्या), और किसी विशेष टोकन को निर्दिष्ट करेंगे।

अब, रॉबर्टा विशेष टोकन इस तरह दिखते हैं:

इसलिए, हम उन्हें इसमें शामिल करना सुनिश्चित करते हैं special_tokens हमारे टोकननाइज़र का पैरामीटर train विधि कॉल.

हमारा टोकननाइज़र अब तैयार है, और हम बाद में उपयोग के लिए इसे फ़ाइल में सहेज सकते हैं:

अब हमारे पास दो फ़ाइलें हैं जो हमारी नई परिभाषित करती हैं FiliBERTo टोकनाइज़र:

  • मर्ज.txt - टोकन के लिए टेक्स्ट की प्रारंभिक मैपिंग करता है
  • vocab.json - टोकन को टोकन आईडी में मैप करता है

और उनके साथ, हम अपने टोकननाइज़र को आरंभ करने के लिए आगे बढ़ सकते हैं ताकि हम इसका उपयोग उसी तरह कर सकें जैसे हम किसी अन्य का उपयोग करते हैं from_pretrained टोकननाइज़र.

टोकनाइज़र को प्रारंभ करना

 
 
हम पहले टोकननाइज़र को उन दो फ़ाइलों का उपयोग करके प्रारंभ करते हैं जिन्हें हमने पहले बनाया था - एक सरल का उपयोग करके from_pretrained:

अब हमारा टोकननाइज़र तैयार है, हम इसके साथ कुछ टेक्स्ट को एन्कोड करने का प्रयास कर सकते हैं। एन्कोडिंग करते समय हम उन्हीं दो विधियों का उपयोग करते हैं जिनका हम आमतौर पर उपयोग करते हैं, encode और encode_batch.

एन्कोडिंग ऑब्जेक्ट से tokens हम निकाल रहे होंगे input_ids और attention_mask FiliBERTo के साथ उपयोग के लिए टेंसर।

इनपुट पाइपलाइन बनाना

 
 
हमारी प्रशिक्षण प्रक्रिया की इनपुट पाइपलाइन पूरी प्रक्रिया का अधिक जटिल हिस्सा है। इसमें हमारा कच्चा OSCAR प्रशिक्षण डेटा लेना, उसे बदलना और उसे एक में लोड करना शामिल है DataLoader प्रशिक्षण के लिए तैयार.



एमएलएम इनपुट पाइपलाइन का वीडियो वॉकथ्रू

 

डेटा तैयार करना

 
 
हम एक नमूने से शुरुआत करेंगे और तैयारी तर्क पर काम करेंगे।

सबसे पहले, हमें अपनी फ़ाइल खोलनी होगी - वही फ़ाइलें जिन्हें हमने सहेजा था .txt फ़ाइलें पहले. हम प्रत्येक को न्यूलाइन वर्णों के आधार पर विभाजित करते हैं n क्योंकि यह व्यक्तिगत नमूनों को इंगित करता है।

फिर हम इसका उपयोग करके अपने डेटा को एन्कोड करते हैं tokenizer - जैसे प्रमुख मापदंडों को शामिल करना सुनिश्चित करना max_lengthpadding, तथा truncation.

और अब हम अपने टेंसर बनाने के लिए आगे बढ़ सकते हैं - हम अपने मॉडल को मास्क्ड-लैंग्वेज मॉडलिंग (एमएलएम) के माध्यम से प्रशिक्षित करेंगे। तो, हमें तीन टेंसर की आवश्यकता है:

  • इनपुट_आईडी - हमारा टोकन आईडी मास्क टोकन का उपयोग करके ~15% टोकन को छुपाया जाता है <mask>.
  • अटेंशन_मास्क - का एक टेंसर 1s और 0एस, 'वास्तविक' टोकन/पैडिंग टोकन की स्थिति को चिह्नित करता है - जिसका उपयोग ध्यान गणना में किया जाता है।
  • लेबलों - हमारा टोकन आईडी साथ में नहीं मास्किंग।

यदि आप एमएलएम से परिचित नहीं हैं, तो मैंने इसे समझाया है यहाँ उत्पन्न करें.

हमारे attention_mask और labels टेंसर बस हमारे से निकाले जाते हैं batch।  input_ids हालाँकि, टेंसर पर अधिक ध्यान देने की आवश्यकता है, इस टेंसर के लिए हम ~15% टोकन को छिपा देते हैं - उन्हें टोकन आईडी प्रदान करते हैं 3.

अंतिम आउटपुट में, हम एन्कोडेड का हिस्सा देख सकते हैं input_ids टेंसर. सबसे पहली टोकन आईडी है 1 - द [CLS] टोकन. टेंसर के चारों ओर बिंदीदार हमारे पास कई हैं 3 टोकन आईडी - ये हमारी नई जोड़ी गई हैं [MASK] टोकन।

डेटालोडर का निर्माण

 
 
अगला, हम अपना परिभाषित करते हैं Dataset क्लास - जिसका उपयोग हम अपने तीन एन्कोडेड टेंसर को PyTorch के रूप में आरंभ करने के लिए करते हैं torch.utils.data.Dataset वस्तुओं।

अंत में, हमारा dataset PyTorch में लोड किया गया है DataLoader ऑब्जेक्ट - जिसका उपयोग हम प्रशिक्षण के दौरान अपने डेटा को अपने मॉडल में लोड करने के लिए करते हैं।

मॉडल को प्रशिक्षित करना

 
 
ट्रेनिंग के लिए हमें दो चीजों की जरूरत होती है, हमारी DataLoader और एक मॉडल. DataLoader हमारे पास है - लेकिन कोई मॉडल नहीं।



मॉडल को प्रारंभ करना

 
 
प्रशिक्षण के लिए, हमें कच्चे (पूर्व-प्रशिक्षित नहीं) की आवश्यकता है BERTLMHeadModel. इसे बनाने के लिए, हमें सबसे पहले उन मापदंडों का वर्णन करने के लिए एक RoBERTa कॉन्फिग ऑब्जेक्ट बनाना होगा, जिनके साथ हम FiliBERTo को आरंभ करना चाहते हैं।

फिर, हम अपने रॉबर्टा मॉडल को भाषा मॉडलिंग (एलएम) हेड के साथ आयात और आरंभ करते हैं।

प्रशिक्षण की तैयारी

 
 
अपने प्रशिक्षण चक्र पर आगे बढ़ने से पहले हमें कुछ चीजें स्थापित करने की आवश्यकता है। सबसे पहले, हम GPU/CPU उपयोग सेट करते हैं। फिर हम अपने मॉडल के प्रशिक्षण मोड को सक्रिय करते हैं - और अंत में, अपने ऑप्टिमाइज़र को आरंभ करते हैं।

प्रशिक्षण

 
 
अंत में - प्रशिक्षण का समय! हम वैसे ही प्रशिक्षण लेते हैं जैसे हम आमतौर पर PyTorch के माध्यम से प्रशिक्षण के दौरान करते हैं।

यदि हम टेन्सरबोर्ड की ओर बढ़ते हैं तो हमें समय के साथ अपना नुकसान पता चल जाएगा - यह आशाजनक लगता है।



हानि / समय - इस चार्ट में कई प्रशिक्षण सत्रों को एक साथ पिरोया गया है

 

असली परीक्षा

 
 
अब असली परीक्षा का समय आ गया है. हमने एक एमएलएम पाइपलाइन स्थापित की - और लौरा से परिणामों का आकलन करने के लिए कहा। आप वीडियो समीक्षा यहां 22:44 पर देख सकते हैं:



हम सबसे पहले a आरंभ करते हैं pipeline ऑब्जेक्ट, का उपयोग कर 'fill-mask' तर्क। फिर हमारे मॉडल का परीक्षण इस प्रकार शुरू करें:

“सियाओ कैसे वा?” सही उत्तर है! यह उतना ही उन्नत है जितना मेरा इटालियन है - तो, ​​आइए इसे लौरा को सौंप दें।

हम शुरुआत करते हैं "बुओंगियोर्नो, आओ वा?" - या "अच्छा दिन आप कैसे हैं?":

पहला उत्तर, "बुओंगियोर्नो, ची वा?" इसका मतलब है "शुभ दिन, वहाँ कौन है?" - जैसे निरर्थक। लेकिन, हमारा दूसरा उत्तर सही है!

अगला, थोड़ा कठिन वाक्यांश, "चियाओ, डोव सी इनकॉन्ट्रियामो ओग्गी पोमेरिगियो?" - या "हाय, हम आज दोपहर को कहाँ मिलने वाले हैं?":

और हम कुछ और सकारात्मक परिणाम लौटाते हैं:

✅ "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?"

कुल मिलाकर, ऐसा लगता है कि हमारे मॉडल ने लौरा के परीक्षण पास कर लिए हैं - और अब हमारे पास FiliBERTo नामक एक सक्षम इतालवी भाषा मॉडल है!

शुरुआत से ही BERT मॉडल को प्रशिक्षित करने के इस पूर्वाभ्यास के लिए बस इतना ही!

हमने अपने डेटा को प्राप्त करने और उसे फ़ॉर्मेट करने से लेकर अपने कच्चे BERT मॉडल को प्रशिक्षित करने के लिए भाषा मॉडलिंग का उपयोग करने तक बहुत सारी बातें कवर की हैं।

मुझे आशा है कि आपको यह लेख पसंद आया होगा! यदि आपके कोई प्रश्न हैं, तो मुझे इसके माध्यम से बताएं ट्विटर या नीचे टिप्पणी में. यदि आप इस तरह की और सामग्री चाहते हैं, तो मैं पोस्ट करता हूँ यूट्यूब भी है.

पढ़ने के लिए धन्यवाद!

 

70% छूट! प्राकृतिक भाषा प्रसंस्करण: पायथन में ट्रांसफॉर्मर के साथ एनएलपी

ट्रांसफार्मर मॉडल आधुनिक एनएलपी में वास्तविक मानक हैं। उन्होंने खुद को सबसे अधिक अभिव्यंजक साबित किया है...
 

*सभी चित्र लेखक द्वारा हैं, सिवाय इसके कि जहां अन्यथा कहा गया हो

 
जैव: जेम्स ब्रिग्स लंदन, ब्रिटेन में स्थित वित्त क्षेत्र में प्राकृतिक भाषा प्रसंस्करण और काम करने में विशेषज्ञता वाले एक डेटा वैज्ञानिक हैं। वह एक स्वतंत्र गुरु, लेखक और सामग्री निर्माता भी हैं। आप ईमेल के माध्यम से लेखक तक पहुँच सकते हैं (Jamescalam94@gmail.com).

मूल। अनुमति के साथ पुनर्प्रकाशित।

संबंधित:



शीर्ष आलेख पिछले 30 दिन
सबसे लोकप्रिय
  1. 6 में शीर्ष 2021 डेटा विज्ञान ऑनलाइन पाठ्यक्रम
  2. डेटा वैज्ञानिक और एमएल इंजीनियर लक्जरी कर्मचारी हैं
  3. Google के अनुसंधान निदेशक से डेटा विज्ञान सीखने की सलाह
  4. GitHub Copilot ओपन सोर्स अल्टरनेटिव्स
  5. डीप लर्निंग की ज्यामितीय नींव
सर्वाधिक साझा
  1. आपको "उत्पादक डेटा विज्ञान" क्यों और कैसे सीखना चाहिए?
  2. न केवल डीप लर्निंग के लिए: जीपीयू डेटा साइंस और डेटा एनालिटिक्स को कैसे तेज करता है
  3. टेराफॉर्म के साथ 5 मिनट में एक आधुनिक डेटा स्टैक बूटस्ट्रैप करें
  4. रैपिड्स के साथ जीपीयू-पावर्ड डेटा साइंस (डीप लर्निंग नहीं)
  5. 90 दिनों में एनालिटिक्स इंजीनियर बनें Engineer

स्रोत: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html

समय टिकट:

से अधिक केडनगेट्स