Back to Annotated Deep Learning Paper Implementations

වෙස්මූඩ් භාෂා ආකෘතිය (එම්එල්එම්) අත්හදා බැලීම

docs/si/transformers/mlm/experiment.html

latest15.1 KB
Original Source

hometransformersmlm

View code on Github

#

වෙස්මූඩ් භාෂා ආකෘතිය (එම්එල්එම්) අත්හදා බැලීම

මෙය වෙස් භාෂා ආකෘතියක්පුහුණු කිරීම සඳහා කරන ලද පයිටෝර්ච් අත්හදා බැලීමකි.

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):

#

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()

Trending Research Paperslabml.ai