基于HuggingFace run_qa.py微调T5生成式QA的数据结构及报错排查
生成式QA微调T5的适配数据规范及SageMaker配置解决方案
错误原因
ValueError: Need either a dataset name or a training/validation file 说明run_qa.py脚本无法识别你传入的数据:要么是数据路径没正确指定,要么是数据字段不符合脚本默认要求,或者没通过参数映射自定义字段。
适配生成式QA的正确数据结构
针对T5这类seq2seq模型的生成式任务,run_qa.py(适配seq2seq的版本)支持以下两种数据格式:
1. JSONL格式(推荐)
每行一个问答对,默认脚本期望的字段为context、question、answers(即使是无上下文的企业问题,context可以设为空字符串):
{"context": "", "question": "如何提升CompanyX销售额", "answers": {"text": ["优化线上营销渠道,推出会员专属折扣活动"]}}
如果你的数据只有question和answer字段,无需修改数据,直接在训练参数里指定字段映射:
hyperparameters = { "train_file": "/opt/ml/input/data/train/train.jsonl", "validation_file": "/opt/ml/input/data/val/val.jsonl", "question_column": "question", # 映射你的问题字段 "answer_column": "answer", # 映射你的答案字段 "model_name_or_path": "t5-base", "do_train": True, "do_eval": True, "output_dir": "/opt/ml/model", # 其他训练参数如batch_size、learning_rate等按需添加 }
2. 数组型JSON格式
整个文件是包含多个问答对象的数组,示例:
[ {"context": "", "question": "如何提升CompanyX销售额", "answers": {"text": ["优化线上营销渠道,推出会员专属折扣活动"]}}, {"context": "", "question": "如何降低CompanyX员工流失率", "answers": {"text": ["完善员工福利体系,提供职业晋升通道"]}} ]
SageMaker数据传入的正确操作
- 上传数据到S3:将训练/验证文件(如train.jsonl、val.jsonl)上传到S3路径,比如
s3://your-bucket/qa-train-data/和s3://your-bucket/qa-val-data/ - fit方法指定数据通道:用字典传入训练和验证数据的S3 URI:
huggingface_estimator.fit({ "train": "s3://your-bucket/qa-train-data/", "val": "s3://your-bucket/qa-val-data/" })
- 明确文件路径参数:在hyperparameters中指定
train_file和validation_file,SageMaker会把S3数据挂载到/opt/ml/input/data/<channel-name>/下,所以如果train通道的文件是train.jsonl,路径就是/opt/ml/input/data/train/train.jsonl
额外注意事项
- 若使用HuggingFace官方
run_qa.py,注意区分抽取式和生成式QA脚本:T5是seq2seq模型,建议使用适配seq2seq的QA脚本,或修改原脚本逻辑将答案处理为生成式目标文本 - 无上下文的QA场景,
context字段设为空字符串即可,不影响模型训练 - 确保数据文件为UTF-8编码,避免读取报错
内容的提问来源于stack exchange,提问作者Tom Bomer
相关产品推荐
相关产品推荐

