මෙය 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 ආකෘතියක් සඳහා පුහුණු කේතය මෙන්න.
67from typing import List
68
69import torchමෙමපන්තිය ලබා දී ඇති ටෝකන් අනුපිළිවෙල සඳහා ආවරණ ක්රියා පටිපාටිය ක්රියාත්මක කරයි.
72class MLM:padding_token
පෑඩින් ටෝකනය [PAD]
වේ. පාඩු ගණනය කිරීම සඳහා භාවිතා නොකළ යුතු ලේබල සලකුණු කිරීමට අපි මෙය භාවිතා කරමු. mask_token
යනු ආවරණ ටෝකනයයි [MASK]
. no_mask_tokens
යනු වෙස් නොගත යුතු ටෝකන ලැයිස්තුවකි. අපි එකවර වර්ගීකරණය වැනි [CLS]
වෙනත් කාර්යයක් සමඟ එම්එල්එම් පුහුණු කරන්නේ නම් මෙය ප්රයෝජනවත් වන අතර, අපට ටෝකන තිබේ නම් ඒවා වෙස් ගත යුතු නොවේ. n_tokens
මුළු ටෝකන ගණන (අහඹු ටෝකන ජනනය සඳහා භාවිතා කරයි) masking_prob
ආවරණ සම්භාවිතාව වේ randomize_prob
අහඹු ටෝකනයක් සමඟ ප්රතිස්ථාපනය කිරීමේ සම්භාවිතාව no_change_prob
මුල් ටෝකනය සමඟ ප්රතිස්ථාපනය කිරීමේ සම්භාවිතාවයි79 def __init__(self, *,
80 padding_token: int, mask_token: int, no_mask_tokens: List[int], n_tokens: int,
81 masking_prob: float = 0.15, randomize_prob: float = 0.1, no_change_prob: float = 0.1,
82 ):95 self.n_tokens = n_tokens
96 self.no_change_prob = no_change_prob
97 self.randomize_prob = randomize_prob
98 self.masking_prob = masking_prob
99 self.no_mask_tokens = no_mask_tokens + [padding_token, mask_token]
100 self.padding_token = padding_token
101 self.mask_token = mask_tokenx
යනු ආදාන ටෝකන අනුක්රමවල කණ්ඩායමයි. එය හැඩය long
සහිත වර්ගයේ [seq_len, batch_size]
ආතනයකි. 103 def __call__(self, x: torch.Tensor):ටෝකනමාස්ක් masking_prob
110 full_mask = torch.rand(x.shape, device=x.device) < self.masking_probනොමාස්ක් no_mask_tokens
112 for t in self.no_mask_tokens:
113 full_mask &= x != tමුල්ටෝකන සමඟ ප්රතිස්ථාපනය කළ යුතු ටෝකන සඳහා වෙස්මුහුණක්
116 unchanged = full_mask & (torch.rand(x.shape, device=x.device) < self.no_change_prob)ටෝකනසඳහා වෙස්මුහුණක් අහඹු ටෝකනයකින් ප්රතිස්ථාපනය කළ යුතුය
118 random_token_mask = full_mask & (torch.rand(x.shape, device=x.device) < self.randomize_prob)අහඹුටෝකන සමඟ ප්රතිස්ථාපනය කළ යුතු ටෝකන දර්ශක
120 random_token_idx = torch.nonzero(random_token_mask, as_tuple=True)එක්එක් ස්ථානය සඳහා අහඹු ටෝකන
122 random_tokens = torch.randint(0, self.n_tokens, (len(random_token_idx[0]),), device=x.device)ප්රතිස්ථාපනයකිරීමට යන අවසාන ටෝකන කට්ටලය [MASK]
124 mask = full_mask & ~random_token_mask & ~unchangedලේබලසඳහා ආදානය ක්ලෝන කරන්න
127 y = x.clone()[MASK]
ටෝකන සමඟ ප්රතිස්ථාපනය කරන්න; මුල් ටෝකනය නොවෙනස්ව ඇති ටෝකන සහ අහඹු ටෝකනයක් සමඟ ප්රතිස්ථාපනය කරන ටෝකන මෙයට ඇතුළත් නොවන බව සලකන්න.
132 x.masked_fill_(mask, self.mask_token)අහඹුටෝකන පැවරීම
134 x[random_token_idx] = random_tokensලේබලවලඇති අනෙක් සියලුම ස්ථාන [PAD]
වලට ටෝකනය පවරන්න. සමාන ලේබල් අලාභය සඳහා භාවිතා [PAD]
නොකෙරේ.
138 y.masked_fill_(~full_mask, self.padding_token)වෙස්මූඩ්ආදානය සහ ලේබල ආපසු ලබා දෙන්න
141 return x, y