데이터셋 클래스를 위한 코드는 다음과 같습니다.
코드 2-5 배치 입력과 타깃을 위한 데이터셋
import torch
from torch.utils.data import Dataset, DataLoader
class GPTDatasetV1(Dataset):
def __init__(self, txt, tokenizer, max_length, stride):
self.input_ids = []
self.target_ids = []
token_ids = tokenizer.encode(txt) ----- 전체 텍스트를 토큰화합니다.
for i in range(0, len(token_ids) - max_length, stride): ----- 슬라이딩 윈도를 사용해 책을 max_length 길이의 중첩된 시퀀스로 나눕니다.
input_chunk = token_ids[i:i + max_length]
target_chunk = token_ids[i + 1: i + max_length + 1]
self.input_ids.append(torch.tensor(input_chunk))
self.target_ids.append(torch.tensor(target_chunk))
def __len__(self): ----- 데이터셋에 있는 전체 행 수를 반환합니다.
return len(self.input_ids)
def __getitem__(self, idx): ----- 데이터셋에서 하나의 행을 반환합니다.
return self.input_ids[idx], self.target_ids[idx]