微调ruDialoGPT-medium模型时遇TextDataset初始化错误求助
问题解决方案
错误原因
你错误使用了TextDataset的构造逻辑:它的初始化必须传入file_path(训练文本文件路径)和block_size(文本块大小)两个必填参数,而非直接传入token列表。此外,当前版本的transformers库中TextDataset已被标记为弃用,更推荐使用LineByLineTextDataset或Dataset类处理数据。
完整修改代码
import json import torch from transformers import ( AutoTokenizer, AutoModelForCausalLM, LineByLineTextDataset, DataCollatorForLanguageModeling, Trainer, TrainingArguments ) # 加载并处理数据集 with open("dataset_final.json", "r", encoding="utf-8") as f: data = json.load(f) # 初始化tokenizer并补全pad_token tokenizer = AutoTokenizer.from_pretrained("tinkoff-ai/ruDialoGPT-medium") if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token # 格式化对话样本:问题+模型结束标记+回答,符合GPT自回归训练逻辑 formatted_samples = [] for item in data: q, a = item["sample"] sample_text = f"{q.strip()} {tokenizer.eos_token} {a.strip()}" formatted_samples.append(sample_text) # 将格式化样本保存为文本文件,用于数据集加载 with open("train_data.txt", "w", encoding="utf-8") as f: f.write("\n".join(formatted_samples)) # 加载预训练模型(替换已弃用的AutoModelWithLMHead) model = AutoModelForCausalLM.from_pretrained("tinkoff-ai/ruDialoGPT-medium") # 正确加载数据集 dataset = LineByLineTextDataset( tokenizer=tokenizer, file_path="train_data.txt", block_size=256 # 根据显存调整,可选128/256/512等 ) data_collator = DataCollatorForLanguageModeling( tokenizer=tokenizer, mlm=False # GPT为自回归模型,无需掩码语言建模 ) # 调整训练参数:无验证集时将evaluation_strategy设为"no" training_args = TrainingArguments( output_dir="./results", evaluation_strategy="no", learning_rate=2e-5, per_device_train_batch_size=1, num_train_epochs=5, weight_decay=0.01, logging_dir="./logs", ) trainer = Trainer( model=model, args=training_args, train_dataset=dataset, data_collator=data_collator, ) # 启动训练并保存模型 trainer.train() model.save_pretrained('new_model') tokenizer.save_pretrained('new_model')
关键修改点说明
- 模型类替换:用
AutoModelForCausalLM替代已弃用的AutoModelWithLMHead,这是官方推荐的因果语言模型加载方式。 - 数据格式修正:将问答对拼接为模型可识别的训练格式,确保模型能学习到问答的上下文关联。
- 数据集加载修复:使用
LineByLineTextDataset传入必填参数,符合库的规范要求。 - 训练参数调整:因原代码未准备验证集,将
evaluation_strategy改为"no",避免训练时触发验证逻辑报错。 - 补全pad_token:解决tokenizer无填充标记导致的数据处理异常问题。
内容的提问来源于stack exchange,提问作者Ubuty_programmist_7
相关产品推荐
相关产品推荐

