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

微调Protbert划分数据集时出现KeyError: 'test'问题求助

解决KeyError: 'test'问题的方法

问题根源

用load_dataset('csv', data_files='/content/sequences.csv')加载单个CSV文件时,🤗 Datasets库默认只会生成名为train的数据集拆分,不会自动创建test拆分,直接访问tokenized_datasets["test"]自然会触发键错误。

两种可行解决方案

方案1:加载时直接拆分数据集

调用load_dataset时,利用train_test_split参数一次性完成数据集拆分:

# 加载CSV并按8:2比例拆分训练集和测试集
dataset = load_dataset('csv', data_files='/content/sequences.csv').train_test_split(test_size=0.2)

tokenizer = BertTokenizer.from_pretrained("Rostlab/prot_bert", do_lower_case=False )

def tokenize_function(samples):
   return tokenizer(samples["Protein Sequence"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

# 此时可正常访问train和test拆分
small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))

方案2:手动拆分已加载的train数据集

如果已经加载了仅含train拆分的数据集,可手动拆分后重组:

dataset = load_dataset('csv', data_files='/content/sequences.csv')

# 将原train数据集拆分为新的train和test子集
split_dataset = dataset["train"].train_test_split(test_size=0.2)
# 重组为包含train和test的数据集字典
dataset = {
    "train": split_dataset["train"],
    "test": split_dataset["test"]
}

tokenizer = BertTokenizer.from_pretrained("Rostlab/prot_bert", do_lower_case=False )

def tokenize_function(samples):
   return tokenizer(samples["Protein Sequence"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))

额外提醒

  • 确认CSV文件包含label列,否则后续训练会因找不到标签报错
  • test_size参数可按需调整,比如设为0.1代表10%数据用作测试集

内容的提问来源于stack exchange,提问作者eneko valero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:27:11