ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • excel, csv, data frame으로 torch dataloader 만들기(BERT용)
    Deep learning 구현 2022. 9. 22. 00:07

    1. 통으로 바꾸기

     

    csv, excel, parquet로 된 data를 data frame 으로 읽어오기

     

    data_train = pd.read_parquet(train_file_path)[[source_var, target_var]]



    lab_encoder로 label column의 데이터를 숫자화 시킴

     

    lab_encoder.fit(data_all[target_var])

    data_train[target_var] = lab_encoder.transform(data_train[target_var])



    dataset의 from_pandas 이용해서 위에서 만든 data frame으로 dataset 만들기

    raw_train = Dataset.from_pandas(data_train)



    tokenizer 사용해서 dataset을 tokenizing 하고 torch format으로 변경

    def tokenize_function(examples):

        return tokenizer(examples['text'], padding="max_length", truncation=True)

    tokenized_train = raw_train.map(tokenize_function, batched=True)

    tokenized_train = tokenized_train.remove_columns(["text"])

    tokenized_train.set_format("torch")



    tokenizing 된 dataset 을 Dataloader에 넣어줘서 dataloader 생성

    train_dataloader = DataLoader(tokenized_train, shuffle=True, batch_size=16)

     

    2. custom Dataset 이용

     

    custom Dataset 함수 정의

        class MyDataset(Dataset):
            def __init__(self, encodings, labels):
                self.encodings = encodings
                self.labels = labels

            def __getitem__(self, idx):
                item = {}
                item['input_ids'] = torch.tensor( self.encodings[idx]['input_ids'] )
                item['attention_mask'] = torch.tensor(self.encodings[idx]['attention_mask'])
                item['labels'] = torch.tensor(int(self.labels[idx]))
                return item

            def __len__(self):
                return len(self.labels)
    csv로부터 dataset load
     
        raw_data = load_dataset("csv", data_files={'train': train_file_path})
     
    tokenizer 선언과 tokenize function 선언
     
        tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
        def tokenize_function(examples):
            ret = tokenizer(examples['msg'], padding="max_length", truncation=True, max_length = MAX_LENGTH)
            return ret
       
    tokenizer function을 거치고 이것으로 custom Dataset init해준 후 처리된 data를 DataLoader에 넣어 dataloader 만들어줌. 
     
        tokenized_data = raw_data.map(tokenize_function, batched=True)
        mtrain_dataset = MyDataset(tokenized_data["train"], tokenized_data["train"]['labels'])
        train_dataloader = DataLoader(mtrain_dataset, batch_size=args.bs, shuffle=True, drop_last=True)
Designed by Tistory.