Hugging Face多选QA适配数据集时DataCollator报KeyError: 'labels'
多选QA适配自定义数据集标签字段报错解决方案
错误根因
你使用的目标数据集标签字段为answerKey,但当前DataCollatorForMultipleChoice的默认逻辑仅检查label和labels两个字段名,两个字段都不存在时会尝试取出不存在的labels字段,因此触发KeyError。
解决方案
方案1:数据集预处理阶段重命名字段(推荐,代码改动最小)
在加载完自定义数据集后,直接将answerKey字段重命名为collator默认识别的label字段即可:
# 加载完数据集后执行 dataset = dataset.rename_column("answerKey", "label")
方案2:修改DataCollator逻辑兼容多标签字段名
调整collator中标签字段的判断逻辑,新增对answerKey的识别支持:
def __call__(self, features): print(features[0].keys()) # 调整标签字段判断逻辑 if "answerKey" in features[0]: label_name = "answerKey" elif "label" in features[0]: label_name = "label" else: label_name = "labels" labels = [feature.pop(label_name) for feature in features] # 后续原有逻辑保持不变
注意事项
如果你的数据集answerKey存储的是A/B/C/D这类字符串格式的答案标识,需要先将其转换为0/1/2/3对应的整数索引,否则后续模型计算损失时会出现类型不匹配报错,转换示例如下:
ans_mapping = {"A":0, "B":1, "C":2, "D":3} def convert_ans_to_idx(example): example["label"] = ans_mapping[example["label"]] return example # 重命名字段后执行映射转换 dataset = dataset.map(convert_ans_to_idx)
内容的提问来源于stack exchange,提问作者programming123
相关产品推荐
相关产品推荐

