docs/si/transformers/retro/dataset.html
අපිළඟම අසල්වැසියන් ප්රධාන වටිනාකම් දත්ත ගබඩාවෙන් පූර්ව ලබා ගෙන RETRO ආකෘතිය පුහුණු කිරීම සඳහා දත්ත කට්ටලය නිර්මාණය කරමු.
15importjson16frompathlibimportPath1718importnumpyasnp19importtorch20fromtorch.utils.dataimportDatasetasPyTorchDataset2122fromlabmlimportlab,monit23fromlabml\_helpers.datasets.textimportTextFileDataset,TextDataset24fromlabml\_nn.transformers.retro.databaseimportRetroIndex
chunk_len කුටියේ දිග වේchunks_per_sample පුහුණු නියැදියකට කුට්ටි ගණනskip_range සාම්පල දෙකක් අතර මඟ හැරීමට උපරිම අක්ෂර ගණන වේ. අපි මඟ කිහිපයක් චරිත අතර සාම්පල බවට වග බලා ගන්න සාම්පල පෙලගැසී නොමැත සමග හොඳින් කැබලි දී දත්ත සමුදාය27defbuild\_dataset(chunk\_len:int=16,chunks\_per\_sample:int=32,skip\_range:int=8):
පෙළගොනුව පූරණය කරන්න
39dataset=TextFileDataset(40lab.get\_data\_path()/'tiny\_shakespeare.txt',41list,42url='https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt')
එහිපුහුණු කොටස
45text=dataset.train
අසල්වැසියන්ලබා ගැනීම සඳහා දර්ශකය පටවන්න
48index=RetroIndex()
ආදානනියැදි ඕෆ්සෙට්
51sample\_offsets=[]
පෙළසඳහා කර්සරය
53i=054whilei\<len(text):
අසල්වැසියන්සමඟ පෙලගැසී නොමැති බවට වග බලා ගැනීම සඳහා චරිත කිහිපයක් මඟ හරින්න
56skip=np.random.randint(skip\_range)57i+=skip
අපිපෙළෙහි අවසානයට පැමිණ ඇත්නම් නවත්වන්න
60ifi+chunks\_per\_sample\*chunk\_len\>len(text):61break
ඕෆ්සෙට්එකතු කරන්න
64sample\_offsets.append(i)
කර්සරයවැඩි කරන්න
67i+=chunks\_per\_sample\*chunk\_len
සාම්පලසඳහා
70samples=[]
නියැදිඕෆ්සෙට් හරහා නැවත කරන්න
72foriinmonit.iterate('Gather Neighbors',sample\_offsets):
අමතරචරිතයක් ඇතුළුව නියැදිය ලබා ගන්න (අනාවැකිය සඳහා)
74sample=text[i:i+chunks\_per\_sample\*chunk\_len+1]
ආදානය
76src=sample[:-1]
එයකුට්ටි වලට කඩන්න
78chunks=[src[j:j+chunk\_len]forjinrange(0,len(src),chunk\_len)]
කුට්ටියඕෆ්සෙට්
80chunk\_offsets=[j+iforjinrange(0,len(src),chunk\_len)]
ළඟමඅසල්වැසියන් ලබා ගන්න
83neighbor\_offsets=index(chunks,chunk\_offsets)
අසල්වැසියාගේපෙළ ලබා ගන්න. අසල්වැසියාගේ දිග මෙන් දෙගුණයක් වේ chunk_len
86neighbors=[[text[j:j+chunk\_len\*2]forjinn\_off]forn\_offinneighbor\_offsets]
සාම්පලලැයිස්තුවට එකතු කරන්න
89samples.append((sample[:-1],sample[1:],neighbors))
JSONහි සාම්පල සුරකින්න. අපගේ දත්ත කට්ටලය කුඩා බැවින් අපට සංකීර්ණ දත්ත කට්ටල ගබඩා කිරීමේ යාන්ත්රණ හෝ පූර්ව ටෝකීකරණය භාවිතා කිරීමට අවශ්ය නොවේ.
94withopen(str(lab.get\_data\_path()/'retro\_train\_dataset.json'),'w')asf:95f.write(json.dumps(samples))
විසින්නිර්මාණය කරන ලද දත්ත කට්ටලය පටවන PyTorch දත්ත කට්ටලය මෙයයි build_dataset .
98classDataset(PyTorchDataset):
file_path සුරකින ලද JSON ගොනුවේ මාර්ගයයි
tds වේ TextDataset
105def\_\_init\_\_(self,file\_path:Path,tds:TextDataset):
111self.tds=tds
සාම්පලපූරණය කරන්න
113withopen(str(file\_path),'r')asf:114self.samples=json.loads(f.read())
සාම්පලගණන
116def\_\_len\_\_(self):
120returnlen(self.samples)
නියැදියක්ලබා ගන්න
122def\_\_getitem\_\_(self,idx:int):
නියැදියලබා ගන්න
127s=self.samples[idx]
ටෝකනයිස්කරන්න
129src=self.tds.text\_to\_i(s[0])130tgt=self.tds.text\_to\_i(s[1])131neighbors=torch.stack([torch.stack([self.tds.text\_to\_i(n)forninchunks])forchunksins[2]])
133returnsrc,tgt,neighbors
136if\_\_name\_\_=='\_\_main\_\_':137build\_dataset()