You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

训练HuggingFace疾病分类模型时遇'function'无pad属性报错

解决HuggingFace Trainer训练时的AttributeError: 'function' object has no attribute 'pad'错误

错误根源

你的代码存在三个核心问题:

  1. tokenize_func定义完全错误,未实现分词逻辑,反而返回了tokenizer的无效键值;
  2. DataCollatorWithPadding需要接收分词器实例,但你传入了分词函数;
  3. Trainer的tokenizer参数要求传入分词器实例,你同样传入了函数,导致后续调用pad方法时触发属性错误。

修正后的关键代码步骤

  1. 修正分词函数并生成分词数据集
from datasets import Dataset
ds = Dataset.from_pandas(df)

from transformers import AutoModelForSequenceClassification, AutoTokenizer
model_nm = 'microsoft/deberta-v3-small'
tokenz = AutoTokenizer.from_pretrained(model_nm)

# 注意:将'text'替换为你数据集中实际的文本列名
def tokenize_func(x):
    return tokenz(x['text'], truncation=True)

# 批量分词生成处理后的数据集
tok_ds = ds.map(tokenize_func, batched=True)
  1. 修正数据收集器初始化
from transformers import DataCollatorWithPadding
# 传入分词器实例tokenz,而非分词函数
data_collator = DataCollatorWithPadding(tokenizer=tokenz)
  1. 划分训练测试集(基于分词后的数据集)
dds = tok_ds.train_test_split(0.25, seed=42)
  1. 修正Trainer参数配置
id2label = {i:dx for i, dx in enumerate(list(df['Diagnosis'].unique()))}
label2id = {dx:i for i, dx in enumerate(list(df['Diagnosis'].unique()))}

from transformers import TrainingArguments,Trainer

args = TrainingArguments(
    output_dir="outputs",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=32,
    num_train_epochs=epochs,
    weight_decay=0.01,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
    push_to_hub=False,
    report_to='none',
)

model = AutoModelForSequenceClassification.from_pretrained(
    model_nm,
    num_labels=len(id2label),
    id2label=id2label,
    label2id=label2id
)

trainer = Trainer(
    model=model,
    args=args,
    train_dataset=dds['train'],
    eval_dataset=dds['test'],
    tokenizer=tokenz,  # 传入分词器实例而非函数
    data_collator=data_collator,
    compute_metrics=compute_metrics,
)

trainer.train()

额外注意事项

  • 确认你的数据集df中存在用于分类的文本列,需将代码中的'text'替换为实际列名;
  • 确保tok_ds是经过ds.map(tokenize_func, batched=True)生成的分词后数据集,否则划分训练测试集时会报错。

内容的提问来源于stack exchange,提问作者Code Monkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:44:53