Back to Annotated Deep Learning Paper Implementations

වර්ගීකරණයසඳහා NLP ආකෘති පුහුණුකරු

docs/si/experiments/nlp_classification.html

latest13.9 KB
Original Source

homeexperiments

View code on Github

#

වර්ගීකරණයසඳහා NLP ආකෘති පුහුණුකරු

11fromcollectionsimportCounter12fromtypingimportCallable1314importtorch15importtorchtext16fromtorchimportnn17fromtorch.utils.dataimportDataLoader18importtorchtext.vocab19fromtorchtext.vocabimportVocab2021fromlabmlimportlab,tracker,monit22fromlabml.configsimportoption23fromlabml\_helpers.deviceimportDeviceConfigs24fromlabml\_helpers.metrics.accuracyimportAccuracy25fromlabml\_helpers.moduleimportModule26fromlabml\_helpers.train\_validimportTrainValidConfigs,hook\_model\_outputs,BatchIndex27fromlabml\_nn.optimizers.configsimportOptimizerConfigs

#

පුහුණුකරුමානකරණ

එන්එල්පීවර්ගීකරණ කාර්ය පුහුණුව සඳහා මූලික වින්යාසයන් මෙයට ඇත. සියලුම ගුණාංග වින්යාසගත කළ හැකිය.

30classNLPClassificationConfigs(TrainValidConfigs):

#

ප්රශස්තකරණය

41optimizer:torch.optim.Adam

#

පුහුණුඋපාංගය

43device:torch.device=DeviceConfigs()

#

ස්වයංක්රීයප්රතිගාමී ආකෘතිය

46model:Module

#

කණ්ඩායම්ප්රමාණය

48batch\_size:int=16

#

අනුක්රමයේදිග, හෝ සන්දර්භය ප්රමාණය

50seq\_len:int=512

#

වචනමාලාව

52vocab:Vocab='ag\_news'

#

වචනමාලාවේ ටෝකන් ගණන

54n\_tokens:int

#

පන්තිගණන

56n\_classes:int='ag\_news'

#

ටෝකනයිසර්

58tokenizer:Callable='character'

#

වරින්වර ආකෘති සුරැකීමට යන්න

61is\_save\_models=True

#

පාඩුශ්රිතය

64loss\_func=nn.CrossEntropyLoss()

#

නිරවද්යතාශ්රිතය

66accuracy=Accuracy()

#

ආදර්ශකාවැද්දීමේ ප්රමාණය

68d\_model:int=512

#

ශ්රේණියේක්ලිපින්

70grad\_norm\_clip:float=1.0

#

පුහුණුදත්ත පැටවුම

73train\_loader:DataLoader='ag\_news'

#

වලංගුදත්ත පැටවුම

75valid\_loader:DataLoader='ag\_news'

#

ආදර්ශපරාමිතීන් සහ අනුක්රමික ලඝු-සටහන යන්න (එක් එක් එක් එක් එක් වරක්). මේවා ස්ථරයකට සාරාංශගත සංඛ්යාන වේ, නමුත් එය තවමත් ඉතා ගැඹුරු ජාල සඳහා බොහෝ දර්ශක වලට හේතු විය හැකිය.

80is\_log\_model\_params\_grads:bool=False

#

ආදර්ශසක්රිය කිරීම් ලොග් කළ යුතුද යන්න (එක් එක් ඊපෝච් එකකට වරක්). මේවා ස්ථරයකට සාරාංශගත සංඛ්යාන වේ, නමුත් එය තවමත් ඉතා ගැඹුරු ජාල සඳහා බොහෝ දර්ශක වලට හේතු විය හැකිය.

85is\_log\_model\_activations:bool=False

#

ආරම්භකකරණය

87definit(self):

#

ට්රැකර්වින්යාසයන් සකසන්න

92tracker.set\_scalar("accuracy.\*",True)93tracker.set\_scalar("loss.\*",True)

#

මොඩියුලප්රතිදානයන් ලොග් කිරීමට කොක්කක් එක් කරන්න

95hook\_model\_outputs(self.mode,self.model,'model')

#

රාජ්යමොඩියුලයක් ලෙස නිරවද්යතාව එක් කරන්න. RNs සඳහා පුහුණුව සහ වලංගු කිරීම අතර රාජ්යයන් ගබඩා කිරීම අදහස් කරන බැවින් නම බොහෝ විට ව්යාකූල වේ. මෙය පුහුණුව සහ වලංගු කිරීම සඳහා නිරවද්යතා මෙට්රික් සංඛ්යාන වෙනම තබා ගනී.

