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

基于XLSum微调MT5阿拉伯语抽象摘要模型的张量错误解决

MT5阿拉伯语摘要微调试错:解决张量创建维度错误

错误根源

你触发的ValueError: too many dimensions 'str'和张量创建失败,核心问题有两个:

  1. 验证集格式不兼容:用df.apply(convert_examples_to_features___train, axis=1)生成的df_train_pt是pandas Series,每个元素是字典,但Hugging Face的Trainer要求训练/验证集必须是datasets.Dataset类型,而非pandas结构。
  2. 数据处理逻辑不一致:训练集用批量处理的map方法,验证集却逐行处理,且两者的文本最大长度设置不同(训练集max_length=520,验证集max_length=1024),导致张量形状无法对齐,进而触发维度错误。

分步解决

1. 统一数据格式:将自定义验证集转为Dataset

把你的pandas验证集DataFrame转换成datasets.Dataset,和训练集保持一致格式:

from datasets import Dataset
# 将pandas DataFrame转为Dataset对象
val_dataset = Dataset.from_pandas(df)

2. 统一数据处理函数

删除冗余的convert_examples_to_features___train函数,直接复用训练集的convert_examples_to_features2处理验证集,确保参数完全一致:

# 统一处理逻辑:训练集和验证集用同一个函数、相同参数
def convert_examples_to_features2(example_batch):
    # 统一文本最大长度为1024,避免信息丢失
    input_encodings = tokenizer(example_batch['text'], max_length=1024, truncation=True, padding=True)

    with tokenizer.as_target_tokenizer():
        target_encodings = tokenizer(example_batch['summary'], max_length=128, truncation=True, padding=True)

    return {
        'input_ids': input_encodings['input_ids'],
        'attention_mask': input_encodings['attention_mask'],
        'labels': target_encodings['input_ids']
    }

# 批量处理训练集和验证集
datasets_pt = dataset.map(convert_examples_to_features2, batched=True)
val_dataset_pt = val_dataset.map(convert_examples_to_features2, batched=True)

3. 修复Trainer初始化参数

将Trainer中的验证集替换为处理好的val_dataset_pt:

trainer = Trainer(
    model=model,
    args=trainer_args,
    train_dataset=datasets_pt["train"],
    eval_dataset=val_dataset_pt,  # 替换为标准Dataset格式的验证集
    data_collator=seq2seq_data_collator,
    tokenizer=tokenizer,
)

4. 额外优化:清理冗余代码

  • 删除重复加载的MT5ForConditionalGeneration实例,保留最后一次带to(device)的模型加载逻辑;
  • 确保训练集和验证集的tokenizer参数完全一致,避免因参数差异导致的张量形状不匹配。

关键修正后的完整代码片段

# 加载自定义验证集并转为Dataset
df = pd.read_json("/content/drive/MyDrive/labeled_validation_dataset.jsonl", lines=True, orient='records')
val_dataset = Dataset.from_pandas(df)

# 统一数据处理函数
def convert_examples_to_features2(example_batch):
    input_encodings = tokenizer(example_batch['text'], max_length=1024, truncation=True, padding=True)

    with tokenizer.as_target_tokenizer():
        target_encodings = tokenizer(example_batch['summary'], max_length=128, truncation=True, padding=True)

    return {
        'input_ids': input_encodings['input_ids'],
        'attention_mask': input_encodings['attention_mask'],
        'labels': target_encodings['input_ids']
    }

# 批量处理训练集和验证集
datasets_pt = dataset.map(convert_examples_to_features2, batched=True)
val_dataset_pt = val_dataset.map(convert_examples_to_features2, batched=True)

# 初始化Trainer
trainer = Trainer(
    model=model,
    args=trainer_args,
    train_dataset=datasets_pt["train"],
    eval_dataset=val_dataset_pt,
    data_collator=seq2seq_data_collator,
    tokenizer=tokenizer,
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:24:57