如何将自定义CSV数据转换为Hugging Face兼容的Squad式QA数据集
解决CSV转Hugging Face Squad格式QA数据集的问题
你的核心问题有两个:一是代码存在语法错误,二是未匹配Squad格式要求的answers字段结构。Squad格式中,answers是包含字典的列表(即使只有单个答案),而非单个字典,同时你的apply调用缺少axis=1参数导致未按行处理数据。
修正步骤与代码
- 按行处理数据并生成符合要求的
answers结构 - 转换为Hugging Face Dataset后验证格式
完整代码如下:
import pandas as pd from datasets import Dataset # 加载CSV文件 df = pd.read_csv("your_dataset.csv") # 生成符合Squad格式的answers字段:列表包裹字典 df["answers"] = df.apply( lambda x: {"answer_start": [x.answer_start], "text": [x.text]}, axis=1 # 必须添加axis=1,指定按行处理 ) # 保留需要的字段 df = df[["id", "question", "context", "answers"]] # 转换为Dataset train_dataset = Dataset.from_pandas(df) # 可选:验证格式是否正确,查看第一条数据 print(train_dataset[0])
关键说明
- 列表结构的必要性:Hugging Face的QA任务数据集(如Squad)默认支持多答案场景,因此
answer_start和text都需要是列表类型,即使你的数据只有单个答案。如果直接用单个数值/字符串,训练时会触发格式错误。 - axis=1参数:
pandas.DataFrame.apply默认按列处理,添加axis=1才能遍历每一行生成对应的answers字典。
额外验证
如果转换后仍有问题,可以对比官方Squad数据集的格式:
from datasets import load_dataset squad = load_dataset("squad", split="train") print(squad[0])
确保你的train_dataset的answers字段结构与Squad完全一致。
内容的提问来源于stack exchange,提问作者Lcat
相关产品推荐
相关产品推荐

