[fix] Fix truncation in collate fn

This commit is contained in:
theblackcat102
2022-12-31 09:27:09 +00:00
parent b2ef4695a0
commit 3a10f1024a
2 changed files with 15 additions and 11 deletions
+7 -4
View File
@@ -38,8 +38,10 @@ class DataCollatorForPairRank:
batch_size = 0
for question, pairs in features:
for (pos, neg) in pairs:
flatten_features.append(self.tokenizer(question, pos, truncation=True))
flatten_features.append(self.tokenizer(question, neg, truncation=True))
flatten_features.append(self.tokenizer(question, pos,
truncation=True, max_length=self.max_length))
flatten_features.append(self.tokenizer(question, neg,
truncation=True, max_length=self.max_length))
batch_size += 1
batch = self.tokenizer.pad(
@@ -147,6 +149,8 @@ class HFSummary(Dataset):
self.summaries = summaries
self.postfix_prompt = ' TLDR;'
def __len__(self):
return len(self.index2summary)
@@ -159,6 +163,5 @@ class HFSummary(Dataset):
# not optimal but good for now
valid_idx = np.random.choice(len(rows), self.max_comparison_per_sample)
# optimize the format later
return context, [ r for idx, r in enumerate(rows) if idx in valid_idx ]
return context+self.postfix_prompt, [ r for idx, r in enumerate(rows) if idx in valid_idx ]
+8 -7
View File
@@ -6,10 +6,10 @@ from torch import nn
import numpy as np
import evaluate
from dataclasses import dataclass
from torch.utils.data import Dataset
from torch.utils.data import Dataset, ConcatDataset
from transformers import AutoModelForSequenceClassification, AutoModelForMultipleChoice
from transformers import Trainer, PreTrainedModel, TrainingArguments, DataCollator, EvalPrediction, TrainerCallback, PreTrainedTokenizerBase
from rank_datasets import DataCollatorForPairRank, WebGPT
from rank_datasets import DataCollatorForPairRank, WebGPT, HFSummary
from utils import get_tokenizer, train_val_dataset
accuracy = evaluate.load("accuracy")
@@ -88,7 +88,7 @@ class RankTrainer(Trainer):
if __name__ == "__main__":
model_name = 'bigscience/bloomz-560m'
model_name = 'google/electra-base-discriminator'
model_name = 'google/electra-large-discriminator'
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=1, problem_type='regression')
tokenizer = get_tokenizer(model_name)
args = CustomTrainingArguments(
@@ -99,9 +99,9 @@ if __name__ == "__main__":
learning_rate=3e-5,
# half_precision_backend="apex",
fp16=True,
gradient_checkpointing=False,
gradient_accumulation_steps=5,
per_device_train_batch_size=16,
gradient_checkpointing=True,
gradient_accumulation_steps=8,
per_device_train_batch_size=8,
per_device_eval_batch_size=5,
weight_decay=0.01,
max_grad_norm=2.0,
@@ -114,7 +114,8 @@ if __name__ == "__main__":
)
dataset = WebGPT()
train, eval = train_val_dataset(dataset)
collate_fn = DataCollatorForPairRank(tokenizer, max_length=400)
train = ConcatDataset([train, HFSummary()])
collate_fn = DataCollatorForPairRank(tokenizer, max_length=440)
trainer = RankTrainer(
model,
args,