如何使用拥抱脸形变压器批量制作教练垫输入?

时间:2020-09-24 13:13:53

标签: python pytorch huggingface-transformers

根据文档(https://huggingface.co/transformers/master/main_classes/trainer.html#transformers.Trainer),我正在尝试使用Trainer训练模型,我可以指定令牌生成器:

tokenizer(PreTrainedTokenizerBase,可选)–令牌生成器用于 预处理数据。如果提供,将用于自动填充 批处理输入时,输入的最大长度为 沿模型保存,以便更轻松地重新运行被中断的对象 训练或重复使用经过微调的模型。

因此应该自动处理填充,但是在尝试运行填充时会出现此错误:

ValueError:无法创建张量,您应该激活 使用'padding = True''truncation = True'截断和/或填充 具有相同长度的成批张量。

令牌生成器是通过以下方式创建的:

tokenizer = BertTokenizerFast.from_pretrained(pretrained_model)

还有这样的培训师:

trainer = Trainer(
    tokenizer=tokenizer,
    model=model,
    args=training_args,
    train_dataset=train,
    eval_dataset=dev,
    compute_metrics=compute_metrics
)

我尝试将paddingtruncation参数放在令牌生成器,Trainer和training_args中。没事有想法吗?

1 个答案:

答案 0 :(得分:6)

查看您的标记器返回的列。您可能只想将其限制为所需的列。

例如

def preprocess_function(examples):
#function to tokenize the dataset.
if sentence2_key is None:
    return tokenizer(examples[sentence1_key], truncation=True,padding=True)
return tokenizer(examples[sentence1_key], examples[sentence2_key], truncation=True,padding=True)


encoded_dataset = dataset.map(preprocess_function, 
batched=True,load_from_cache_file=False)


#Thing you should do is 

columns_to_return = ['input_ids', 'label', 'attention_mask']
encoded_dataset.set_format(type='torch', columns=columns_to_return)

希望有帮助。