text 데이터는 보통 길이가 서로 달라서 전처리할때 padding을 해서 길이를 맞춰준다고 보통 그러는데
왜 해야할까?
보통 batch형태로 데이터를 만들어서 모델을 학습시키는데,
길이가 서로 다르면 batch가 안만들어진다
데이터셋을 다음과 같이 구현하고 dataloader를 만들어본다
class ChatbotDataset(Dataset):
def __init__(self, dataset, tokenizer, max_length = 438):
self.tokenizer = tokenizer
self.data = dataset
self.max_length = max_length
def __getitem__(self, i):
inputs = tokenizer(self.data[i][1], return_tensors = 'pt')
labels = tokenizer(self.data[i][2], return_tensors = 'pt')['input_ids']
return (inputs['input_ids'], inputs['attention_mask'], labels)
def __len__(self):
return len(self.data)
train_dataset = ChatbotDataset(preprocessed_train_data,tokenizer)
train_dataloader = DataLoader(train_dataset, batch_size=4, shuffle = True)
그리고 dataloader에서 데이터를 순회하면... 이렇게 데이터끼리 size가 안맞는다고 에러가 남

그래서 이렇게 토크나이징할때, max_length로 padding을 해주고 dataloader를 만든다면..
class ChatbotDataset(Dataset):
def __init__(self, dataset, tokenizer, max_length = 438):
self.tokenizer = tokenizer
self.data = dataset
self.max_length = max_length
def __getitem__(self, i):
inputs = tokenizer(self.data[i][1], max_length = self.max_length, padding = 'max_length', truncation = True, return_tensors = 'pt')
labels = tokenizer(self.data[i][2], max_length = self.max_length, padding = 'max_length', truncation = True, return_tensors = 'pt')['input_ids']
return (inputs['input_ids'], inputs['attention_mask'], labels)
def __len__(self):
return len(self.data)
이렇게 에러나지 않는다

728x90
'프로그래밍 > Pytorch' 카테고리의 다른 글
Pytorch에서 두 tensor가 서로 같은지 비교하고 싶다면? (0) | 2024.04.11 |
---|---|
pretrained된 computer vision 모델에서 마지막 linear layer는 제거하고 feature만 뽑는법 (0) | 2024.04.11 |
NLP huggingface model에 input을 제대로 넣었는데 IndexError: index out of range in self가 나는 이유 (0) | 2024.03.31 |
tqdm(enumerate(dataloader))와 enumerate(tqdm(dataloader)) (0) | 2024.03.28 |
pytorch의 tensor를 plt.imshow()했더니 TypeError: Invalid shape for image data (0) | 2023.11.07 |