වෙස්භාෂා ආකෘතිය (MLM)

මෙය 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 ආකෘතියක් සඳහා පුහුණු කේතය මෙන්න.

View Run

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_token
  • x යනු ආදාන ටෝකන අනුක්රමවල කණ්ඩායමයි. එය හැඩය 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