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)