What is happening in the trainer api, with data collator?
class CustomDataset(Dataset):definit(self, evaluate: bool = False):self.examples = []
    self.sample_size=10 # change it to something meaningful later

    self.src_files = dpy

    for i in range(self.sample_size):
        sentences=dpy['train']['whole_func_string'][i].split('\n')
        self.examples+=[t.ids for t in tokenizer.encode_batch(sentences)]

def __len__(self):
    return len(self.examples)

def __getitem__(self, i):
    # We’ll pad at the batch level.
    return torch.tensor(self.examples[i], dtype=torch.int64)d=CustromDataset()Define the Data Collatordata_collator = DataCollatorForLanguageModeling(tokenizer=fast_tokenizer, mlm=True, mlm_probability=0.15, return_tensors=‘pt’)from transformers import Trainer, TrainingArgumentstraining_args = TrainingArguments(output_dir=“./bert”,overwrite_output_dir=True,num_train_epochs=100,do_train=True,per_gpu_train_batch_size=32,save_steps=500,save_total_limit=2)trainer = Trainer(model=model,args=training_args,train_dataset=d,eval_dataset=d,data_collator=data_collator)Question: My question is here train_dataset is d and also eval_dataset is d, Does the data_collator mask the train_dataset and train against original eval_dataset d? Or, Do, I need to provide completely new dataset here?what is the role the data_collator playing here in the training, what does it exactly do?