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

微调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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:12:48