NLP text data 전처리에서 tokenizing할 때 padding이 필요한 이유

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)

 

 

이렇게 에러나지 않는다

 

TAGS.

Comments