Каков правильный ввод / форма для тренировки предварительно обученного 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] + заполнение.

Другие вопросы по тегам