"ValueError: вы должны указать input_ids или inputs_embeds" при использовании трейнера - PullRequest
0 голосов
/ 04 августа 2020

Я получаю "ValueError: You have to specify either input_ids or inputs_embeds" из, казалось бы, простого примера обучения:

Iteration:   0%|                                                                                                                                                             | 0/6694 [00:00<?, ?it/s]
Epoch:   0%|                                                                                                                                                                    | 0/3 [00:00<?, ?it/s]
Traceback (most recent call last):
  File "train_masked_lm.py", line 33, in <module>
    trainer.train()
  File "/home/zm/anaconda3/envs/electra/lib/python3.7/site-packages/transformers/trainer.py", line 503, in train
    tr_loss += self._training_step(model, inputs, optimizer)
  File "/home/zm/anaconda3/envs/electra/lib/python3.7/site-packages/transformers/trainer.py", line 629, in _training_step
    outputs = model(**inputs)
  File "/home/zm/anaconda3/envs/electra/lib/python3.7/site-packages/torch/nn/modules/module.py", line 550, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/zm/anaconda3/envs/electra/lib/python3.7/site-packages/transformers/modeling_electra.py", line 639, in forward
    return_tuple,
  File "/home/zm/anaconda3/envs/electra/lib/python3.7/site-packages/torch/nn/modules/module.py", line 550, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/zm/anaconda3/envs/electra/lib/python3.7/site-packages/transformers/modeling_electra.py", line 349, in forward
    raise ValueError("You have to specify either input_ids or inputs_embeds")
ValueError: You have to specify either input_ids or inputs_embeds

Моя цель - взять предварительно обученную модель и обучить ее немного дальше на основе дополнительных данных. Новое в трансформаторах. Должно быть, что-то не так. Пожалуйста, помогите!

Я адаптировал https://huggingface.co/blog/how-to-train следующим образом:

from transformers import (
  ElectraForMaskedLM,
  ElectraTokenizer,
  Trainer,
  TrainingArguments,
  LineByLineTextDataset
)

model = ElectraForMaskedLM.from_pretrained('google/electra-base-generator')
tokenizer = ElectraTokenizer.from_pretrained('google/electra-base-generator')

def to_dataset(input_file):
  return LineByLineTextDataset(file_path=input_file, tokenizer=tokenizer, block_size=128)


training_args = TrainingArguments(
  output_dir='./output',
  overwrite_output_dir=True,
  num_train_epochs=3,
  per_device_train_batch_size=64,
  per_device_eval_batch_size=64,
  save_steps=10000,
  warmup_steps=500,
  logging_dir='./logs',
)

trainer = Trainer(
  model=model,
  args=training_args,
  train_dataset=to_dataset('...../lines.txt'), # \n-separated lines of text (sentences)
)
trainer.train()

Вышеупомянутая ошибка возникает через несколько секунд после запуска скрипта и является самым первым результатом .

...