HuggingFace的Trainer是否会自动忽略模型不需要的特征?
Transformers Trainer 无关特征处理说明
你不需要手动删除数据集里的原始text列,这部分特征不会传入BERT模型,整套过滤逻辑是Trainer API在后台自动完成的。
具体处理流程
- Trainer初始化数据加载器时,会自动读取当前加载模型的
forward方法参数列表,提取模型可接收的合法字段,对BERT分类模型来说,合法字段包含input_ids、token_type_ids、attention_mask、label。 - 数据迭代读取阶段,Trainer默认开启
remove_unused_columns=True配置,会自动筛除数据集里不在上述合法字段列表里的列,你保留的text列会在这一步被静默丢弃,不会传入后续的数据整理器,更不会进入模型前向传播环节。 - 只有当你需要用
text列做自定义逻辑(比如数据增强、预测结果和原始文本对齐校验)时,才需要在初始化Trainer时传入remove_unused_columns=False关闭自动过滤,这时候你需要自行在data_collator环节筛除模型不需要的字段,避免传入非预期参数触发模型报错。
对应你的场景验证
你当前使用的数据集结构如下:
DatasetDict({ train: Dataset({ features: ['text', 'label', 'input_ids', 'token_type_ids', 'attention_mask'], num_rows: 6851 }) test: Dataset({ features: ['text', 'label', 'input_ids', 'token_type_ids', 'attention_mask'], num_rows: 762 }) })
你的Trainer初始化代码没有修改默认的列移除配置:
trainer = Trainer( model, training_args, train_dataset=data["train"], eval_dataset=data["test"], data_collator=data_collator, tokenizer=tokenizer, compute_metrics=compute_metrics )
该配置下训练流程完全正常,
text列不会对BERT微调造成任何影响,既不会额外占用显存,也不会引发参数不匹配报错,无需手动提前删除。
内容的提问来源于stack exchange,提问作者Tom Leung
相关产品推荐
相关产品推荐

