Back to Annotated Deep Learning Paper Implementations

ළඟමඅසල්වැසියා ලබා ගැනීම සඳහා දත්ත සමුදාය

docs/si/transformers/retro/database.html

latest8.4 KB
Original Source

hometransformersretro

View code on Github

#

ළඟමඅසල්වැසියා ලබා ගැනීම සඳහා දත්ත සමුදාය

මෙයවේ දත්ත සමුදාය සාදන්න සහ RETRO ආකෘතියසඳහා ළඟම අසල්වැසියන් ලබා ගනී.

කඩදාසිScanN පුස්තකාලය භාවිතා කර ඇති අතර දත්ත සමුදාය සඳහා අපි FaISS පුස්තකාලය භාවිතා කරමු.

16fromtypingimportList,Optional1718importfaiss19importnumpyasnp20importtorch2122fromlabmlimportlab,monit23fromlabml\_helpers.datasets.textimportTextFileDataset24fromlabml\_nn.transformers.retro.bert\_embeddingsimportBERTChunkEmbeddings

#

දත්තසමුදාය ගොඩනැගීම

  • chunk_len යනු කුට්ටියක දිග (අක්ෂර ගණන)
  • batch_size ගණනය කිරීමේදී භාවිතා කළ යුතු කණ්ඩායම් ප්රමාණයයි BERT(N)
  • d_embFAISS දර්ශකයේ තෝරා ගැනීම සඳහා BERT(N) කාවැද්දීම් ලැයිස්තු වල විශේෂාංග ගණන වේ
  • n_centeroids දර්ශකයේ ලැයිස්තු ගණන
  • code_size දර්ශකයේ කේතනය කරන ලද දෛශික ප්රමාණය
  • n_probe විමර්ශනය කළ යුතු ලැයිස්තු ගණන
  • `n_train'යනු දර්ශකය පුහුණු කිරීම සඳහා යතුරු ගණන වේ
27defbuild\_database(chunk\_len:int=16,batch\_size:int=64,d\_emb:int=768,n\_centeroids:int=256,28code\_size:int=64,n\_probe:int=8,n\_train:int=50\_000):

#

දත්තසමුදාය පෙළ ගොනුව පූරණය කරන්න

43dataset=TextFileDataset(44lab.get\_data\_path()/'tiny\_shakespeare.txt',45list,46url='https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt')

#

පුහුණුදත්ත ලබා ගන්න (නූලක්)

49text=dataset.train

#

පෙළකැබලි වලට බෙදන්න chunk_length

52chunks=[text[i:i+chunk\_len]foriinrange(0,len(text),chunk\_len)ifi+chunk\_len\*2\<len(text)]

#

එක්එක් කුට්ටි වල ඕෆ්සෙට් ලබා ගන්න

54chunk\_offsets=np.array([iforiinrange(0,len(text),chunk\_len)ifi+chunk\_len\*2\<len(text)])

#

කුට්ටිගණන

56n\_chunks=len(chunks)

#

ලබාගැනීම සඳහා බර්ට් ආරම්භ කරන්න BERT(N)

59bert=BERTChunkEmbeddings(torch.device('cuda:0'))

#

එක්එක් පුනරාවර්තනයේ කුට්ටි batch_size ගණන සැකසීම මගින් කුට්ටි කාවැද්දීම් ලබා ගන්න

62chunk\_emb=[]63foriinmonit.iterate('Get embeddings',range(0,n\_chunks,batch\_size)):64chunk\_emb.append(bert(chunks[i:i+batch\_size]).cpu())

#

ඒවාතනි ආතනයකට ඒකාබද්ධ කරන්න

66chunk\_emb=torch.cat(chunk\_emb,dim=0).numpy()

#

FAISS දර්ශකය සාදන්න

69quantizer=faiss.IndexFlatL2(d\_emb)70index=faiss.IndexIVFPQ(quantizer,d\_emb,n\_centeroids,code\_size,8)71index.nprobe=n\_probe

#

කුට්ටම්දර්ශකවල අහඹු නියැදියක් ලබා ගන්න

74random\_sample=np.random.choice(np.arange(n\_chunks),size=[min(n\_train,n\_chunks)],replace=False)

#

යතුරුගබඩා කිරීම සඳහා දර්ශකය පුහුණු කරන්න

77withmonit.section('Train index'):78index.train(chunk\_emb[random\_sample])

#

ප්රමාණයෙන්කාණ්ඩවල දර්ශකයට කුට්ටි එකතු කරන්න 1024

81forsinmonit.iterate('Index',range(0,n\_chunks,1024)):82e=min(s+1024,n\_chunks)

#

දර්ශකයටඑකතු කරන්න

84index.add\_with\_ids(chunk\_emb[s:e],chunk\_offsets[s:e])

#

දර්ශකයසුරකින්න

87withmonit.section('Save'):88faiss.write\_index(index,str(lab.get\_data\_path()/'retro.index'))

#

ළඟමඅසල්වැසියන් ලබා ගැනීම සඳහා දර්ශකය

91classRetroIndex:

#

  • chunk_len කුටියේ දිග වේ
  • n_probe විමර්ශනය කළ යුතු ලැයිස්තු ගණන
  • n_neighbors ලබා ගැනීමට අසල්වැසියන් සංඛ්යාව
  • n_extra අපි විමසුම් කුට්ටියේ සමග අතිච්ඡාදනය අසල්වැසියන් ඉවත් කරනු ඇත සිට ලබා ගැනීමට අමතර අසල්වැසියන් සංඛ්යාව වේ
  • exclude_neighbor_span අතිච්ඡාදනය සඳහා පරීක්ෂා කිරීමේදී වළක්වා ගත යුතු අමතර පෙළ දිග වේ
96def\_\_init\_\_(self,chunk\_len:int=16,n\_probe:int=8,97n\_neighbors:int=2,n\_extra:int=2,98exclude\_neighbor\_span:int=8):

#

108self.n\_neighbors=n\_neighbors109self.chunk\_len=chunk\_len110self.exclude\_neighbor\_span=exclude\_neighbor\_span111self.n\_extra=n\_extra

#

ලබාගැනීම සඳහා බර්ට් ආරම්භ කරන්න BERT(N)

114self.bert=BERTChunkEmbeddings(torch.device('cuda:0'))

#

දත්තසමුදාය පටවන්න

116withmonit.section('Load index'):117self.index=faiss.read\_index(str(lab.get\_data\_path()/'retro.index'))118self.index.nprobe=n\_probe

#

විමසුමසමඟ අතිච්ඡාදනය වන අසල්වැසියන් පෙරහන් කරන්න

අසල්වාසීන්ගේතනතුරු ලබා දී ඇති neighbor_offsets අතර විමසුම් කුට්ටියේ පිහිටීම වේ offset .

120deffilter\_neighbors(self,offset:int,neighbor\_offsets:List[int]):

#

127return[nforninneighbor\_offsets128ifn\<offset-(self.chunk\_len+self.exclude\_neighbor\_span)129orn\>offset+(self.chunk\_len+self.exclude\_neighbor\_span)]

#

ළඟමඅසල්වැසියන් ලබා ගන්න

131def\_\_call\_\_(self,query\_chunks:List[str],offsets:Optional[List[int]]):

#

විමසුම්කුට්ටි ලබා ගන්න BERT(N)

137emb=self.bert(query\_chunks).cpu()

#

දත්තගබඩාවෙන් n_neighbors + n_extra ළඟම අසල්වැසියන් ලබා ගන්න

140distance,neighbor\_offsets=self.index.search(emb.numpy(),self.n\_neighbors+self.n\_extra)

#

විමසුමකුට්ටියේ ඕෆ්සෙට් අතිච්ඡාදනය කුට්ටි සිදු පෙරහන ලබා දී තිබේ නම්

143ifoffsetsisnotNone:144neighbor\_offsets=[self.filter\_neighbors(off,n\_off)145foroff,n\_offinzip(offsets,neighbor\_offsets)]

#

n_neighbors පෙරීමෙන් පසු ආසන්නතම දේ ලබා ගන්න

148neighbor\_offsets=[n\_off[:self.n\_neighbors]forn\_offinneighbor\_offsets]

#

151returnneighbor\_offsets

#

155if\_\_name\_\_=='\_\_main\_\_':156build\_database()

Trending Research Paperslabml.ai