Fra*_*TEC 7 python pytorch huggingface-transformers
我正在尝试使用 Trainer 训练模型,根据文档(https://huggingface.co/transformers/master/main_classes/trainer.html#transformers.Trainer)我可以指定一个标记器:
tokenizer (PreTrainedTokenizerBase, optional) – 用于预处理数据的 tokenizer。如果提供,将用于在批处理输入时自动填充输入的最大长度,并将沿模型保存,以便更轻松地重新运行中断的训练或重用微调的模型。
因此应该自动处理填充,但是在尝试运行它时出现此错误:
ValueError:无法创建张量,您可能应该使用 'padding=True' 'truncation=True' 激活截断和/或填充以具有相同长度的批处理张量。
分词器是这样创建的:
tokenizer = BertTokenizerFast.from_pretrained(pretrained_model)
Run Code Online (Sandbox Code Playgroud)
和这样的训练师:
trainer = Trainer(
tokenizer=tokenizer,
model=model,
args=training_args,
train_dataset=train,
eval_dataset=dev,
compute_metrics=compute_metrics
)
Run Code Online (Sandbox Code Playgroud)
我试过将padding
和truncation
参数放在分词器、训练器和training_args 中。什么都不做。任何的想法?
小智 7
查看您的标记器返回的列。您可能只想将其限制为所需的列。
例如
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)
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。