Каков правильный ввод / форма для тренировки предварительно обученного RoBERTa?
Прямо сейчас я пытаюсь обучить / настроить предварительно обученную модель RoBERTa с помощью многоэлементной головы, но мне трудно найти правильный ввод, чтобы моя модель могла обучаться / настраиваться.
Фрейм данных, который у меня сейчас есть, выглядит так:
С тремя вариантами токенизированных предложений, используя:
tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
for i in range(0, len(train_data)):
train_data["OptionA"][i] = tokenizer.encode(train_data["OptionA"][i])
train_data["OptionB"][i] = tokenizer.encode(train_data["OptionB"][i])
train_data["OptionC"][i] = tokenizer.encode(train_data["OptionC"][i])
Мой оценочный набор также выглядит так: тестовый набор содержит 6500 строк, а оценочный набор - 1500 строк. Я пытаюсь реализовать это с помощью:
from transformers import RobertaForMultipleChoice, Trainer, TrainingArguments
model = RobertaForMultipleChoice.from_pretrained('roberta-base')
training_args = TrainingArguments(
output_dir='./results', # output directory
num_train_epochs=1, # total # of training epochs
per_device_train_batch_size=32, # batch size per device during training
per_device_eval_batch_size=32, # batch size for evaluation
warmup_steps=500, # number of warmup steps for learning rate scheduler
weight_decay=0.01, # strength of weight decay
logging_dir='./logs', # directory for storing logs
)
trainer = Trainer(
model=model, # the instantiated 🤗 Transformers model to be trained
args=training_args, # training arguments, defined above
train_dataset = train_split, # training dataset
eval_dataset = eval_split # evaluation dataset
)
trainer.train()
Но я продолжаю получать разные ключевые ошибки, например:
KeyError: 2526
Если кто-нибудь знает, что я делаю не так, я был бы очень благодарен, так как я застрял, пытаясь тренировать эту модель в течение последних 3 дней.
1 ответ
Модель Роберты принимает ввод 514 токенов. Однако входной текст всегда должен состоять из 512 токенов. Два дополнительных токена — это [CLS] и [SEP]. Вам необходимо установить параметр усечения, чтобы обрезать любой дополнительный текст и включить заполнение для любого ввода, длина которого меньше 512 токенов. Для этого я добавляю ссылку на свой другой комментарий - /questions/63870134/preduprezhdenie-o-dline-posledovatelnosti-indeksov-tokenov-pri-ispolzovanii-pred/65986276#65986276
Ниже приведена общая структура входных данных для модели Роберты.
РОБЕРТа: [CLS] + токены + [SEP] + заполнение.