docs/si/transformers/mlm/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/transformers/mlm/ init.py)
මෙය PyTorch ක්රියාත්මක කිරීමකි මාස්ඩ් භාෂා ආකෘතිය (MLM) කඩදාසි වල හඳුන්වා දී ඇති BERT ආකෘතිය පූර්ව පුහුණු කිරීම සඳහා භාවිතා කරන BERT: භාෂා අවබෝධය සඳහා ගැඹුරු ද්විපාර්ශ්වික පරිවර්තකයන් පූර්ව පුහුණුව.
බර්ට්ආකෘතිය ට්රාන්ස්ෆෝමර් ආකෘතියකි. කඩදාසි MLM භාවිතා කරමින් ආකෘතිය පූර්ව පුහුණු කරයි සහ ඊළඟ වාක්ය අනාවැකිය සමඟ. අපි මෙහි ක්රියාත්මක කර ඇත්තේ MLM පමණි.
_ඊළඟවාක්ය අනාවැකිය දී, ආදර්ශ වාක්ය දෙකක් ලබා දී ඇති A B අතර ආදර්ශ පහත සඳහන් B වාක්යය_යන්න ද්විමය අනාවැකිය කරයි A සත්ය පෙළෙහි. ආකෘතිය සත්ය වාක්ය යුගල සමඟ පෝෂණය වේ 50% කාලය සහ අහඹු යුගල 50% කාලය. මෙම වර්ගීකරණය MLM අයදුම් කරන අතරතුර සිදු කරනු ලැබේ. අපිමෙය මෙහි ක්රියාත්මක කර නැත.
මෙයඅහඹු ලෙස ටෝකන ප්රතිශතයක් ආවරණය කරන අතර වෙස්මුහුණු ටෝකන පුරෝකථනය කිරීමට ආකෘතිය පුහුණු කරයි. ඔවුන් ටෝකන වලින් 15% ක් ආවරණය කරන්නේ විශේෂ [MASK] ටෝකනයකින් ප්රතිස්ථාපනය කිරීමෙනි.
අලාභයගණනය කරනු ලබන්නේ වෙස්මූඩ් ටෝකන පුරෝකථනය කිරීම මත පමණි. එකල [MASK] ටෝකන නොමැති බැවින් මෙය මනාව සුසර කිරීම සහ සැබෑ භාවිතය අතරතුර ගැටළුවක් ඇති කරයි. එබැවින් අපට අර්ථවත් නිරූපණයක් ලබා නොගත හැකිය.
මෙයමඟහරවා ගැනීම සඳහා වෙස්මූඩ් ටෝකන වලින් 10% ක් මුල් ටෝකනය සමඟ ප්රතිස්ථාපනය වන අතර වෙස්මූඩ් ටෝකන වලින් තවත් 10% ක් අහඹු ටෝකනයකින් ප්රතිස්ථාපනය වේ. එම ස්ථානයේ ආදාන ටෝකනය a ද නැද්ද යන්න සත්ය ටෝකනය පිළිබඳ නිරූපණයන් ලබා දීමට මෙය ආකෘතිය පුහුණු [MASK] කරයි. අහඹු ටෝකනයක් සමඟ ප්රතිස්ථාපනය කිරීමෙන් එය සන්දර්භයෙන් තොරතුරු ඇති නිරූපණයක් ලබා දීමට හේතු වේ; අහඹු ලෙස ප්රතිස්ථාපනය කරන ලද ටෝකන සවි කිරීමට එය සන්දර්භය භාවිතා කළ යුතු බැවිනි.
කුඩාපුහුණු සං signal ාවක් ඇති බැවින් ස්වයංක්රීය ප්රතිගාමී ආකෘතිවලට වඩා MLMs පුහුණු කිරීම දුෂ්කර ය. එනම් නියැදියකට පුහුණු කරනු ලබන්නේ අනාවැකි වලින් සුළු ප්රතිශතයක් පමණි.
තවත්ගැටළුවක් වන්නේ ආකෘතිය ද්වි දිශානුගත බැවින් ඕනෑම ටෝකනයකට වෙනත් ඕනෑම ටෝකනයක් දැකිය හැකිය. මෙය “ණය පැවරුම” දුෂ්කර කරයි. පුරෝකථනය කිරීමට උත්සාහ කරන චරිත මට්ටමේ ආකෘතිය ඔබට ඇති බව කියමු home *s where i want to be . අවම වශයෙන් පුහුණුවේ මුල් අවධියේදී, ප්රතිස්ථාපනය විය * යුත්තේ ඇයිදැයි සොයා ගැනීමට අපහසු වනු ඇත i , එය සම්පූර්ණ වාක්යයෙන් ඕනෑම දෙයක් විය හැකිය. ස්වයංක්රියව ප්රතිගාමී සැකසුමක දී ආකෘතිය භාවිතා කිරීමට සිදුවන්නේ අනාවැකි කීමට o සහ පුරෝකථනය h``hom කිරීමට e සහ එසේ කිරීමට පමණි. එබැවින් ආකෘතිය මුලින් කෙටි සන්දර්භයක් සමඟ පුරෝකථනය කිරීමට පටන් ගෙන පසුව දිගු සන්දර්භයන් භාවිතා කිරීමට ඉගෙන ගනු ඇත. MLMs මෙම ගැටළුව ඇති බැවින් ඔබ මුලින් කුඩා අනුක්රමික දිගකින් ආරම්භ කර පසුව දිගු අනුක්රමික දිගක් භාවිතා කරන්නේ නම් පුහුණු කිරීම වේගවත් වේ.
සරලMLM ආකෘතියක් සඳහා පුහුණු කේතය මෙන්න.
67fromtypingimportList6869importtorch
මෙමපන්තිය ලබා දී ඇති ටෝකන් අනුපිළිවෙල සඳහා ආවරණ ක්රියා පටිපාටිය ක්රියාත්මක කරයි.
72classMLM:
padding_token පෑඩින් ටෝකනය [PAD] වේ. පාඩු ගණනය කිරීම සඳහා භාවිතා නොකළ යුතු ලේබල සලකුණු කිරීමට අපි මෙය භාවිතා කරමු.mask_token යනු ආවරණ ටෝකනයයි [MASK] .no_mask_tokens යනු වෙස් නොගත යුතු ටෝකන ලැයිස්තුවකි. අපි එකවර වර්ගීකරණය වැනි [CLS] වෙනත් කාර්යයක් සමඟ එම්එල්එම් පුහුණු කරන්නේ නම් මෙය ප්රයෝජනවත් වන අතර, අපට ටෝකන තිබේ නම් ඒවා වෙස් ගත යුතු නොවේ.n_tokens මුළු ටෝකන ගණන (අහඹු ටෝකන ජනනය සඳහා භාවිතා කරයි)masking_prob ආවරණ සම්භාවිතාව වේrandomize_prob අහඹු ටෝකනයක් සමඟ ප්රතිස්ථාපනය කිරීමේ සම්භාවිතාවno_change_prob මුල් ටෝකනය සමඟ ප්රතිස්ථාපනය කිරීමේ සම්භාවිතාවයි79def\_\_init\_\_(self,\*,80padding\_token:int,mask\_token:int,no\_mask\_tokens:List[int],n\_tokens:int,81masking\_prob:float=0.15,randomize\_prob:float=0.1,no\_change\_prob:float=0.1,82):
95self.n\_tokens=n\_tokens96self.no\_change\_prob=no\_change\_prob97self.randomize\_prob=randomize\_prob98self.masking\_prob=masking\_prob99self.no\_mask\_tokens=no\_mask\_tokens+[padding\_token,mask\_token]100self.padding\_token=padding\_token101self.mask\_token=mask\_token
x යනු ආදාන ටෝකන අනුක්රමවල කණ්ඩායමයි. එය හැඩය long සහිත වර්ගයේ [seq_len, batch_size] ආතනයකි.103def\_\_call\_\_(self,x:torch.Tensor):
ටෝකනමාස්ක් masking_prob
110full\_mask=torch.rand(x.shape,device=x.device)\<self.masking\_prob
නොමාස්ක් no_mask_tokens
112fortinself.no\_mask\_tokens:113full\_mask&=x!=t
මුල්ටෝකන සමඟ ප්රතිස්ථාපනය කළ යුතු ටෝකන සඳහා වෙස්මුහුණක්
116unchanged=full\_mask&(torch.rand(x.shape,device=x.device)\<self.no\_change\_prob)
ටෝකනසඳහා වෙස්මුහුණක් අහඹු ටෝකනයකින් ප්රතිස්ථාපනය කළ යුතුය
118random\_token\_mask=full\_mask&(torch.rand(x.shape,device=x.device)\<self.randomize\_prob)
අහඹුටෝකන සමඟ ප්රතිස්ථාපනය කළ යුතු ටෝකන දර්ශක
120random\_token\_idx=torch.nonzero(random\_token\_mask,as\_tuple=True)
එක්එක් ස්ථානය සඳහා අහඹු ටෝකන
122random\_tokens=torch.randint(0,self.n\_tokens,(len(random\_token\_idx[0]),),device=x.device)
ප්රතිස්ථාපනයකිරීමට යන අවසාන ටෝකන කට්ටලය [MASK]
124mask=full\_mask&~random\_token\_mask&~unchanged
ලේබලසඳහා ආදානය ක්ලෝන කරන්න
127y=x.clone()
[MASK] ටෝකන සමඟ ප්රතිස්ථාපනය කරන්න; මුල් ටෝකනය නොවෙනස්ව ඇති ටෝකන සහ අහඹු ටෝකනයක් සමඟ ප්රතිස්ථාපනය කරන ටෝකන මෙයට ඇතුළත් නොවන බව සලකන්න.
132x.masked\_fill\_(mask,self.mask\_token)
අහඹුටෝකන පැවරීම
134x[random\_token\_idx]=random\_tokens
ලේබලවලඇති අනෙක් සියලුම ස්ථාන [PAD] වලට ටෝකනය පවරන්න. සමාන ලේබල් අලාභය සඳහා භාවිතා [PAD] නොකෙරේ.
138y.masked\_fill\_(~full\_mask,self.padding\_token)
වෙස්මූඩ්ආදානය සහ ලේබල ආපසු ලබා දෙන්න
141returnx,y