ජීපීටී-නියෝක්ස්සඳහා පෙළ දත්ත කට්ටලය

10from pathlib import PurePath, Path
11from typing import Optional, List
12
13import torch
14import torch.utils.data
15from labml import lab
16from labml import monit
17from labml.logger import inspect
18from labml.utils.download import download_file
19
20from labml_nn.neox.tokenizer import get_tokenizer

පෙළගොනුව පූරණය කරන්න

  • path පෙළ ගොනුවේ පිහිටීම
  • url ගොනුව බාගත කිරීම සඳහා URL එක
  • filter_subset යනු පෙරීමට අක්ෂර ගණනයයි. විශාල දත්ත කට්ටල උත්සාහ කිරීමේදී පරීක්ෂා කිරීමේදී මෙය භාවිතා කරන්න
  • පෙළඅන්තර්ගතයනැවත ලබා දෙයි

23def load_text(path: PurePath, url: Optional[str] = None, *, filter_subset: Optional[int] = None):
34    path = Path(path)

එයනොමැති නම් බාගන්න

37    if not path.exists():
38        if not url:
39            raise FileNotFoundError(str(path))
40        else:
41            download_file(url, path)
42
43    with monit.section("Load data"):

දත්තපූරණය කරන්න

45        with open(str(path), 'r') as f:
46            text = f.read()

පෙරහන්

48        if filter_subset:
49            text = text[:filter_subset]

52    return text

හොඳින්සුසර කිරීම සඳහා දත්ත කට්ටලය GPT-නියෝක්ස්

මෙයඉතා විශාල දත්ත කාණ්ඩ වලට ප්රශස්තිකරණය කර නොමැත.

55class NeoXDataset(torch.utils.data.Dataset):
  • tokens ටෝකන් හැඳුනුම්පත් ලැයිස්තුවයි
  • seq_len තනි පුහුණු නියැදියක අනුක්රමය දිග වේ
62    def __init__(self, tokens: List[int], seq_len: int):
68        self.seq_len = seq_len

සාම්පලගණන

70        n_samples = len(tokens) // seq_len
71        self.n_samples = n_samples

ට්රන්කේට්කරන්න

73        tokens = tokens[:n_samples * seq_len + 1]

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

75        self.tokens = torch.tensor(tokens)
77    def __len__(self):
78        return self.n_samples

නියැදියක්ලබා ගන්න

  • idx නියැදියේ දර්ශකය වේ
  • ආදානයසහ ඉලක්කයආපසු ලබා දෙයි

80    def __getitem__(self, idx: int):
87        offset = idx * self.seq_len
88        return self.tokens[offset:offset + self.seq_len], self.tokens[offset + 1:offset + 1 + self.seq_len]
89
90
91DATASETS = {
92    'tiny_shakespeare': {
93        'file': 'tiny_shakespeare.txt',
94        'url': 'https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt'
95    }
96}

දත්තකට්ටලය පූරණය කරන්න

  • seq_len තනි පුහුණු නියැදියක අනුක්රමය දිග වේ
  • dataset_name දත්ත සමුදාය නම
  • දත්තසමුදායආපසු ලබා දෙයි

99def get_training_data(seq_len: int = 32, dataset_name: str = 'tiny_shakespeare', truncate: int = -1):
108    ds = DATASETS[dataset_name]

අන්තර්ගතයපූරණය කරන්න

110    text = load_text(lab.get_data_path() / ds['file'], ds['url'])

ටෝකනයිස්කරන්න

112    tokenizer = get_tokenizer()
113    tokens = tokenizer.encode_batch([text])[0]
114
115    if truncate > 0:
116        token_ids = tokens.ids[:truncate * seq_len]
117    else:
118        token_ids = tokens.ids

121    return NeoXDataset(token_ids, seq_len)
124def _test():
125    dataset = get_training_data()
126
127    inspect(tokens=len(dataset.tokens))

131if __name__ == '__main__':
132    _test()