Huggingfacetrainer.train(), похоже, завершается почти мгновенно
Я новичок в Huggingface и Transformers и пытаюсь настроить mt5-small на собственном наборе данных.
Проблема в том, чтоtrainer.train()
кажется, что он заканчивается очень быстро, вместо того, чтобы тренироваться. Я использовал аналогичный код для точной настройки модели из Huggingface Hub, и она прошла все этапы, как и ожидалось. Поэтому я подозреваю, что это как-то связано с тем, как я создаю собственный набор данных, но по этому поводу нет хорошей документации.
Так что же я делаю не так?
Вот код:
train_inputs = train_df['linearized_input'].tolist()
train_targets = train_df['table_text'].tolist()
validation_inputs = dev_df['linearized_input'].tolist()
validation_targets = dev_df['target'].tolist()
import torch
from transformers import MT5ForConditionalGeneration, MT5Tokenizer, DataCollatorForSeq2Seq, Seq2SeqTrainer, Seq2SeqTrainingArguments
# Define custom dataset
class ForT5Dataset(torch.utils.data.Dataset):
def __init__(self, inputs, targets):
self.inputs = inputs
self.targets = targets
def __len__(self):
return len(self.targets)
def __getitem__(self, index):
input_ids = self.inputs["input_ids"][index]
attention_mask = self.inputs["attention_mask"][index]
target_ids = self.targets["input_ids"][index]
return {
"input_ids": input_ids,
"attention_mask": attention_mask,
"labels": target_ids,
}
# Initialize the tokenizer and model
model_name = "google/mt5-small"
tokenizer = MT5Tokenizer.from_pretrained(model_name)
model = MT5ForConditionalGeneration.from_pretrained(model_name)
# Tokenize the dataset
train_input_encodings = tokenizer(train_inputs, return_tensors="pt", truncation=True, padding="max_length", max_length=128)
train_target_encodings = tokenizer(train_targets, return_tensors="pt", truncation=True, padding="max_length", max_length=128)
val_input_encodings = tokenizer(validation_inputs, return_tensors="pt", truncation=True, padding="max_length", max_length=128)
val_target_encodings = tokenizer(validation_targets, return_tensors="pt", truncation=True, padding="max_length", max_length=128)
train_dataset = ForT5Dataset(train_input_encodings, train_target_encodings)
eval_dataset = ForT5Dataset(val_input_encodings, val_target_encodings)
# Define data collator
data_collator = DataCollatorForSeq2Seq(tokenizer, model=model)
# Prepare the Trainer arguments
training_args = Seq2SeqTrainingArguments(
output_dir="./mt5-small-finetuned",
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
evaluation_strategy="steps",
eval_steps=100,
save_steps=1000,
num_train_epochs=3,
save_total_limit=3,
predict_with_generate=True
)
# Initialize Trainer
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
data_collator=data_collator,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)
# Fine-tune the model
trainer.train()
# Save the trained model
trainer.save_model()
# Evaluate the model
results = trainer.evaluate()
print(results)
И для вывода я просто получаю[3/3 00:34, Epoch 3/3]
- почему только 3/3? У меня есть тысячи образцов.
Я пробовал создать набор данных разными способами, но возникла ошибка, некоторые просто получили тот же результат, что и этот.