Dataloader example
Dataloader example¶
import pandas as pd
from torch.utils.data import Dataset, DataLoader
import torch
# cria um dataframe qualquer
df = pd.DataFrame({"id":[0,1,2,3,4],"text":["samara foi ate a feira",
"junior nao saiu de casa",
"cinthia comprou fruta",
"leo correu atras do gato",
"igor quebrou o dedo"]})
df.to_csv("data/dataset.csv",index=False)
df
id | text | |
---|---|---|
0 | 0 | samara foi ate a feira |
1 | 1 | junior nao saiu de casa |
2 | 2 | cinthia comprou fruta |
3 | 3 | leo correu atras do gato |
4 | 4 | igor quebrou o dedo |
# classe dataset
class samaraDataset(Dataset):
"""Face Landmarks dataset."""
def __init__(self, csv_file, root_dir, transform=None):
"""
Args:
csv_file (string): Path to the csv file with annotations.
root_dir (string): Directory with all the images.
transform (callable, optional): Optional transform to be applied
on a sample.
"""
self.data_frame = pd.read_csv(csv_file)
self.root_dir = root_dir
self.transform = transform
def __len__(self):
return len(self.data_frame)
def __getitem__(self, idx):
if torch.is_tensor(idx):
idx = idx.tolist()
text = self.data_frame["text"].iloc[idx]
id_ = self.data_frame["id"].iloc[idx]
sample = {"id":id_,'text': text}
if self.transform:
sample = self.transform(sample)
return sample
# lê e instancia o dataset
dataset = samaraDataset(csv_file='./data/dataset.csv',root_dir='./data/')
# cria o dataloader
dataloader = DataLoader(dataset, batch_size=2,
shuffle=True, num_workers=4)
# duas funções quaisquer pra simular o tokenizer e o cara que calcular os embeddings do bert
def bert_tokenizer(text):
tokens = text.split(" ")
return tokens
def bert_calculator(text):
return [5*len(item) for item in text]
# cria um dataframe vazio onde os dados serão salvos
pd.DataFrame({"id":[],"text":[],"tokens":[],"embeddings":[]}).to_csv("data/transformed_data.csv",index=False)
# faz o cálculo por batch
for i_batch, sample_batched in enumerate(dataloader):
idx,sample = sample_batched.items()
x = pd.DataFrame({"id":idx[1].numpy(),"text":sample[1]})
x["tokens"] = x.apply(lambda x: bert_tokenizer(x["text"]),axis=1)
x["embeddings"] = x.apply(lambda x: bert_calculator(x["tokens"]),axis=1)
x.to_csv("data/transformed_data.csv",header=None,index=False,mode="a")
# vê como ficou o dataframe final
pd.read_csv("data/transformed_data.csv")
id | text | tokens | embeddings | |
---|---|---|---|---|
0 | 3 | leo correu atras do gato | ['leo', 'correu', 'atras', 'do', 'gato'] | [15, 30, 25, 10, 20] |
1 | 1 | junior nao saiu de casa | ['junior', 'nao', 'saiu', 'de', 'casa'] | [30, 15, 20, 10, 20] |
2 | 4 | igor quebrou o dedo | ['igor', 'quebrou', 'o', 'dedo'] | [20, 35, 5, 20] |
3 | 2 | cinthia comprou fruta | ['cinthia', 'comprou', 'fruta'] | [35, 35, 25] |
4 | 0 | samara foi ate a feira | ['samara', 'foi', 'ate', 'a', 'feira'] | [30, 15, 15, 5, 25] |