100self.state\_modules=[self.accuracy]

#

පුහුණුවහෝ වලංගු කිරීමේ පියවර

102defstep(self,batch:any,batch\_idx:BatchIndex):

#

උපාංගයවෙත දත්ත ගෙනයන්න

108data,target=batch[0].to(self.device),batch[1].to(self.device)

#

පුහුණුප්රකාරයේදී ගෝලීය පියවර යාවත්කාලීන කරන්න (සැකසූ ටෝකන ගණන)

111ifself.mode.is\_train:112tracker.add\_global\_step(data.shape[1])

#

ආකෘතිප්රතිදානයන් ග්රහණය කර ගත යුතුද යන්න

115withself.mode.update(is\_log\_activations=batch\_idx.is\_lastandself.is\_log\_model\_activations):

#

ආදර්ශප්රතිදානයන් ලබා ගන්න. ආර්එන්එස් භාවිතා කරන විට එය ප්රාන්ත සඳහා ටූල් එකක් නැවත ලබා දෙයි. මෙය තවම ක්රියාත්මක කර නැත 😜

119output,\*\_=self.model(data)

#

ගණනයකිරීම සහ ලොග් වීම

122loss=self.loss\_func(output,target)123tracker.add("loss.",loss)

#

ගණනයකිරීම සහ ලොග් කිරීමේ නිරවද්යතාවය

126self.accuracy(output,target)127self.accuracy.track()

#

ආකෘතියපුහුණු කරන්න

130ifself.mode.is\_train:

#

අනුක්රමිකගණනය කරන්න

132loss.backward()

#

ක්ලිප්අනුක්රමික

134torch.nn.utils.clip\_grad\_norm\_(self.model.parameters(),max\_norm=self.grad\_norm\_clip)

#

ප්රශස්තිකරණපියවර ගන්න

136self.optimizer.step()

#

සෑමයුගලයකම අවසාන කණ්ඩායමේ ආදර්ශ පරාමිතීන් සහ අනුක්රමික ලොග් කරන්න

138ifbatch\_idx.is\_lastandself.is\_log\_model\_params\_grads:139tracker.add('model',self.model)

#

අනුක්රමිකඉවත්

141self.optimizer.zero\_grad()

#

ලුහුබැඳඇති ප්රමිතික සුරකින්න

144tracker.save()

#

පෙරනිමි ප්රශස්තිකරණ වින්යාසයන්

147@option(NLPClassificationConfigs.optimizer)148def\_optimizer(c:NLPClassificationConfigs):

#

153optimizer=OptimizerConfigs()154optimizer.parameters=c.model.parameters()155optimizer.optimizer='Adam'156optimizer.d\_model=c.d\_model157158returnoptimizer

#

මූලිකඉංග්රීසි ටෝකනයිසර්

මෙමඅත්හදා බැලීමේදී අපි චරිත මට්ටමේ ටෝකනයිසර් භාවිතා කරමු. සැකසීමෙන් ඔබට මාරු විය හැකිය,

'tokenizer': 'basic_english',

අත්හදාබැලීම ආරම්භ කිරීමේදී වින්යාස කිරීමේ ශබ්දකෝෂයේ.

161@option(NLPClassificationConfigs.tokenizer)162defbasic\_english():

#

176fromtorchtext.dataimportget\_tokenizer177returnget\_tokenizer('basic\_english')

#

අක්ෂරමට්ටමේ ටෝකනයිසර්

180defcharacter\_tokenizer(x:str):

#

184returnlist(x)

#

අක්ෂරමට්ටමේ ටෝකනයිසර් වින්යාසය

187@option(NLPClassificationConfigs.tokenizer)188defcharacter():

#

192returncharacter\_tokenizer

#

ටෝකනගණන ලබා ගන්න

195@option(NLPClassificationConfigs.n\_tokens)196def\_n\_tokens(c:NLPClassificationConfigs):

#

200returnlen(c.vocab)+2

#

දත්තකාණ්ඩවලට පැටවීමේ කාර්යය

203classCollateFunc:

