docs/si/transformers/mlm/experiment.html
මෙය වෙස් භාෂා ආකෘතියක්පුහුණු කිරීම සඳහා කරන ලද පයිටෝර්ච් අත්හදා බැලීමකි.
11fromtypingimportList1213importtorch14fromtorchimportnn1516fromlabmlimportexperiment,tracker,logger17fromlabml.configsimportoption18fromlabml.loggerimportText19fromlabml\_helpers.metrics.accuracyimportAccuracy20fromlabml\_helpers.moduleimportModule21fromlabml\_helpers.train\_validimportBatchIndex22fromlabml\_nn.experiments.nlp\_autoregressionimportNLPAutoRegressionConfigs23fromlabml\_nn.transformersimportEncoder,Generator24fromlabml\_nn.transformersimportTransformerConfigs25fromlabml\_nn.transformers.mlmimportMLM
28classTransformerMLM(nn.Module):
encoder ට්රාන්ස්ෆෝමර් එන්කෝඩරයsrc_embed යනු ටෝකන් කාවැද්දීමේ මොඩියුලය (ස්ථානීය කේතීකරණ සමඟ)generator යනු පිවිසුම් ලබා දෙන අවසාන පූර්ණ සම්බන්ධිත ස්ථරයයි .33def\_\_init\_\_(self,\*,encoder:Encoder,src\_embed:Module,generator:Generator):
40super().\_\_init\_\_()41self.generator=generator42self.src\_embed=src\_embed43self.encoder=encoder
45defforward(self,x:torch.Tensor):
ස්ථානීයකේතන ක්රම සමඟ ටෝකන් කාවැද්දීම් ලබා ගන්න
47x=self.src\_embed(x)
ට්රාන්ස්ෆෝමර්එන්කෝඩරය
49x=self.encoder(x,None)
ප්රතිදානයසඳහා ලොගින් වන්න
51y=self.generator(x)
ප්රතිලාභප්රති results ල (දෙවන අගය රාජ්ය සඳහා වේ, මන්ද අපගේ පුහුණුකරු RNs සමඟ ද භාවිතා කරයි)
55returny,None
මෙයඋරුම වන්නේ අප මෙහි නැවත භාවිතා කරන දත්ත නල මාර්ග ක්රියාත්මක කිරීම් ඇති NLPAutoRegressionConfigs බැවිනි. අපි අභිරුචි පුහුණු පියවරක් MLM පෝරමයක් ක්රියාත්මක කර ඇත්තෙමු.
58classConfigs(NLPAutoRegressionConfigs):
එම්එල්එම්ආකෘතිය
69model:TransformerMLM
ට්රාන්ස්ෆෝමර්
71transformer:TransformerConfigs
ටෝකනගණන
74n\_tokens:int='n\_tokens\_mlm'
වෙස්මූස්නොකළ යුතු ටෝකන
76no\_mask\_tokens:List[int]=[]
ටෝකනයක්ආවරණ කිරීමේ සම්භාවිතාව
78masking\_prob:float=0.15
අහඹුටෝකනයකින් වෙස්මුහුණ ප්රතිස්ථාපනය කිරීමේ සම්භාවිතාව
80randomize\_prob:float=0.1
වෙස්මුහුණමුල් ටෝකනය සමඟ ප්රතිස්ථාපනය කිරීමේ සම්භාවිතාව
82no\_change\_prob:float=0.1
වෙස්මුහුණ ජනනය කිරීම සඳහා වෙස්මුහුණු භාෂා ආකෘතිය (එම්එල්එම්) පන්තිය
84mlm:MLM
[MASK] ටෝකනය
87mask\_token:int
[PADDING] ටෝකනය
89padding\_token:int
නියැදියවෙත විමසන්න
92prompt:str=[93"We are accounted poor citizens, the patricians good.",94"What authority surfeits on would relieve us: if they",95"would yield us but the superfluity, while it were",96"wholesome, we might guess they relieved us humanely;",97"but they think we are too dear: the leanness that",98"afflicts us, the object of our misery, is as an",99"inventory to particularise their abundance; our",100"sufferance is a gain to them Let us revenge this with",101"our pikes, ere we become rakes: for the gods know I",102"speak this in hunger for bread, not in thirst for revenge.",103]
105definit(self):
[MASK] ටෝකනය
111self.mask\_token=self.n\_tokens-1
[PAD] ටෝකනය
113self.padding\_token=self.n\_tokens-2
වෙස්මුහුණ ජනනය කිරීම සඳහා වෙස්මුහුණු භාෂා ආකෘතිය (එම්එල්එම්) පන්තිය
116self.mlm=MLM(padding\_token=self.padding\_token,117mask\_token=self.mask\_token,118no\_mask\_tokens=self.no\_mask\_tokens,119n\_tokens=self.n\_tokens,120masking\_prob=self.masking\_prob,121randomize\_prob=self.randomize\_prob,122no\_change\_prob=self.no\_change\_prob)
නිරවද්යතාවමෙට්රික් (සමාන ලේබල් නොසලකා හරින්න [PAD] )
125self.accuracy=Accuracy(ignore\_index=self.padding\_token)
හරස්එන්ට්රොපිය නැතිවීම (සමාන ලේබල් නොසලකා හරින්න [PAD] )
127self.loss\_func=nn.CrossEntropyLoss(ignore\_index=self.padding\_token)
129super().init()
131defstep(self,batch:any,batch\_idx:BatchIndex):
ආදානයඋපාංගයට ගෙනයන්න
137data=batch[0].to(self.device)
පුහුණුප්රකාරයේදී ගෝලීය පියවර යාවත්කාලීන කරන්න (සැකසූ ටෝකන ගණන)
140ifself.mode.is\_train:141tracker.add\_global\_step(data.shape[0]\*data.shape[1])
වෙස්මූඩ්ආදානය සහ ලේබල ලබා ගන්න
144withtorch.no\_grad():145data,labels=self.mlm(data)
ආකෘතිප්රතිදානයන් ග්රහණය කර ගත යුතුද යන්න
148withself.mode.update(is\_log\_activations=batch\_idx.is\_last):
ආදර්ශප්රතිදානයන් ලබා ගන්න. ආර්එන්එස් භාවිතා කරන විට එය ප්රාන්ත සඳහා ටූල් එකක් නැවත ලබා දෙයි. මෙය තවමත් ක්රියාත්මක නොවේ.
152output,\*\_=self.model(data)
අලාභයගණනය කර ලොග් කරන්න
155loss=self.loss\_func(output.view(-1,output.shape[-1]),labels.view(-1))156tracker.add("loss.",loss)
ගණනයකිරීම සහ ලොග් කිරීමේ නිරවද්යතාවය
159self.accuracy(output,labels)160self.accuracy.track()
ආකෘතියපුහුණු කරන්න
163ifself.mode.is\_train:
අනුක්රමිකගණනය කරන්න
165loss.backward()
ක්ලිප්අනුක්රමික
167torch.nn.utils.clip\_grad\_norm\_(self.model.parameters(),max\_norm=self.grad\_norm\_clip)
ප්රශස්තිකරණපියවර ගන්න
169self.optimizer.step()
සෑමයුගලයකම අවසාන කණ්ඩායමේ ආදර්ශ පරාමිතීන් සහ අනුක්රමික ලොග් කරන්න
171ifbatch\_idx.is\_last:172tracker.add('model',self.model)
අනුක්රමිකඉවත්
174self.optimizer.zero\_grad()
ලුහුබැඳඇති ප්රමිතික සුරකින්න
177tracker.save()
[email protected]\_grad()180defsample(self):
පුරවාඇති දත්ත සඳහා හිස් ටෙන්සර් [PAD] .
186data=torch.full((self.seq\_len,len(self.prompt)),self.padding\_token,dtype=torch.long)
විමසීම්එකින් එක එකතු කරන්න
188fori,pinenumerate(self.prompt):
ටෝකන්දර්ශක ලබා ගන්න
190d=self.text.text\_to\_i(p)
ටෙන්සරයටඑකතු කරන්න
192s=min(self.seq\_len,len(d))193data[:s,i]=d[:s]
ටෙන්සරයවත්මන් උපාංගයට ගෙන යන්න
195data=data.to(self.device)
වෙස්ආදාන සහ ලේබල ලබා ගන්න
198data,labels=self.mlm(data)
ආදර්ශප්රතිදානයන් ලබා ගන්න
200output,\*\_=self.model(data)
ජනනයකරන ලද සාම්පල මුද්රණය කරන්න
203forjinrange(data.shape[1]):
මුද්රණයෙන්ප්රතිදානය එකතු කරන්න
205log=[]
එක්එක් ටෝකනය සඳහා
207foriinrange(len(data)):
ලේබලයනොමැති නම් [PAD]
209iflabels[i,j]!=self.padding\_token:
අනාවැකියලබා ගන්න
211t=output[i,j].argmax().item()
එයමුද්රණය කළ හැකි චරිතයක් නම්
213ift\<len(self.text.itos):
නිවැරදිඅනාවැකිය
215ift==labels[i,j]:216log.append((self.text.itos[t],Text.value))
වැරදිඅනාවැකිය
218else:219log.append((self.text.itos[t],Text.danger))
එයමුද්රණය කළ හැකි චරිතයක් නොවේ නම්
221else:222log.append(('\*',Text.danger))
ලේබලය [PAD] (නොකැඩූ) නම් මුල් පිටපත මුද්රණය කරන්න.
224elifdata[i,j]\<len(self.text.itos):225log.append((self.text.itos[data[i,j]],Text.subtle))
මුද්රණය
228logger.log(log)
ඇතුළුව [PAD] සහ ටෝකන ගණන [MASK]
231@option(Configs.n\_tokens)232defn\_tokens\_mlm(c:Configs):
236returnc.text.n\_tokens+2
239@option(Configs.transformer)240def\_transformer\_configs(c:Configs):
අපගේ වින්යාසගත කළ හැකි ට්රාන්ස්ෆෝමර් ක්රියාත්මක කිරීම භාවිතා කරමු
247conf=TransformerConfigs()
කාවැද්දීම්සහ පිවිසුම් උත්පාදනය සඳහා වචන මාලාව ප්රමාණ සකසන්න
249conf.n\_src\_vocab=c.n\_tokens250conf.n\_tgt\_vocab=c.n\_tokens
කාවැද්දීමප්රමාණය
252conf.d\_model=c.d\_model
255returnconf
වර්ගීකරණආකෘතිය සාදන්න
258@option(Configs.model)259def\_model(c:Configs):
263m=TransformerMLM(encoder=c.transformer.encoder,264src\_embed=c.transformer.src\_embed,265generator=c.transformer.generator).to(c.device)266267returnm
270defmain():
අත්හදාබැලීම සාදන්න
272experiment.create(name="mlm")
වින්යාසසාදන්න
274conf=Configs()
වින්යාසයන්අභිබවා යන්න
276experiment.configs(conf,{
කණ්ඩායම්ප්රමාණය
278'batch\_size':64,
අනුපිළිවෙලදිග 32. වේගයෙන් පුහුණු කිරීම සඳහා අපි කෙටි අනුක්රමික දිගක් භාවිතා කරමු. එසේ නොමැතිනම් එය සදහටම පුහුණු කිරීමට ගත වේ.
281'seq\_len':32,
1024එපොච් සඳහා දුම්රිය.
284'epochs':1024,
එක් 1 යුගයකට වරක් පුහුණුව සහ වලංගු කිරීම අතර මාරු වන්න
287'inner\_iterations':1,
ට්රාන්ස්ෆෝමර්වින්යාසයන් (පෙරනිමි ලෙස)
290'd\_model':128,291'transformer.ffn.d\_ff':256,292'transformer.n\_heads':8,293'transformer.n\_layers':6,
නෝම් ප්රශස්තකරණය භාවිතා කරන්න
296'optimizer.optimizer':'Noam',297'optimizer.learning\_rate':1.,298})
ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘති සකසන්න
301experiment.add\_pytorch\_models({'model':conf.model})
අත්හදාබැලීම ආරම්භ කරන්න
304withexperiment.start():
පුහුණුධාවනය
306conf.run()
310if\_\_name\_\_=='\_\_main\_\_':311main()