python - 如何使用拥抱脸变压器批量制作训练器垫输入?
问题描述
根据文档(https://huggingface.co/transformers/master/main_classes/trainer.html#transformers.Trainer),我正在尝试使用 Trainer 训练模型,我可以指定一个标记器:
标记器(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
)
我已经尝试将padding
andtruncation
参数放入标记器、Trainer 和 training_args 中。什么都没有。任何想法?
解决方案
查看您的标记器返回的列。您可能希望将其限制为仅必需的列。
例如
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)
希望能帮助到你。
推荐阅读
- c++ - 是否可以将 Lua 脚本修改为要求?
- ios - 无法将值保存到核心数据
- jquery - 如何在 MVC 应用程序中使用 Jquery 创建向导?
- python - TensorFlow 对象检测自定义数据集
- android - 如何在滑行中使用错误或占位符的图像数组
- javascript - 仅当过渡元素是组件中的根元素时才调用过渡钩子
- android - java.text.ParseException:无法解析的日期:“2018 年 8 月 6 日上午 11:14:02”(偏移量 1)
- python - 在 SQL 中搜索元素
- python-3.x - Tkinter 中的一个组合框、一个按钮和两个页面
- amazon-ecs - How can I do to not let the container restart in aws ecs?