#

  • tokenizer ටෝකනයිසර් ශ්රිතය වේ
  • vocab යනු වචන මාලාවයි
  • seq_len අනුක්රමයේ දිග වේ
  • padding_token යනු පෙළ දිගට වඩා විශාල seq_len වන විට පෑඩින් කිරීම සඳහා භාවිතා කරන ටෝකනය වේ
  • classifier_token යනු ආදානය අවසානයේ අප විසින් සකස් කරන ලද [CLS] ටෝකනයයි
208def\_\_init\_\_(self,tokenizer,vocab:Vocab,seq\_len:int,padding\_token:int,classifier\_token:int):

#

216self.classifier\_token=classifier\_token217self.padding\_token=padding\_token218self.seq\_len=seq\_len219self.vocab=vocab220self.tokenizer=tokenizer

#

  • batch විසින් එකතු කරන ලද දත්ත කාණ්ඩයයි DataLoader
222def\_\_call\_\_(self,batch):

#

ආදානදත්ත ටෙන්සරය, සමඟ ආරම්භ කර ඇත padding_token

228data=torch.full((self.seq\_len,len(batch)),self.padding\_token,dtype=torch.long)

#

හිස්ලේබල් ටෙන්සර්

230labels=torch.zeros(len(batch),dtype=torch.long)

#

සාම්පලහරහා ලූප

233for(i,(\_label,\_text))inenumerate(batch):

#

ලේබලයසකසන්න

235labels[i]=int(\_label)-1

#

ආදානපෙළ ටෝකනයිස් කරන්න

237\_text=[self.vocab[token]fortokeninself.tokenizer(\_text)]

#

දක්වාටන්ක කරන්න seq_len

239\_text=\_text[:self.seq\_len]

#

දත්තසම්ප්රේෂණය කර එකතු කරන්න

241data[:len(\_text),i]=data.new\_tensor(\_text)

#

අනුපිළිවෙලෙහිඅවසාන ටෝකනය සකසන්න [CLS]

244data[-1,:]=self.classifier\_token

#

247returndata,labels

#

AGපුවත් දත්ත කට්ටලය

මෙයAG පුවත් දත්ත සමුදාය පටවන අතර n_classes , සඳහා අගයන් සකසා ඇත, vocab , train_loader , සහ valid_loader .

250@option([NLPClassificationConfigs.n\_classes,251NLPClassificationConfigs.vocab,252NLPClassificationConfigs.train\_loader,253NLPClassificationConfigs.valid\_loader])254defag\_news(c:NLPClassificationConfigs):

#

පුහුණුවසහ වලංගු කිරීමේ දත්ත කට්ටල ලබා ගන්න

263train,valid=torchtext.datasets.AG\_NEWS(root=str(lab.get\_data\_path()/'ag\_news'),split=('train','test'))

#

මතකයවෙත දත්ත පූරණය කරන්න

266withmonit.section('Load data'):267fromlabml\_nn.utilsimportMapStyleDataset

#

සිතියම් ආකාරයේ දත්ත කට්ටල සාදන්න

270train,valid=MapStyleDataset(train),MapStyleDataset(valid)

#

ටෝකනයිසර්ලබා ගන්න

273tokenizer=c.tokenizer

#

කවුන්ටරයක්සාදන්න

276counter=Counter()

#

පුහුණුදත්ත කට්ටලයෙන් ටෝකන එකතු කරන්න

278for(label,line)intrain:279counter.update(tokenizer(line))

#

වලංගුදත්ත කට්ටලයෙන් ටෝකන එකතු කරන්න

281for(label,line)invalid:282counter.update(tokenizer(line))

#

වචනමාලාව සාදන්න

284vocab=torchtext.vocab.vocab(counter,min\_freq=1)

#

පුහුණුදත්ත පැටවුම සාදන්න

287train\_loader=DataLoader(train,batch\_size=c.batch\_size,shuffle=True,288collate\_fn=CollateFunc(tokenizer,vocab,c.seq\_len,len(vocab),len(vocab)+1))

#

වලංගුදත්ත පැටවුම සාදන්න

290valid\_loader=DataLoader(valid,batch\_size=c.batch\_size,shuffle=True,291collate\_fn=CollateFunc(tokenizer,vocab,c.seq\_len,len(vocab),len(vocab)+1))

#

ආපසු n_classes``vocab , train_loader , සහ valid_loader

294return4,vocab,train\_loader,valid\_loader

Trending Research Paperslabml.ai